~loggerhead-team/loggerhead/trunk-rich

128.6.1 by Michael Hudson
add a lightly hacked copy of turbozpt (it's not much code)
1
"TurboGears support for Zope Page Templates"
2
128.6.57 by Michael Hudson
all tests pass, apart from the revision size limit one
3
import StringIO
128.6.40 by Michael Hudson
remove the obscure here hack and tidy up turbozpt some more
4
import logging
128.6.67 by Michael Hudson
tidy up turbosimpletal a bit, add recompilation templates that have changed on
5
import os
128.6.1 by Michael Hudson
add a lightly hacked copy of turbozpt (it's not much code)
6
import pkg_resources
7
128.6.57 by Michael Hudson
all tests pass, apart from the revision size limit one
8
from simpletal import simpleTAL, simpleTALES
128.6.40 by Michael Hudson
remove the obscure here hack and tidy up turbozpt some more
9
128.6.1 by Michael Hudson
add a lightly hacked copy of turbozpt (it's not much code)
10
log = logging.getLogger("turbogears.zptsupport")
11
128.6.67 by Michael Hudson
tidy up turbosimpletal a bit, add recompilation templates that have changed on
12
128.6.40 by Michael Hudson
remove the obscure here hack and tidy up turbozpt some more
13
_zpt_cache = {}
14
def zpt(tfile):
15
    tinstance = _zpt_cache.get(tfile)
128.6.67 by Michael Hudson
tidy up turbosimpletal a bit, add recompilation templates that have changed on
16
    stat = os.stat(tfile)
17
    if tinstance is None or tinstance.stat != stat:
128.6.58 by Michael Hudson
quiet simpletal's logging, unicode fixes
18
        tinstance = _zpt_cache[tfile] = TemplateWrapper(
128.6.67 by Michael Hudson
tidy up turbosimpletal a bit, add recompilation templates that have changed on
19
            simpleTAL.compileXMLTemplate(open(tfile)), tfile, stat)
128.6.40 by Michael Hudson
remove the obscure here hack and tidy up turbozpt some more
20
    return tinstance
21
128.6.67 by Michael Hudson
tidy up turbosimpletal a bit, add recompilation templates that have changed on
22
128.6.57 by Michael Hudson
all tests pass, apart from the revision size limit one
23
class TemplateWrapper(object):
24
128.6.67 by Michael Hudson
tidy up turbosimpletal a bit, add recompilation templates that have changed on
25
    def __init__(self, template, filename, stat):
128.6.57 by Michael Hudson
all tests pass, apart from the revision size limit one
26
        self.template = template
128.6.58 by Michael Hudson
quiet simpletal's logging, unicode fixes
27
        self.filename = filename
128.6.67 by Michael Hudson
tidy up turbosimpletal a bit, add recompilation templates that have changed on
28
        self.stat = stat
128.6.57 by Michael Hudson
all tests pass, apart from the revision size limit one
29
128.6.59 by Michael Hudson
mostly more unicode fixes
30
    def expand(self, **info):
128.6.57 by Michael Hudson
all tests pass, apart from the revision size limit one
31
        context = simpleTALES.Context(allowPythonPath=1)
128.6.59 by Michael Hudson
mostly more unicode fixes
32
        for k, v in info.iteritems():
128.6.57 by Michael Hudson
all tests pass, apart from the revision size limit one
33
            context.addGlobal(k, v)
34
        s = StringIO.StringIO()
128.6.59 by Michael Hudson
mostly more unicode fixes
35
        self.template.expandInline(context, s)
128.6.57 by Michael Hudson
all tests pass, apart from the revision size limit one
36
        return s.getvalue()
37
159.2.4 by Michael Hudson
more progress
38
    def expand_(self, f, **info):
39
        context = simpleTALES.Context(allowPythonPath=1)
40
        for k, v in info.iteritems():
41
            context.addGlobal(k, v)
42
        self.template.expand(context, f, 'utf-8')
43
128.6.57 by Michael Hudson
all tests pass, apart from the revision size limit one
44
    @property
45
    def macros(self):
46
        return self.template.macros
47
128.6.40 by Michael Hudson
remove the obscure here hack and tidy up turbozpt some more
48
128.6.30 by Michael Hudson
clean up dusty parts of turbozpt
49
class TurboZpt(object):
128.6.1 by Michael Hudson
add a lightly hacked copy of turbozpt (it's not much code)
50
    extension = "pt"
128.6.30 by Michael Hudson
clean up dusty parts of turbozpt
51
52
    def __init__(self, extra_vars_func=None):
53
        self.get_extra_vars = extra_vars_func
54
128.6.1 by Michael Hudson
add a lightly hacked copy of turbozpt (it's not much code)
55
    def load_template(self, classname, loadingSite=False):
56
        """Searches for a template along the Python path.
57
58
        Template files must end in ".pt" and be in legitimate packages.
128.6.30 by Michael Hudson
clean up dusty parts of turbozpt
59
        Templates are automatically checked for changes and reloaded as
60
        neccessary.
128.6.1 by Michael Hudson
add a lightly hacked copy of turbozpt (it's not much code)
61
        """
62
        divider = classname.rfind(".")
63
        if divider > -1:
64
            package = classname[0:divider]
65
            basename = classname[divider+1:]
66
        else:
67
            raise ValueError, "All templates must be in a package"
68
128.6.30 by Michael Hudson
clean up dusty parts of turbozpt
69
        tfile = pkg_resources.resource_filename(
70
            package, "%s.%s" % (basename, self.extension))
71
        return zpt(tfile)
128.6.1 by Michael Hudson
add a lightly hacked copy of turbozpt (it's not much code)
72