summaryrefslogtreecommitdiff
path: root/repoze/bfg/threadlocal.py
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-05-27 04:52:51 +0000
committerChris McDonough <chrism@agendaless.com>2009-05-27 04:52:51 +0000
commita1a9fb7128c935848b17c0ce6586991098a17f07 (patch)
tree5160f28be92202033c693caa335f8b9cda3c6379 /repoze/bfg/threadlocal.py
parent08ead74d05e25f58c83712f6f8651484ddc983d0 (diff)
downloadpyramid-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.py39
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