diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-08-02 01:31:28 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-08-02 01:31:28 +0000 |
commit | 47eba75f35e86f865f7ebb177266fa6e525ac307 (patch) | |
tree | 8fec04c76507763571c48459fcc323ed7c41d773 | |
parent | 11b294d1d2114ecf51453697e87f9c7ce8fedc38 (diff) | |
download | sqlalchemy-47eba75f35e86f865f7ebb177266fa6e525ac307.tar.gz |
replaced metaclass/__new__ insanity with a __call__()
-rw-r--r-- | lib/sqlalchemy/orm/sessionmaker.py | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/lib/sqlalchemy/orm/sessionmaker.py b/lib/sqlalchemy/orm/sessionmaker.py index adf80f9a7..13e28fd1a 100644 --- a/lib/sqlalchemy/orm/sessionmaker.py +++ b/lib/sqlalchemy/orm/sessionmaker.py @@ -66,20 +66,8 @@ def sessionmaker(autoflush, transactional, bind=None, scope=None, enhance_classe 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): + def __call__(self, **kwargs): if len(kwargs): scope = kwargs.pop('scope', default_scope) if scope is not None: @@ -93,14 +81,24 @@ def sessionmaker(autoflush, transactional, bind=None, scope=None, enhance_classe return Sess(**kwargs) else: return registry() + def instrument(name): def do(cls, *args, **kwargs): return getattr(registry(), name)(*args, **kwargs) - return classmethod(do) + return do for meth in ('get', 'close', 'save', 'commit', 'update', 'flush', 'query', 'delete'): setattr(ScopedSess, meth, instrument(meth)) - return ScopedSess + 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(ScopedSess, prop, makeprop(prop)) + + return ScopedSess() elif scope is not None: raise exceptions.ArgumentError("Unknown scope '%s'" % scope) else: |