added None check in PropertyLoader many-to-one private deletion traversal, fixes byroot_tree (add a unit test for that)
# list that might be set on the object already
try:
list_ = obj.__dict__[key]
+ if list_ is data:
+ raise InvalidArgumentError("Creating a list element passing the object's list as an argument")
if data is not None:
for d in data:
list_.append(d)
elif not uselist:
return PropHistory(obj, key, **kwargs)
else:
- list_ = obj.__dict__.get(key, None)
- return self.create_list(obj, key, list_, **kwargs)
+ return self.create_list(obj, key, None, **kwargs)
def register_attribute(self, class_, key, uselist, callable_=None, **kwargs):
"""registers an attribute's behavior at the class level. This attribute
for obj in deplist:
childlist = getlist(obj, False)
for child in childlist.deleted_items() + childlist.unchanged_items():
+ if child is None:
+ continue
uowcommit.register_object(child, isdelete=True)
elif self.post_update:
# post_update means we have to update our row to not reference the child object
for obj in deplist:
childlist = getlist(obj, False)
for child in childlist.deleted_items() + childlist.unchanged_items():
+ if child is None:
+ continue
uowcommit.register_object(child, isdelete=True)
else:
for obj in deplist:
self.assert_(a not in u.addresses)
# not dirty anymore
self.assert_(u not in objectstore.get_session().uow.dirty)
+
+ def testrefresh2(self):
+ assign_mapper(Address, addresses)
+
+ assign_mapper(User, users, properties = dict(addresses=relation(Address.mapper,private=True,lazy=False)) )
+
+ u=User()
+ u.user_name='Justin'
+ a = Address()
+ a.address_id=17 # to work around the hardcoded IDs in this test suite....
+ u.addresses.append(a)
+ objectstore.commit()
+ objectstore.clear()
+ u = User.mapper.selectfirst()
+ print u.user_name
+
+ #ok so far
+ u.expire() #hangs when
+ print u.user_name #this line runs
+
+ u.refresh() #hangs
def testmagic(self):
m = mapper(User, users, properties = {