diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-02-12 21:27:20 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-02-12 21:27:20 +0000 |
commit | 4e3ca32ff8085c23c6049a103084d621ecd5c65c (patch) | |
tree | 1adbf35115ad4dc428e7c199c4a48331d936efca /lib/sqlalchemy/util.py | |
parent | 388cb2db38ed237a2868d2af55ad16e2c05094cd (diff) | |
download | sqlalchemy-4e3ca32ff8085c23c6049a103084d621ecd5c65c.tar.gz |
more refactoring to session/UOW scope management...under construction !
Diffstat (limited to 'lib/sqlalchemy/util.py')
-rw-r--r-- | lib/sqlalchemy/util.py | 44 |
1 files changed, 17 insertions, 27 deletions
diff --git a/lib/sqlalchemy/util.py b/lib/sqlalchemy/util.py index 21866d390..217210646 100644 --- a/lib/sqlalchemy/util.py +++ b/lib/sqlalchemy/util.py @@ -367,45 +367,35 @@ class HistoryArraySet(UserList.UserList): class ScopedRegistry(object): """a Registry that can store one or multiple instances of a single class - on a per-application or per-thread scoped basis + on a per-thread scoped basis, or on a customized scope createfunc - a callable that returns a new object to be placed in the registry - defaultscope - the default scope to be used ('application', 'thread', or 'session') + scopefunc - a callable that will return a key to store/retrieve an object, + defaults to thread.get_ident for thread-local objects. use a value like + lambda: True for application scope. """ - def __init__(self, createfunc, defaultscope): + def __init__(self, createfunc, scopefunc=None): self.createfunc = createfunc - self.defaultscope = defaultscope - self.scopes = { - "application": lambda:None, - "thread": thread.get_ident, - } + if scopefunc is None: + scopefunc = thread.get_ident + else: + self.scopefunc = scopefunc self.registry = {} - - def add_scope(self, scope, keyfunc, default=True): - self.scopes[scope] = keyfunc - if default: - self.defaultscope = scope - - def __call__(self, scope=None): - key = self._get_key(scope) + def __call__(self): + key = self._get_key() try: return self.registry[key] except KeyError: return self.registry.setdefault(key, self.createfunc()) - - def set(self, obj, scope=None): - self.registry[self._get_key(scope)] = obj - - def clear(self, scope=None): + def set(self, obj): + self.registry[self._get_key()] = obj + def clear(self): try: - del self.registry[self._get_key(scope)] + del self.registry[self._get_key()] except KeyError: pass - - def _get_key(self, scope, *args, **kwargs): - if scope is None: - scope = self.defaultscope - return (scope, self.scopes[scope]()) + def _get_key(self): + return self.scopefunc() def constructor_args(instance, **kwargs): |