diff options
| author | Chris McDonough <chrism@agendaless.com> | 2009-05-27 04:52:51 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2009-05-27 04:52:51 +0000 |
| commit | a1a9fb7128c935848b17c0ce6586991098a17f07 (patch) | |
| tree | 5160f28be92202033c693caa335f8b9cda3c6379 /repoze/bfg/threadlocal.py | |
| parent | 08ead74d05e25f58c83712f6f8651484ddc983d0 (diff) | |
| download | pyramid-a1a9fb7128c935848b17c0ce6586991098a17f07.tar.gz pyramid-a1a9fb7128c935848b17c0ce6586991098a17f07.tar.bz2 pyramid-a1a9fb7128c935848b17c0ce6586991098a17f07.zip | |
Merge authchanges branch to trunk.
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 |
