event.listen(manager, 'init', _event_on_init, raw=True)
for key, method in util.iterate_attributes(self.class_):
+ if key == '__init__' and hasattr(method, '_sa_original_init'):
+ method = method._sa_original_init
+ if isinstance(method, types.MethodType):
+ method = method.im_func
if isinstance(method, types.FunctionType):
if hasattr(method, '__sa_reconstructor__'):
self._reconstructor = method
sess.query(C).first()
eq_(recon, ['A', 'B', 'C'])
+ def test_reconstructor_init(self):
+
+ users = self.tables.users
+
+ recon = []
+
+ class User(object):
+
+ @reconstructor
+ def __init__(self):
+ recon.append('go')
+
+ mapper(User, users)
+
+ User()
+ eq_(recon, ['go'])
+
+ recon[:] = []
+ create_session().query(User).first()
+ eq_(recon, ['go'])
+
+ def test_reconstructor_init_inheritance(self):
+ users = self.tables.users
+
+ recon = []
+
+ class A(object):
+
+ @reconstructor
+ def __init__(self):
+ assert isinstance(self, A)
+ recon.append('A')
+
+ class B(A):
+
+ @reconstructor
+ def __init__(self):
+ assert isinstance(self, B)
+ recon.append('B')
+
+ class C(A):
+
+ @reconstructor
+ def __init__(self):
+ assert isinstance(self, C)
+ recon.append('C')
+
+ mapper(A, users, polymorphic_on=users.c.name,
+ polymorphic_identity='jack')
+ mapper(B, inherits=A, polymorphic_identity='ed')
+ mapper(C, inherits=A, polymorphic_identity='chuck')
+
+ A()
+ B()
+ C()
+ eq_(recon, ['A', 'B', 'C'])
+
+ recon[:] = []
+ sess = create_session()
+ sess.query(A).first()
+ sess.query(B).first()
+ sess.query(C).first()
+ eq_(recon, ['A', 'B', 'C'])
+
+
def test_unmapped_reconstructor_inheritance(self):
users = self.tables.users
mapper(B, users)
-
class DocumentTest(fixtures.TestBase):
def test_doc_propagate(self):