From a1a9fb7128c935848b17c0ce6586991098a17f07 Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Wed, 27 May 2009 04:52:51 +0000 Subject: Merge authchanges branch to trunk. --- repoze/bfg/threadlocal.py | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 repoze/bfg/threadlocal.py (limited to 'repoze/bfg/threadlocal.py') 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 -- cgit v1.2.3