summaryrefslogtreecommitdiff
path: root/repoze/bfg/templating.py
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-06-30 21:02:00 +0000
committerChris McDonough <chrism@agendaless.com>2009-06-30 21:02:00 +0000
commitd809ac74d19342bcc84e4fe043697709b2001cc0 (patch)
tree9973b531b90336bf6ecf3811aa3b9ba753f4e6d8 /repoze/bfg/templating.py
parentf9e73ea5a9d5a4210e3a346aa2f9483d70d22ab9 (diff)
downloadpyramid-d809ac74d19342bcc84e4fe043697709b2001cc0.tar.gz
pyramid-d809ac74d19342bcc84e4fe043697709b2001cc0.tar.bz2
pyramid-d809ac74d19342bcc84e4fe043697709b2001cc0.zip
- Add a ``reload_resources`` configuration file setting (aka the
``BFG_RELOAD_RESOURCES`` environment variable). When this is set to true, the server never needs to be restarted when moving files between directory resource overrides (esp. for templates currently). - Add a ``reload_all`` configuration file setting (aka the ``BFG_RELOAD_ALL`` environment variable) that implies both ``reload_resources`` and ``reload_templates``. - The ``static`` helper view class now uses a ``PackageURLParser`` in order to allow for the overriding of static resources (CSS / logo files, etc) using the ``resource`` ZCML directive. The ``PackageURLParser`` class was added to a (new) ``static`` module in BFG; it is a subclass of the ``StaticURLParser`` class in ``paste.urlparser``. - The ``repoze.bfg.templating.renderer_from_cache`` function now checks for the ``reload_resources`` setting; if it's true, it does not register a template renderer (it won't use the registry as a template renderer cache). - Add ``pkg_resources`` to the glossary. - Update the "Environment" docs to note the existence of ``reload_resources`` and ``reload_all``. - Use a colon instead of a tab as the separator between package name and relpath to form the "spec" when register a ITemplateRenderer.
Diffstat (limited to 'repoze/bfg/templating.py')
-rw-r--r--repoze/bfg/templating.py19
1 files changed, 13 insertions, 6 deletions
diff --git a/repoze/bfg/templating.py b/repoze/bfg/templating.py
index a81726bb9..3287f0808 100644
--- a/repoze/bfg/templating.py
+++ b/repoze/bfg/templating.py
@@ -1,9 +1,12 @@
+import os
import pkg_resources
+
from zope.component import queryUtility
-from repoze.bfg.interfaces import ITemplateRenderer
from zope.component import getSiteManager
+
+from repoze.bfg.interfaces import ITemplateRenderer
from repoze.bfg.path import caller_package
-import os
+from repoze.bfg.settings import get_settings
def renderer_from_cache(path, factory, level=3, **kw):
if os.path.isabs(path):
@@ -21,7 +24,7 @@ def renderer_from_cache(path, factory, level=3, **kw):
# 'path' is a relative filename
package = caller_package(level=level)
spec = (package.__name__, path)
- utility_name = '%s\t%s' % spec # utility name must be a string :-(
+ utility_name = '%s:%s' % spec # utility name must be a string
renderer = queryUtility(ITemplateRenderer, name=utility_name)
if renderer is None:
# service unit tests here by trying the relative path
@@ -29,11 +32,15 @@ def renderer_from_cache(path, factory, level=3, **kw):
renderer = queryUtility(ITemplateRenderer, name=path)
if renderer is None:
if not pkg_resources.resource_exists(*spec):
- raise ValueError('Missing template resource: %s:%s' % spec)
+ raise ValueError('Missing template resource: %s' % utility_name)
abspath = pkg_resources.resource_filename(*spec)
renderer = factory(abspath, **kw)
- sm = getSiteManager()
- sm.registerUtility(renderer, ITemplateRenderer, name=utility_name)
+ settings = get_settings()
+ if (not settings) or (not settings.get('reload_resources')):
+ # cache the template
+ sm = getSiteManager()
+ sm.registerUtility(renderer, ITemplateRenderer,
+ name=utility_name)
return renderer