~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to turbosimpletal/zptsupport.py

all tests pass, apart from the revision size limit one

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
"TurboGears support for Zope Page Templates"
2
2
 
 
3
import StringIO
3
4
import logging
4
5
import os
5
6
import pkg_resources
6
7
 
7
8
#from zope.pagetemplate.pagetemplatefile import PageTemplateFile
8
 
from simpletal import simpleTAL
 
9
from simpletal import simpleTAL, simpleTALES
9
10
 
10
11
log = logging.getLogger("turbogears.zptsupport")
11
12
 
14
15
def zpt(tfile):
15
16
    tinstance = _zpt_cache.get(tfile)
16
17
    if tinstance is None:
17
 
        tinstance = _zpt_cache[tfile] = simpleTAL.compileXMLTemplate(open(tfile))
 
18
        tinstance = _zpt_cache[tfile] = TemplateWrapper(simpleTAL.compileXMLTemplate(open(tfile)))
18
19
    return tinstance
19
20
 
 
21
class TemplateWrapper(object):
 
22
 
 
23
    def __init__(self, template):
 
24
        self.template = template
 
25
 
 
26
    def __call__(self, **kw):
 
27
        context = simpleTALES.Context(allowPythonPath=1)
 
28
        for k, v in kw.iteritems():
 
29
            context.addGlobal(k, v)
 
30
        s = StringIO.StringIO()
 
31
        self.template.expand(context, s)
 
32
        return s.getvalue()
 
33
 
 
34
    @property
 
35
    def macros(self):
 
36
        return self.template.macros
 
37
 
20
38
## class TGPageTemplateFile(PageTemplateFile):
21
39
 
22
40
##     def pt_getContext(self, args=(), options={}, **ignored):
65
83
        if self.get_extra_vars:
66
84
            data.update(self.get_extra_vars())
67
85
        data.update(info)
68
 
        from simpletal import simpleTALES
69
 
        context = simpleTALES.Context(allowPythonPath=1)
70
 
        for k, v in info.iteritems():
71
 
            context.addGlobal(k, v)
72
 
        import StringIO
73
 
        s = StringIO.StringIO()
74
 
        tinstance.expand(context, s)
75
 
        return s.getvalue()
 
86
        return tinstance(**data)