From: Mike Bayer Date: Thu, 2 Aug 2007 01:18:42 +0000 (+0000) Subject: - used a metaclass trick to get Session.bind / Session. to work X-Git-Tag: rel_0_4beta1~109 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=11b294d1d2114ecf51453697e87f9c7ce8fedc38;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - used a metaclass trick to get Session.bind / Session. to work --- diff --git a/lib/sqlalchemy/orm/sessionmaker.py b/lib/sqlalchemy/orm/sessionmaker.py index 42064c5b80..adf80f9a7b 100644 --- a/lib/sqlalchemy/orm/sessionmaker.py +++ b/lib/sqlalchemy/orm/sessionmaker.py @@ -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) diff --git a/test/orm/unitofwork.py b/test/orm/unitofwork.py index a3e025586c..a3ee0654e5 100644 --- a/test/orm/unitofwork.py +++ b/test/orm/unitofwork.py @@ -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