~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to turbozpt/template.py

move the templatefunctions to a better location

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
"""
 
2
"""
 
3
 
 
4
from zope.pagetemplate import pagetemplatefile
 
5
import os
 
6
 
 
7
_zpt_cache = {}
 
8
 
 
9
def _compile_template(tfile):
 
10
    mod = PageTemplate(tfile)
 
11
    mtime = os.stat(tfile).st_mtime
 
12
    mod.__mtime__ = mtime
 
13
    return mod
 
14
 
 
15
def zpt(tfile):
 
16
    if tfile in _zpt_cache:
 
17
        mtime = os.stat(tfile).st_mtime
 
18
        mod = _zpt_cache[tfile]
 
19
        if mod.__mtime__ != mtime:
 
20
            mod = _compile_template(tfile)
 
21
            _zpt_cache[tfile] = mod
 
22
    else:
 
23
        mod = _zpt_cache[tfile] = _compile_template(tfile)
 
24
    return mod
 
25
 
 
26
class Here(object):
 
27
    def __init__(self, base, options):
 
28
        self.base = base
 
29
        self.options = options
 
30
 
 
31
    def __getitem__(self, name):
 
32
        return zpt(os.path.join(self.base, name))(**self.options)
 
33
 
 
34
class PageTemplate(pagetemplatefile.PageTemplateFile):
 
35
    def __init__(self, name):
 
36
        self.base = os.path.dirname(name)
 
37
        pagetemplatefile.PageTemplateFile.__init__(self, name)
 
38
 
 
39
    def pt_getContext(self, args=(), options={}, **ignored):
 
40
        rval = pagetemplatefile.PageTemplateFile.pt_getContext(
 
41
            self, args, options, **ignored)
 
42
        rval.update(options)
 
43
        rval.update({'here':Here(self.base, options)})
 
44
        return rval