diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-07-27 04:08:53 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-07-27 04:08:53 +0000 |
commit | ed4fc64bb0ac61c27bc4af32962fb129e74a36bf (patch) | |
tree | c1cf2fb7b1cafced82a8898e23d2a0bf5ced8526 /test/orm/inheritance2.py | |
parent | 3a8e235af64e36b3b711df1f069d32359fe6c967 (diff) | |
download | sqlalchemy-ed4fc64bb0ac61c27bc4af32962fb129e74a36bf.tar.gz |
merging 0.4 branch to trunk. see CHANGES for details. 0.3 moves to maintenance branch in branches/rel_0_3.
Diffstat (limited to 'test/orm/inheritance2.py')
-rw-r--r-- | test/orm/inheritance2.py | 315 |
1 files changed, 0 insertions, 315 deletions
diff --git a/test/orm/inheritance2.py b/test/orm/inheritance2.py deleted file mode 100644 index 906526456..000000000 --- a/test/orm/inheritance2.py +++ /dev/null @@ -1,315 +0,0 @@ -import testbase -from sqlalchemy import * -from datetime import datetime - -class InheritTest(testbase.ORMTest): - """tests some various inheritance round trips involving a particular set of polymorphic inheritance relationships""" - def define_tables(self, metadata): - global products_table, specification_table, documents_table - global Product, Detail, Assembly, SpecLine, Document, RasterDocument - - products_table = Table('products', metadata, - Column('product_id', Integer, primary_key=True), - Column('product_type', String(128)), - Column('name', String(128)), - Column('mark', String(128)), - ) - - specification_table = Table('specification', metadata, - Column('spec_line_id', Integer, primary_key=True), - Column('master_id', Integer, ForeignKey("products.product_id"), - nullable=True), - Column('slave_id', Integer, ForeignKey("products.product_id"), - nullable=True), - Column('quantity', Float, default=1.), - ) - - documents_table = Table('documents', metadata, - Column('document_id', Integer, primary_key=True), - Column('document_type', String(128)), - Column('product_id', Integer, ForeignKey('products.product_id')), - Column('create_date', DateTime, default=lambda:datetime.now()), - Column('last_updated', DateTime, default=lambda:datetime.now(), - onupdate=lambda:datetime.now()), - Column('name', String(128)), - Column('data', Binary), - Column('size', Integer, default=0), - ) - - class Product(object): - def __init__(self, name, mark=''): - self.name = name - self.mark = mark - def __repr__(self): - return '<%s %s>' % (self.__class__.__name__, self.name) - - class Detail(Product): - def __init__(self, name): - self.name = name - - class Assembly(Product): - def __repr__(self): - return Product.__repr__(self) + " " + " ".join([x + "=" + repr(getattr(self, x, None)) for x in ['specification', 'documents']]) - - class SpecLine(object): - def __init__(self, master=None, slave=None, quantity=1): - self.master = master - self.slave = slave - self.quantity = quantity - - def __repr__(self): - return '<%s %.01f %s>' % ( - self.__class__.__name__, - self.quantity or 0., - repr(self.slave) - ) - - class Document(object): - def __init__(self, name, data=None): - self.name = name - self.data = data - def __repr__(self): - return '<%s %s>' % (self.__class__.__name__, self.name) - - class RasterDocument(Document): - pass - - def testone(self): - product_mapper = mapper(Product, products_table, - polymorphic_on=products_table.c.product_type, - polymorphic_identity='product') - - detail_mapper = mapper(Detail, inherits=product_mapper, - polymorphic_identity='detail') - - assembly_mapper = mapper(Assembly, inherits=product_mapper, - polymorphic_identity='assembly') - - specification_mapper = mapper(SpecLine, specification_table, - properties=dict( - master=relation(Assembly, - foreignkey=specification_table.c.master_id, - primaryjoin=specification_table.c.master_id==products_table.c.product_id, - lazy=True, backref=backref('specification', primaryjoin=specification_table.c.master_id==products_table.c.product_id), - uselist=False), - slave=relation(Product, - foreignkey=specification_table.c.slave_id, - primaryjoin=specification_table.c.slave_id==products_table.c.product_id, - lazy=True, uselist=False), - quantity=specification_table.c.quantity, - ) - ) - - session = create_session( ) - - a1 = Assembly(name='a1') - - p1 = Product(name='p1') - a1.specification.append(SpecLine(slave=p1)) - - d1 = Detail(name='d1') - a1.specification.append(SpecLine(slave=d1)) - - session.save(a1) - orig = repr(a1) - session.flush() - session.clear() - - a1 = session.query(Product).get_by(name='a1') - new = repr(a1) - print orig - print new - assert orig == new == '<Assembly a1> specification=[<SpecLine 1.0 <Product p1>>, <SpecLine 1.0 <Detail d1>>] documents=None' - - def testtwo(self): - product_mapper = mapper(Product, products_table, - polymorphic_on=products_table.c.product_type, - polymorphic_identity='product') - - detail_mapper = mapper(Detail, inherits=product_mapper, - polymorphic_identity='detail') - - specification_mapper = mapper(SpecLine, specification_table, - properties=dict( - slave=relation(Product, - foreignkey=specification_table.c.slave_id, - primaryjoin=specification_table.c.slave_id==products_table.c.product_id, - lazy=True, uselist=False), - ) - ) - - session = create_session( ) - - s = SpecLine(slave=Product(name='p1')) - s2 = SpecLine(slave=Detail(name='d1')) - session.save(s) - session.save(s2) - orig = repr([s, s2]) - session.flush() - session.clear() - new = repr(session.query(SpecLine).select()) - print orig - print new - assert orig == new == '[<SpecLine 1.0 <Product p1>>, <SpecLine 1.0 <Detail d1>>]' - - def testthree(self): - product_mapper = mapper(Product, products_table, - polymorphic_on=products_table.c.product_type, - polymorphic_identity='product') - detail_mapper = mapper(Detail, inherits=product_mapper, - polymorphic_identity='detail') - assembly_mapper = mapper(Assembly, inherits=product_mapper, - polymorphic_identity='assembly') - - specification_mapper = mapper(SpecLine, specification_table, - properties=dict( - master=relation(Assembly, lazy=False, uselist=False, - foreignkey=specification_table.c.master_id, - primaryjoin=specification_table.c.master_id==products_table.c.product_id, - backref=backref('specification', primaryjoin=specification_table.c.master_id==products_table.c.product_id, cascade="all, delete-orphan"), - ), - slave=relation(Product, lazy=False, uselist=False, - foreignkey=specification_table.c.slave_id, - primaryjoin=specification_table.c.slave_id==products_table.c.product_id, - ), - quantity=specification_table.c.quantity, - ) - ) - - document_mapper = mapper(Document, documents_table, - polymorphic_on=documents_table.c.document_type, - polymorphic_identity='document', - properties=dict( - name=documents_table.c.name, - data=deferred(documents_table.c.data), - product=relation(Product, lazy=True, backref=backref('documents', cascade="all, delete-orphan")), - ), - ) - raster_document_mapper = mapper(RasterDocument, inherits=document_mapper, - polymorphic_identity='raster_document') - - session = create_session() - - a1 = Assembly(name='a1') - a1.specification.append(SpecLine(slave=Detail(name='d1'))) - a1.documents.append(Document('doc1')) - a1.documents.append(RasterDocument('doc2')) - session.save(a1) - orig = repr(a1) - session.flush() - session.clear() - - a1 = session.query(Product).get_by(name='a1') - new = repr(a1) - print orig - print new - assert orig == new == '<Assembly a1> specification=[<SpecLine 1.0 <Detail d1>>] documents=[<Document doc1>, <RasterDocument doc2>]' - - def testfour(self): - """this tests the RasterDocument being attached to the Assembly, but *not* the Document. this means only - a "sub-class" task, i.e. corresponding to an inheriting mapper but not the base mapper, is created. """ - product_mapper = mapper(Product, products_table, - polymorphic_on=products_table.c.product_type, - polymorphic_identity='product') - detail_mapper = mapper(Detail, inherits=product_mapper, - polymorphic_identity='detail') - assembly_mapper = mapper(Assembly, inherits=product_mapper, - polymorphic_identity='assembly') - - document_mapper = mapper(Document, documents_table, - polymorphic_on=documents_table.c.document_type, - polymorphic_identity='document', - properties=dict( - name=documents_table.c.name, - data=deferred(documents_table.c.data), - product=relation(Product, lazy=True, backref=backref('documents', cascade="all, delete-orphan")), - ), - ) - raster_document_mapper = mapper(RasterDocument, inherits=document_mapper, - polymorphic_identity='raster_document') - - session = create_session( ) - - a1 = Assembly(name='a1') - a1.documents.append(RasterDocument('doc2')) - session.save(a1) - orig = repr(a1) - session.flush() - session.clear() - - a1 = session.query(Product).get_by(name='a1') - new = repr(a1) - print orig - print new - assert orig == new == '<Assembly a1> specification=None documents=[<RasterDocument doc2>]' - - del a1.documents[0] - session.save(a1) - session.flush() - session.clear() - - a1 = session.query(Product).get_by(name='a1') - assert len(session.query(Document).select()) == 0 - - def testfive(self): - """tests the late compilation of mappers""" - - specification_mapper = mapper(SpecLine, specification_table, - properties=dict( - master=relation(Assembly, lazy=False, uselist=False, - foreignkey=specification_table.c.master_id, - primaryjoin=specification_table.c.master_id==products_table.c.product_id, - backref=backref('specification', primaryjoin=specification_table.c.master_id==products_table.c.product_id), - ), - slave=relation(Product, lazy=False, uselist=False, - foreignkey=specification_table.c.slave_id, - primaryjoin=specification_table.c.slave_id==products_table.c.product_id, - ), - quantity=specification_table.c.quantity, - ) - ) - - detail_mapper = mapper(Detail, inherits=Product, - polymorphic_identity='detail') - - raster_document_mapper = mapper(RasterDocument, inherits=Document, - polymorphic_identity='raster_document') - - product_mapper = mapper(Product, products_table, - polymorphic_on=products_table.c.product_type, - polymorphic_identity='product', properties={ - 'documents' : relation(Document, lazy=True, - backref='product', cascade='all, delete-orphan'), - }) - - assembly_mapper = mapper(Assembly, inherits=Product, - polymorphic_identity='assembly') - - document_mapper = mapper(Document, documents_table, - polymorphic_on=documents_table.c.document_type, - polymorphic_identity='document', - properties=dict( - name=documents_table.c.name, - data=deferred(documents_table.c.data), - ), - ) - - session = create_session() - - a1 = Assembly(name='a1') - a1.specification.append(SpecLine(slave=Detail(name='d1'))) - a1.documents.append(Document('doc1')) - a1.documents.append(RasterDocument('doc2')) - session.save(a1) - orig = repr(a1) - session.flush() - session.clear() - - a1 = session.query(Product).get_by(name='a1') - new = repr(a1) - print orig - print new - assert orig == new == '<Assembly a1> specification=[<SpecLine 1.0 <Detail d1>>] documents=[<Document doc1>, <RasterDocument doc2>]' - -if __name__ == "__main__": - testbase.main() |