Ok, This is the code:

        @staticmethod
        def insert(string, mode):
                """Insert a new item given a string"""
                screenGroup = ScreenGroup()
                session = rdb.Session()

                try:
                        if mode == "XML":
                                screenGroup.fromXML(string)
                        elif mode == "JSON":
                                screenGroup.fromJSON(string)
                        if screenGroup.id == None:
                                session.add(screenGroup)
                        else:
                                screenGroup = session.merge(screenGroup)

                        session.flush()
                        result = "Successful:" + str(screenGroup.id) + "," +
screenGroup.title
                        return result
                except Exception, e:
                        log.warn("::ScreenGroupManager, insert > The error is " 
+ str(e))
                        return "<WARN>Error connecting to the database. Please 
try again
later.</WARN>"

                return "<WARN>Error connecting to the database. Please try again
later.</WARN>"

This is the function where it gets the error. When I already have the
item and I merge It works out. However, if it's a new item, breaks.
This anothe fromXML function:

        def fromXML(self, data):
                """Unserializes this class from an XML formatted file or 
string."""
                root = ""
                try:
                        if(data.endswith(".xml")):
                                doc = etree.parse(data)
                                root = doc.getroot()
                        else:
                                root = etree.XML(data)
                except etree.XMLSyntaxError, e:
                        print e
                        pass

                if not type(root) == type(etree.XML("<data>test</data>")):
                        return

                if root.tag == "screenGroup":
                        for child in root.iterchildren():
                                if child.tag == "screens" or child.tag == 
"screenGroups":
                                        if child.text:
                                                items = child.text.split(",")
                                                self.__dict__[child.tag] = 
list()
                                                for itemId in items:
                                                        if child.tag == 
"screens":
                                                                item = 
ScreenManager.getScreenById(itemId)
                                                        else:
                                                                item = 
ScreenGroupManager.getGroupScreenById(itemId)
                                                        
self.__dict__[child.tag].append(item)
                                else:
                                        self.setAttr(child.tag, child.text)

ScreenManager.getScreenById(itemId) and
ScreenGroupManager.getGroupScreenById(itemId) just get the item from
the database (session.query(Screen).get(int(itemId))).

This is the XML string : <screenGroup><title>Group 10</
title><screens>4,3</screens><screenGroups></screenGroups></
screenGroup>

Thanks!

On Nov 18, 7:07 pm, Michael Bayer <mike...@zzzcomputing.com> wrote:
> looks fine to me, would need full stack trace + single script file of 
> runnable, reproducing code, thanks.
>
> On Nov 18, 2010, at 6:37 PM, Alvaro Reinoso wrote:
>
> > Hello,
>
> > When trying to add a new item doing:
>
> > session = session.add(mediaGroup)
>
> > I got this error:
>
> > Module sqlalchemy.orm.attributes:834 in get_collection
> >   return getattr(user_data, '_sa_adapter')
> >   class GenericBackrefExtension(interfaces.AttributeExtension):>>
> > return getattr(user_data, '_sa_adapter')
>
> > "AttributeError: 'list' object has no attribute '_sa_adapter'"
>
> > This object's class:
>
> > class ScreenGroup(rdb.Model):
> >    """The ScreenGroup is a class derived from ScreenGroup, it is used to
> > control users within a group"""
> >    rdb.metadata(metadata)
> >    rdb.tablename("screen_groups")
>
> >    id = Column("id", Integer, primary_key=True)
> >    title = Column("title", String(100))
> >    parents = Column("parents", String(512))
>
> >    screens = relationship("Screen", secondary=group_screens,
> > order_by="Screen.title", backref="screen_groups")
> >    screenGroups = relationship("ScreenGroup",
> > secondary=screen_group_groups, order_by="ScreenGroup.title",
> >            primaryjoin=lambda: ScreenGroup.id ==
> > screen_group_groups.c.screen_groupA_id,
> >            secondaryjoin=lambda: ScreenGroup.id ==
> > screen_group_groups.c.screen_groupB_id,
> >            backref="screen_groups")
>
> > Thanks in advance!
>
> > --
> > You received this message because you are subscribed to the Google Groups 
> > "sqlalchemy" group.
> > To post to this group, send email to sqlalch...@googlegroups.com.
> > To unsubscribe from this group, send email to 
> > sqlalchemy+unsubscr...@googlegroups.com.
> > For more options, visit this group 
> > athttp://groups.google.com/group/sqlalchemy?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalch...@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to