diff options
Diffstat (limited to 'repoze/bfg/templating.py')
| -rw-r--r-- | repoze/bfg/templating.py | 43 |
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 + |
