summaryrefslogtreecommitdiff
path: root/repoze/bfg/templating.py
diff options
context:
space:
mode:
Diffstat (limited to 'repoze/bfg/templating.py')
-rw-r--r--repoze/bfg/templating.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/repoze/bfg/templating.py b/repoze/bfg/templating.py
index 1f242b306..2ec049ca5 100644
--- a/repoze/bfg/templating.py
+++ b/repoze/bfg/templating.py
@@ -4,10 +4,42 @@ import pkg_resources
from zope.component import queryUtility
from zope.component import getSiteManager
+from zope.interface import classProvides
+from zope.interface import implements
+
+from chameleon.core.template import TemplateFile
+from chameleon.zpt.language import Parser
+
+from repoze.bfg.interfaces import ISettings
from repoze.bfg.interfaces import ITemplateRenderer
+from repoze.bfg.interfaces import ITemplateRendererFactory
from repoze.bfg.path import caller_package
from repoze.bfg.settings import get_settings
+class TextTemplateFile(TemplateFile):
+ default_parser = Parser()
+
+ def __init__(self, filename, parser=None, format=None, doctype=None,
+ **kwargs):
+ if parser is None:
+ parser = self.default_parser
+ super(TextTemplateFile, self).__init__(filename, parser, format,
+ doctype, **kwargs)
+
+class TextTemplateRenderer(object):
+ classProvides(ITemplateRendererFactory)
+ implements(ITemplateRenderer)
+
+ def __init__(self, path, auto_reload=False):
+ self.template = TextTemplateFile(path, format='text',
+ auto_reload=auto_reload)
+
+ def implementation(self):
+ return self.template
+
+ def __call__(self, **kw):
+ return self.template(**kw)
+
def renderer_from_cache(path, factory, level=3, **kw):
if os.path.isabs(path):
# 'path' is an absolute filename (not common and largely only
@@ -50,3 +82,14 @@ def renderer_from_cache(path, factory, level=3, **kw):
return renderer
+def renderer_from_path(path, level=4, **kw):
+ extension = os.path.splitext(path)[1]
+ factory = queryUtility(ITemplateRendererFactory, name=extension,
+ default=TextTemplateRenderer)
+ return renderer_from_cache(path, factory, level, **kw)
+
+def _auto_reload():
+ settings = queryUtility(ISettings)
+ auto_reload = settings and settings['reload_templates']
+ return auto_reload
+