diff options
| author | Chris McDonough <chrism@agendaless.com> | 2009-01-12 00:30:12 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2009-01-12 00:30:12 +0000 |
| commit | ec2941b96a8f961438f9a341c936dfa660439a95 (patch) | |
| tree | 648aa834b6c661a93a0947f6968024e89fd1c9fd /repoze/bfg/registry.py | |
| parent | 74f67dcdc4c672b3e85d674c5eaebb8d435564a3 (diff) | |
| download | pyramid-ec2941b96a8f961438f9a341c936dfa660439a95.tar.gz pyramid-ec2941b96a8f961438f9a341c936dfa660439a95.tar.bz2 pyramid-ec2941b96a8f961438f9a341c936dfa660439a95.zip | |
- Make the (internal) thread local registry manager maintain a stack
of registries in order to make it possible to call one BFG
application from inside another.
Diffstat (limited to 'repoze/bfg/registry.py')
| -rw-r--r-- | repoze/bfg/registry.py | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/repoze/bfg/registry.py b/repoze/bfg/registry.py index f2f47a889..179fbd3dd 100644 --- a/repoze/bfg/registry.py +++ b/repoze/bfg/registry.py @@ -25,15 +25,26 @@ deprecated( ) class ThreadLocalRegistryManager(threading.local): - registry = getGlobalSiteManager() - def set(self, registry): - self.registry = registry + def __init__(self): + self.stack = [] + + def push(self, registry): + self.stack.append(registry) + + set = push # backwards compatibility + + def pop(self): + if self.stack: + return self.stack.pop() def get(self): - return self.registry + try: + return self.stack[-1] + except IndexError: + return getGlobalSiteManager() def clear(self): - self.registry = getGlobalSiteManager() + self.stack[:] = [] registry_manager = ThreadLocalRegistryManager() @@ -62,7 +73,7 @@ def makeRegistry(filename, package, lock=threading.Lock()): lock.acquire() try: registry = Components(package.__name__) - registry_manager.set(registry) + registry_manager.push(registry) original_getSiteManager.sethook(getSiteManager) zope.component.getGlobalSiteManager = registry_manager.get zcml_configure(filename, package=package) @@ -70,7 +81,7 @@ def makeRegistry(filename, package, lock=threading.Lock()): finally: zope.component.getGlobalSiteManager = getGlobalSiteManager lock.release() - registry_manager.clear() + registry_manager.pop() def getSiteManager(context=None): if context is None: |
