From 1750e5ad75d70ebb5b7b25bb4a0757816edc703d Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sun, 26 Feb 2006 06:17:21 +0000 Subject: [PATCH] added test to illustrate wacky inhertitance/many-to-many thing --- test/inheritance.py | 61 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/test/inheritance.py b/test/inheritance.py index f972306cf0..f054bc5574 100644 --- a/test/inheritance.py +++ b/test/inheritance.py @@ -89,5 +89,66 @@ class InheritTest(testbase.AssertMixin): objectstore.commit() +class InheritTest2(testbase.AssertMixin): + def setUpAll(self): + engine = testbase.db + global foo, bar, foo_bar + foo = Table('foo', engine, + Column('id', Integer, primary_key=True), + Column('data', String(20)), + ).create() + + bar = Table('bar', engine, + Column('bid', Integer, ForeignKey('foo.id'), primary_key=True), + #Column('fid', Integer, ForeignKey('foo.id'), ) + ).create() + + foo_bar = Table('foo_bar', engine, + Column('foo_id', Integer, ForeignKey('foo.id')), + Column('bar_id', Integer, ForeignKey('bar.bid'))).create() + + def tearDownAll(self): + foo_bar.drop() + bar.drop() + foo.drop() + + def testbasic(self): + class Foo(object): + def __init__(self, data=None): + self.data = data + def __str__(self): + return "Foo(%s)" % self.data + def __repr__(self): + return str(self) + + Foo.mapper = mapper(Foo, foo) + class Bar(Foo): + def __str__(self): + return "Bar(%s)" % self.data + + Bar.mapper = mapper(Bar, bar, inherits=Foo.mapper, properties = { + # TODO: use syncrules for this + 'id':[bar.c.bid, foo.c.id] + }) + + Bar.mapper.add_property('foos', relation(Foo.mapper, foo_bar, primaryjoin=bar.c.bid==foo_bar.c.bar_id, secondaryjoin=foo_bar.c.foo_id==foo.c.id, lazy=False)) + #Bar.mapper.add_property('foos', relation(Foo.mapper, foo_bar, lazy=False)) + + + b = Bar('barfoo') + objectstore.commit() + + + b.foos.append(Foo('subfoo1')) + b.foos.append(Foo('subfoo2')) + + objectstore.commit() + objectstore.clear() + + l =b.mapper.select() + print l[0] + print l[0].foos + + if __name__ == "__main__": testbase.main() -- 2.47.2