summaryrefslogtreecommitdiff
path: root/repoze/bfg/registry.py
diff options
context:
space:
mode:
Diffstat (limited to 'repoze/bfg/registry.py')
-rw-r--r--repoze/bfg/registry.py24
1 files changed, 22 insertions, 2 deletions
diff --git a/repoze/bfg/registry.py b/repoze/bfg/registry.py
index e1887bbdd..e02e5124e 100644
--- a/repoze/bfg/registry.py
+++ b/repoze/bfg/registry.py
@@ -6,9 +6,12 @@ from zope.component.interfaces import ComponentLookupError
from zope.component.interfaces import IComponentLookup
from zope.component.registry import Components
from zope.component import getSiteManager as original_getSiteManager
-
from zope.configuration import xmlconfig
+from zope.interface import implements
+
+from repoze.bfg.interfaces import ISettings
+
class ThreadLocalRegistryManager(threading.local):
registry = getGlobalSiteManager()
def set(self, registry):
@@ -28,7 +31,7 @@ def setRegistryManager(manager): # for unit tests
registry_manager = manager
return old_registry_manager
-def makeRegistry(filename, package, lock=threading.Lock()):
+def makeRegistry(filename, package, options=None, lock=threading.Lock()):
# This is absurd and probably not worth it. We want to try to
# push our ZCML-defined configuration into an app-local component
# registry in order to allow more than one bfg app to live in the
@@ -50,12 +53,21 @@ def makeRegistry(filename, package, lock=threading.Lock()):
original_getSiteManager.sethook(getSiteManager)
zope.component.getGlobalSiteManager = registry_manager.get
xmlconfig.file(filename, package=package)
+ if options is None:
+ options = {}
+ settings = Settings(options)
+ registry.registerUtility(settings, ISettings)
return registry
finally:
zope.component.getGlobalSiteManager = getGlobalSiteManager
lock.release()
registry_manager.clear()
+class Settings(object):
+ implements(ISettings)
+ def __init__(self, options):
+ self.reload_templates = options.get('reload_templates', False)
+
def getSiteManager(context=None):
if context is None:
return registry_manager.get()
@@ -65,6 +77,14 @@ def getSiteManager(context=None):
except TypeError, error:
raise ComponentLookupError(*error.args)
+def asbool(s):
+ s = str(s).strip()
+ return s.lower() in ('t', 'true', 'y', 'yes', 'on', '1')
+
+def get_options(kw):
+ reload_templates = asbool(kw.get('reload_templates'))
+ return {'reload_templates':reload_templates}
+
from zope.testing.cleanup import addCleanUp
try:
addCleanUp(original_getSiteManager.reset)