summaryrefslogtreecommitdiff
path: root/repoze/bfg/threadlocal.py
blob: 613ea4b65d2ab78b81d64e051b89181ec682286c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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)