1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
import os
from webob import Response
from zope.component import queryUtility
from zope.interface import classProvides
from zope.interface import implements
from zope.deprecation import deprecated
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.zpt.template import PageTemplateFile
class ZPTTemplateRenderer(object):
classProvides(ITemplateRendererFactory)
implements(ITemplateRenderer)
def __init__(self, path, auto_reload=False):
try:
self.template = PageTemplateFile(path, auto_reload=auto_reload)
except ImportError, why:
why = str(why)
if 'z3c.pt' in why:
# unpickling error due to move from z3c.pt -> chameleon
cachefile = '%s.cache' % path
if os.path.isfile(cachefile):
os.remove(cachefile)
self.template = PageTemplateFile(path, auto_reload=auto_reload)
else:
raise
def implementation(self):
return self.template
def __call__(self, **kw):
return self.template(**kw)
ZPTTemplateFactory = ZPTTemplateRenderer
deprecated('ZPTTemplateFactory',
('repoze.bfg.chameleon_zpt.ZPTTemplateFactory should now be '
'imported as repoze.bfg.chameleon_zpt.ZPTTemplateRenderer'))
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.zpt`` template at the package-relative path (may also
be absolute). """
auto_reload = _auto_reload()
renderer = renderer_from_cache(path, ZPTTemplateRenderer,
auto_reload=auto_reload)
return renderer
def get_template(path):
""" Return a ``chameleon.zpt`` template at the package-relative
path (may also be absolute). """
auto_reload = _auto_reload()
renderer = renderer_from_cache(path, ZPTTemplateRenderer,
auto_reload=auto_reload)
return renderer.implementation()
def render_template(path, **kw):
""" Render a ``chameleon.zpt`` 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, ZPTTemplateRenderer,
auto_reload=auto_reload)
return renderer(**kw)
def render_template_to_response(path, **kw):
""" Render a ``chameleon.zpt`` 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, ZPTTemplateRenderer,
auto_reload=auto_reload)
result = renderer(**kw)
return Response(result)
|