diff options
-rw-r--r-- | lib/sqlalchemy/orm/sessionmaker.py | 13 | ||||
-rw-r--r-- | test/orm/unitofwork.py | 4 |
2 files changed, 15 insertions, 2 deletions
diff --git a/lib/sqlalchemy/orm/sessionmaker.py b/lib/sqlalchemy/orm/sessionmaker.py index 42064c5b8..adf80f9a7 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 a3e025586..a3ee0654e 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 |