[Checkins] SVN: z3c.pt/trunk/z3c/pt/pagetemplate.py Generate a
signature on the template body and include as part of the
storage key so we can somewhat cheaply switch template source
at our leisure.
Malthe Borch
mborch at gmail.com
Fri Jan 18 10:49:30 EST 2008
Log message for revision 82948:
Generate a signature on the template body and include as part of the storage key so we can somewhat cheaply switch template source at our leisure.
Changed:
U z3c.pt/trunk/z3c/pt/pagetemplate.py
-=-
Modified: z3c.pt/trunk/z3c/pt/pagetemplate.py
===================================================================
--- z3c.pt/trunk/z3c/pt/pagetemplate.py 2008-01-18 13:19:38 UTC (rev 82947)
+++ z3c.pt/trunk/z3c/pt/pagetemplate.py 2008-01-18 15:49:30 UTC (rev 82948)
@@ -1,3 +1,4 @@
+import os
import translation
import codegen
@@ -2,13 +3,14 @@
class PageTemplate(object):
+ registry = {}
+
def __init__(self, body):
self.body = body
- self.init()
+ self.signature = hash(body)
- def init(self):
- self.registry = {}
-
def cook(self, params):
source, _globals = translation.translate(self.body, params)
suite = codegen.Suite(source)
+ self.source = source
+
_locals = {}
@@ -20,7 +22,7 @@
return _locals['render']
def render(self, **kwargs):
- signature = hash(",".join(kwargs.keys()))
+ signature = self.signature + hash(",".join(kwargs.keys()))
template = self.registry.get(signature)
if not template:
@@ -34,20 +36,39 @@
class PageTemplateFile(PageTemplate):
def __init__(self, filename):
self.filename = filename
-
+
def get_filename(self):
return getattr(self, '_filename', None)
def set_filename(self, filename):
self._filename = filename
- self.init()
+ self._v_last_read = False
filename = property(get_filename, set_filename)
-
- @property
- def body(self):
- return open(self.filename, 'r').read()
+ def render(self, **kwargs):
+ if self._cook_check():
+ self.body = open(self.filename, 'r').read()
+ self.signature = hash(self.body)
+ self._v_last_read = self.mtime()
+
+ return PageTemplate.render(self, **kwargs)
+
+ def _cook_check(self):
+ if self._v_last_read and not __debug__:
+ return
+
+ if self.mtime() == self._v_last_read:
+ return
+
+ return True
+
+ def mtime(self):
+ try:
+ return os.path.getmtime(self.filename)
+ except OSError:
+ return 0
+
class ViewPageTemplateFile(property):
def __init__(self, filename):
self.template = PageTemplateFile(filename)
More information about the Checkins
mailing list