- used a metaclass trick to get Session.bind / Session.<someprop> to work

This commit is contained in:
Mike Bayer
2007-08-02 01:18:42 +00:00
parent 23140c926b
commit 11b294d1d2
2 changed files with 15 additions and 2 deletions
+13
View File
@@ -65,7 +65,20 @@ def sessionmaker(autoflush, transactional, bind=None, scope=None, enhance_classe
global_extensions.append(SessionContextExt())
default_scope=scope
class ScopedProps(type):
pass
def makeprop(name):
def set(self, attr):
setattr(registry(), name, attr)
def get(self):
return getattr(registry(), name)
return property(get, set)
for prop in ('bind', 'dirty', 'identity_map'):
setattr(ScopedProps, prop, makeprop(prop))
class ScopedSess(Sess):
__metaclass__ = ScopedProps
def __new__(cls, **kwargs):
if len(kwargs):
scope = kwargs.pop('scope', default_scope)
+2 -2
View File
@@ -750,7 +750,7 @@ class OneToManyTest(UnitOfWorkTest):
Session.commit()
Session.delete(u)
Session.commit()
self.assert_(a.address_id is not None and a.user_id is None and not Session().identity_map.has_key(u._instance_key) and Session().identity_map.has_key(a._instance_key))
self.assert_(a.address_id is not None and a.user_id is None and not Session.identity_map.has_key(u._instance_key) and Session.identity_map.has_key(a._instance_key))
def testonetoone(self):
m = mapper(User, users, properties = dict(
@@ -867,7 +867,7 @@ class SaveTest(UnitOfWorkTest):
# change first users name and save
Session.update(u)
u.user_name = 'modifiedname'
assert u in Session().dirty
assert u in Session.dirty
Session.commit()
# select both