summaryrefslogtreecommitdiff
path: root/repoze/bfg/template.py
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2008-08-17 17:32:54 +0000
committerChris McDonough <chrism@agendaless.com>2008-08-17 17:32:54 +0000
commit0e21c22166f5160a2a64fad714d69d81897ef7d3 (patch)
tree6a576d0edfafe0e204a1770c094f13ff8aa74487 /repoze/bfg/template.py
parent157721dda97f5aea95f40e307d9d5dceb1014f83 (diff)
downloadpyramid-0e21c22166f5160a2a64fad714d69d81897ef7d3.tar.gz
pyramid-0e21c22166f5160a2a64fad714d69d81897ef7d3.tar.bz2
pyramid-0e21c22166f5160a2a64fad714d69d81897ef7d3.zip
- Add ``<bfg:settings>`` directive. This directive currently allows
only one attribute: ``reload_templates``. If e.g.:: <bfg:settings reload_templates="true"/> is in your application's ZCML, you will not need to restart the appserver in order for ``z3c.pt`` or XSLT template changes to be detected and displayed.
Diffstat (limited to 'repoze/bfg/template.py')
-rw-r--r--repoze/bfg/template.py33
1 files changed, 21 insertions, 12 deletions
diff --git a/repoze/bfg/template.py b/repoze/bfg/template.py
index 3c60dd19e..de049f5fa 100644
--- a/repoze/bfg/template.py
+++ b/repoze/bfg/template.py
@@ -13,14 +13,19 @@ from zope.interface import implements
from repoze.bfg.interfaces import ITemplateFactory
from repoze.bfg.interfaces import ITemplate
from repoze.bfg.interfaces import INodeTemplate
+from repoze.bfg.interfaces import ISettings
class Z3CPTTemplateFactory(object):
classProvides(ITemplateFactory)
implements(ITemplate)
- def __init__(self, path):
+ def __init__(self, path, auto_reload=False):
from z3c.pt import PageTemplateFile
- self.template = PageTemplateFile(path)
+ try:
+ self.template = PageTemplateFile(path, auto_reload=auto_reload)
+ except TypeError:
+ # z3c.pt before 1.0
+ self.template = PageTemplateFile(path)
def __call__(self, **kw):
result = self.template.render(**kw)
@@ -30,11 +35,12 @@ class XSLTemplateFactory(object):
classProvides(ITemplateFactory)
implements(INodeTemplate)
- def __init__(self, path):
+ def __init__(self, path, auto_reload=False):
self.path = path
+ self.auto_reload = auto_reload
def __call__(self, node, **kw):
- processor = get_processor(self.path)
+ processor = get_processor(self.path, self.auto_reload)
result = str(processor(node, **kw))
return result
@@ -42,13 +48,14 @@ class XSLTemplateFactory(object):
import threading
from lxml import etree
xslt_pool = threading.local()
-def get_processor(xslt_fn):
- try:
- return xslt_pool.processors[xslt_fn]
- except AttributeError:
- xslt_pool.processors = {}
- except KeyError:
- pass
+def get_processor(xslt_fn, auto_reload=False):
+ if not auto_reload:
+ try:
+ return xslt_pool.processors[xslt_fn]
+ except AttributeError:
+ xslt_pool.processors = {}
+ except KeyError:
+ pass
# Make a processor and add it to the pool
source = etree.ElementTree(file=xslt_fn)
@@ -74,7 +81,9 @@ def _get_template(path, **kw):
if template is None:
if not os.path.exists(path):
raise ValueError('Missing template file: %s' % path)
- template = Z3CPTTemplateFactory(path)
+ settings = queryUtility(ISettings)
+ auto_reload = settings and settings.reload_templates
+ template = Z3CPTTemplateFactory(path, auto_reload)
registerTemplate(ITemplate, template, path)
return template