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
[email protected]
https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users