summaryrefslogtreecommitdiff
path: root/repoze/bfg/templating.py
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-09-14 04:33:38 +0000
committerChris McDonough <chrism@agendaless.com>2009-09-14 04:33:38 +0000
commit04e182bbc0c077afcd921f0df4231020549dc217 (patch)
treea994d2508aaac376b76e04dd4335129b6391dca1 /repoze/bfg/templating.py
parentf587c76deac60c0a328975dcc4641d0f85984e63 (diff)
downloadpyramid-04e182bbc0c077afcd921f0df4231020549dc217.tar.gz
pyramid-04e182bbc0c077afcd921f0df4231020549dc217.tar.bz2
pyramid-04e182bbc0c077afcd921f0df4231020549dc217.zip
- A ZCML ``view`` directive (and the associated ``bfg_view``
decorator) can now accept an "attr" value. If an "attr" value is supplied, it is considered a method named of the view object to be called when the response is required. This is typically only good for views that are classes or instances (not so useful for functions, as functions typically have no methods other than ``__call__``). - A ZCML ``view`` directive (and the associated ``bfg_view`` decorator) can now accept a "template" value. If a "template" value is supplied, and the view callable returns a dictionary, the associated template is rendered with the dictionary as keyword arguments.
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
+