summaryrefslogtreecommitdiff
path: root/repoze/bfg/chameleon_text.py
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2008-11-17 20:17:08 +0000
committerChris McDonough <chrism@agendaless.com>2008-11-17 20:17:08 +0000
commit3a97d1bd7a14815a503550c4deaccf2e0e300ceb (patch)
tree029acb33de81f61b333cf294df2bccd1aa91cc31 /repoze/bfg/chameleon_text.py
parentbce9fb87e15ec902e33280fbdbaf00c20a1ef1e1 (diff)
downloadpyramid-3a97d1bd7a14815a503550c4deaccf2e0e300ceb.tar.gz
pyramid-3a97d1bd7a14815a503550c4deaccf2e0e300ceb.tar.bz2
pyramid-3a97d1bd7a14815a503550c4deaccf2e0e300ceb.zip
- Add chameleon text template API (chameleon ${name} renderings
where the template does not need to be wrapped in any containing XML). Prep for 0.4.9.
Diffstat (limited to 'repoze/bfg/chameleon_text.py')
-rw-r--r--repoze/bfg/chameleon_text.py85
1 files changed, 85 insertions, 0 deletions
diff --git a/repoze/bfg/chameleon_text.py b/repoze/bfg/chameleon_text.py
new file mode 100644
index 000000000..e00106e5c
--- /dev/null
+++ b/repoze/bfg/chameleon_text.py
@@ -0,0 +1,85 @@
+from webob import Response
+
+from zope.component import queryUtility
+
+from zope.interface import classProvides
+from zope.interface import implements
+
+from repoze.bfg.interfaces import ITemplateRenderer
+from repoze.bfg.interfaces import ITemplateRendererFactory
+from repoze.bfg.interfaces import ISettings
+
+from repoze.bfg.templating import renderer_from_cache
+
+from chameleon.core.template import TemplateFile
+from chameleon.zpt.language import Parser
+
+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 _auto_reload():
+ settings = queryUtility(ISettings)
+ auto_reload = settings and settings.reload_templates
+ return auto_reload
+
+def get_renderer(path):
+ """ Return a callable ``ITemplateRenderer`` object representing a
+ ``chameleon`` text template at the package-relative path (may also
+ be absolute)."""
+ auto_reload = _auto_reload()
+ renderer = renderer_from_cache(path, TextTemplateRenderer,
+ auto_reload=auto_reload)
+ return renderer
+
+def get_template(path):
+ """ Return a ``chameleon`` text template at the package-relative
+ path (may also be absolute)."""
+ auto_reload = _auto_reload()
+ renderer = renderer_from_cache(path, TextTemplateRenderer,
+ auto_reload=auto_reload)
+ return renderer.implementation()
+
+def render_template(path, **kw):
+ """ Render a ``chameleon`` text template at the package-relative
+ path (may also be absolute) using the kwargs in ``*kw`` as
+ top-level names and return a string."""
+ auto_reload = _auto_reload()
+ renderer = renderer_from_cache(path, TextTemplateRenderer,
+ auto_reload=auto_reload)
+ return renderer(**kw)
+
+def render_template_to_response(path, **kw):
+ """ Render a ``chameleon`` text template at the package-relative
+ path (may also be absolute) using the kwargs in ``*kw`` as
+ top-level names and return a Response object with the body as the
+ template result."""
+ auto_reload = _auto_reload()
+ renderer = renderer_from_cache(path, TextTemplateRenderer,
+ auto_reload=auto_reload)
+ result = renderer(**kw)
+ return Response(result)
+