The most suspicious thing is self.__dict__['foo'] = list() as well as the direct access to self.__dict__['foo']. If "self" is a mapped object, then thats your issue.
Also note this is still an out of context cut-and-paste, if you really want me to figure it out it has to be an isolated test script. On Nov 19, 2010, at 2:49 PM, Alvaro Reinoso wrote: > 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. > -- 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.