else:
if self.primaryjoin is None:
self.primaryjoin = sql.join(parent.table, self.target).onclause
-
# if the foreign key wasnt specified and theres no assocaition table, try to figure
# out who is dependent on who. we dont need all the foreign keys represented in the join,
# just one of them.
elif self.direction == PropertyLoader.MANYTOONE:
self.syncrules.append(SyncRule(self.mapper, tt, pt, dest_mapper=self.parent))
else:
- raise AssertionError("assert failed")
+ if visiting is self.primaryjoin:
+ self.syncrules.append(SyncRule(self.parent, pt, st, direction=PropertyLoader.ONETOMANY))
+ else:
+ self.syncrules.append(SyncRule(self.mapper, tt, st, direction=PropertyLoader.MANYTOONE))
elif pt and st:
self.syncrules.append(SyncRule(self.parent, pt, st, direction=PropertyLoader.ONETOMANY))
elif tt and st:
self.syncrules = []
processor = BinaryVisitor(compile)
+ visiting = self.primaryjoin
self.primaryjoin.accept_visitor(processor)
if self.secondaryjoin is not None:
+ visiting = self.secondaryjoin
self.secondaryjoin.accept_visitor(processor)
if len(self.syncrules) == 0:
raise ArgumentError("No syncrules generated for join criterion " + str(self.primaryjoin))
self.direction = direction
self.dest_mapper = dest_mapper
self.dest_column = dest_column
+ #print "SyncRule", source_mapper, source_column, dest_column, dest_mapper, direction
def execute(self, source, dest, obj, child, clearkeys):
if self.direction is not None:
au = AddressUser.mapper.get_by(user_name='jack')
self.assert_(au.email_address == 'jack@gmail.com')
+ def testinherits2(self):
+ class _Order(object):
+ pass
+ class _Address(object):
+ pass
+ class AddressUser(_Address):
+ pass
+ assign_mapper(_Order, orders)
+ assign_mapper(_Address, addresses)
+ assign_mapper(AddressUser, users, inherits = _Address.mapper,
+ properties = {
+ 'orders' : relation(_Order.mapper, lazy=False)
+ })
+ l = AddressUser.mapper.select()
+ jack = l[0]
+ self.assert_(jack.user_name=='jack')
+ jack.email_address = 'jack@gmail.com'
+ objectstore.commit()
+ objectstore.clear()
+ au = AddressUser.mapper.get_by(user_name='jack')
+ self.assert_(au.email_address == 'jack@gmail.com')
+
+
class DeferredTest(MapperSuperTest):
def testbasic(self):