[Checkins] SVN: z3c.pt/trunk/ Optimized template loader.
Malthe Borch
mborch at gmail.com
Wed Sep 10 15:35:54 EDT 2008
Log message for revision 91038:
Optimized template loader.
Changed:
U z3c.pt/trunk/CHANGES.txt
U z3c.pt/trunk/src/z3c/pt/loader.py
U z3c.pt/trunk/src/z3c/pt/tests/test_loader.py
-=-
Modified: z3c.pt/trunk/CHANGES.txt
===================================================================
--- z3c.pt/trunk/CHANGES.txt 2008-09-10 19:16:29 UTC (rev 91037)
+++ z3c.pt/trunk/CHANGES.txt 2008-09-10 19:35:53 UTC (rev 91038)
@@ -20,6 +20,9 @@
Features
+- Optimized template loader so only a single template is instantiated
+ per file. [malthe]
+
- Made ``z3c.pt`` a namespace package. [malthe]
- Added reduce and restore operation to the compilation and rendering
Modified: z3c.pt/trunk/src/z3c/pt/loader.py
===================================================================
--- z3c.pt/trunk/src/z3c/pt/loader.py 2008-09-10 19:16:29 UTC (rev 91037)
+++ z3c.pt/trunk/src/z3c/pt/loader.py 2008-09-10 19:35:53 UTC (rev 91038)
@@ -3,9 +3,19 @@
from z3c.pt.pagetemplate import PageTemplateFile
from z3c.pt.texttemplate import TextTemplateFile
+def cache(func):
+ def load(self, *args):
+ template = self.registry.get(args)
+ if template is None:
+ self.registry[args] = template = func(self, *args)
+ return template
+ return load
+
class TemplateLoader(object):
- """Template loader tool.
- """
+ """Template loader tool. To load templates using relative
+ filenames, pass a sequence of paths (or a single path) as
+ ``search_path``; if ``auto_reload`` is set, templates will be
+ reloaded when modified."""
def __init__(self, search_path=None, auto_reload=False, parser=None):
if search_path is None:
@@ -15,7 +25,9 @@
self.search_path = search_path
self.auto_reload = auto_reload
self.parser = parser
+ self.registry = {}
+ @cache
def _load(self, filename, klass):
if os.path.isabs(filename):
return klass(filename, self.parser)
Modified: z3c.pt/trunk/src/z3c/pt/tests/test_loader.py
===================================================================
--- z3c.pt/trunk/src/z3c/pt/tests/test_loader.py 2008-09-10 19:16:29 UTC (rev 91037)
+++ z3c.pt/trunk/src/z3c/pt/tests/test_loader.py 2008-09-10 19:35:53 UTC (rev 91038)
@@ -17,6 +17,14 @@
result = self._load(loader, 'view.pt')
self.assertEqual(result.filename, os.path.join(here, 'view.pt'))
+ def test_consecutive_loads(self):
+ import os
+ here = os.path.dirname(__file__)
+ loader = self._makeOne(search_path = [here])
+
+ self.assertTrue(
+ self._load(loader, 'view.pt') is self._load(loader, 'view.pt'))
+
def test_load_relative_badpath_in_searchpath(self):
import os
here = os.path.dirname(__file__)
More information about the Checkins
mailing list