Hello list, I'm in the process of converting an old SQLObject model to SQLAlchemy. To ease the translation process I'm usinf the threadlocal mod, but I'm experimenting trouble whwn I use an association object (which I do according to the docs).
I'm not sure if I'm doing something wrong; as far as my object model is kinda complex, I've modified the unittest for association objects to use the threadlocal mod, and none of the test passes (3 errors and 1 failure, although the failure, in test_delete, is also present in the original version of the test). I use the last svn trunk (r1666), Python 2.4.3 on Windows with sqlite. Anyone can help? Here is the modified association unittest module: Regards, Raúl García.
import testbase from sqlalchemy import * class AssociationTest(testbase.PersistTest): def setUpAll(self): global items, item_keywords, keywords, metadata, Item, Keyword, KeywordAssociation metadata = BoundMetaData(testbase.db) items = Table('items', metadata, Column('item_id', Integer, primary_key=True), Column('name', String(40)), ) item_keywords = Table('item_keywords', metadata, Column('item_id', Integer, ForeignKey('items.item_id')), Column('keyword_id', Integer, ForeignKey('keywords.keyword_id')), Column('data', String(40)) ) keywords = Table('keywords', metadata, Column('keyword_id', Integer, primary_key=True), Column('name', String(40)) ) metadata.create_all() class Item(object): def __init__(self, name): self.name = name def __repr__(self): return "Item id=%d name=%s keywordassoc=%s" % (self.item_id, self.name, repr(self.keywords)) class Keyword(object): def __init__(self, name): self.name = name def __repr__(self): return "Keyword id=%d name=%s" % (self.keyword_id, self.name) class KeywordAssociation(object): def __init__(self, keyword, data): self.keyword = keyword self.data = data def __repr__(self): return "KeywordAssociation itemid=%d keyword=%s data=%s" % (self.item_id, repr(self.keyword), self.data) mapper(Keyword, keywords) mapper(KeywordAssociation, item_keywords, properties={ 'keyword':relation(Keyword, lazy=False) }, primary_key=[item_keywords.c.item_id, item_keywords.c.keyword_id], order_by=[item_keywords.c.data]) mapper(Item, items, properties={ 'keywords' : relation(KeywordAssociation, association=Keyword) }) def tearDown(self): for t in metadata.table_iterator(reverse=True): t.delete().execute() def tearDownAll(self): clear_mappers() metadata.drop_all() def testinsert(self): item1 = Item('item1') item2 = Item('item2') item1.keywords.append(KeywordAssociation(Keyword('blue'), 'blue_assoc')) item1.keywords.append(KeywordAssociation(Keyword('red'), 'red_assoc')) item2.keywords.append(KeywordAssociation(Keyword('green'), 'green_assoc')) objectstore.save(item2) objectstore.flush() saved = repr([item1, item2]) objectstore.clear() # l = objectstore.query(Item).select() l = Item.select() loaded = repr(l) print saved print loaded self.assert_(saved == loaded) def testreplace(self): item1 = Item('item1') item1.keywords.append(KeywordAssociation(Keyword('blue'), 'blue_assoc')) item1.keywords.append(KeywordAssociation(Keyword('red'), 'red_assoc')) # sess.save(item1) objectstore.flush() red_keyword = item1.keywords[1].keyword del item1.keywords[1] item1.keywords.append(KeywordAssociation(red_keyword, 'new_red_assoc')) objectstore.flush() saved = repr([item1]) objectstore.clear() # l = objectstore.query(Item).select() l = Item.select() loaded = repr(l) print saved print loaded self.assert_(saved == loaded) def testmodify(self): item1 = Item('item1') item2 = Item('item2') item1.keywords.append(KeywordAssociation(Keyword('blue'), 'blue_assoc')) item1.keywords.append(KeywordAssociation(Keyword('red'), 'red_assoc')) item2.keywords.append(KeywordAssociation(Keyword('green'), 'green_assoc')) # sess.save(item1) # sess.save(item2) objectstore.flush() red_keyword = item1.keywords[1].keyword del item1.keywords[0] del item1.keywords[0] purple_keyword = Keyword('purple') item1.keywords.append(KeywordAssociation(red_keyword, 'new_red_assoc')) item2.keywords.append(KeywordAssociation(purple_keyword, 'purple_item2_assoc')) item1.keywords.append(KeywordAssociation(purple_keyword, 'purple_item1_assoc')) item1.keywords.append(KeywordAssociation(Keyword('yellow'), 'yellow_assoc')) objectstore.flush() saved = repr([item1, item2]) objectstore.clear() l = objectstore.query(Item).select() loaded = repr(l) print saved print loaded self.assert_(saved == loaded) def testdelete(self): item1 = Item('item1') item2 = Item('item2') item1.keywords.append(KeywordAssociation(Keyword('blue'), 'blue_assoc')) item1.keywords.append(KeywordAssociation(Keyword('red'), 'red_assoc')) item2.keywords.append(KeywordAssociation(Keyword('green'), 'green_assoc')) # sess.save(item1) # sess.save(item2) objectstore.flush() self.assert_(item_keywords.count().scalar() == 3) objectstore.delete(item1) objectstore.delete(item2) objectstore.flush() self.assert_(item_keywords.count().scalar() == 0) if __name__ == "__main__": testbase.main()
Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________ Sqlalchemy-users mailing list Sqlalchemy-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users