From d809ac74d19342bcc84e4fe043697709b2001cc0 Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Tue, 30 Jun 2009 21:02:00 +0000 Subject: - 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. --- repoze/bfg/templating.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'repoze/bfg/templating.py') 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 -- cgit v1.2.3