diff options
Diffstat (limited to 'repoze/bfg/threadlocal.py')
| -rw-r--r-- | repoze/bfg/threadlocal.py | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/repoze/bfg/threadlocal.py b/repoze/bfg/threadlocal.py new file mode 100644 index 000000000..7df4f34f4 --- /dev/null +++ b/repoze/bfg/threadlocal.py @@ -0,0 +1,39 @@ +import threading +from zope.component import getGlobalSiteManager + +class ThreadLocalManager(threading.local): + def __init__(self, default): + self.stack = [] + self.default = default + + def push(self, info): + self.stack.append(info) + + set = push # b/c + + def pop(self): + if self.stack: + return self.stack.pop() + + def get(self): + try: + return self.stack[-1] + except IndexError: + return self.default() + + def clear(self): + self.stack[:] = [] + +def defaults(): + defaults = {'request':None} + gsm = getGlobalSiteManager() + defaults['registry'] = gsm + return defaults + +manager = ThreadLocalManager(defaults) + +def setManager(new_manager): # for unit tests + global manager + old_manager = manager + manager = new_manager + return old_manager |
