summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Bangert <ben@groovie.org>2010-10-27 12:53:11 -0700
committerBen Bangert <ben@groovie.org>2010-10-27 12:53:11 -0700
commitff336d0251829d4f8adabdba110a06575678bccc (patch)
tree190fef49defa60bbeaa6173bddf724164edefc80
parent07437c7480421e66a99ed9f2a6577783bbe2c697 (diff)
downloadpyramid-ff336d0251829d4f8adabdba110a06575678bccc.tar.gz
pyramid-ff336d0251829d4f8adabdba110a06575678bccc.tar.bz2
pyramid-ff336d0251829d4f8adabdba110a06575678bccc.zip
Move PkgResourceTemplateLookup to module level to avoid redefinining it
on every call to renderer_factory.
-rw-r--r--pyramid/mako_templating.py69
1 files changed, 36 insertions, 33 deletions
diff --git a/pyramid/mako_templating.py b/pyramid/mako_templating.py
index 793e56e6a..a681f7f72 100644
--- a/pyramid/mako_templating.py
+++ b/pyramid/mako_templating.py
@@ -12,42 +12,45 @@ from pyramid.settings import get_settings
from pyramid.resource import resolve_resource_spec
from pyramid.resource import abspath_from_resource_spec
+from mako.lookup import TemplateLookup
+from mako import exceptions, util
+
class IMakoLookup(Interface):
pass
-def renderer_factory(path):
- from mako.lookup import TemplateLookup
- from mako import exceptions, util
- class PkgResourceTemplateLookup(TemplateLookup):
- def adjust_uri(self, uri, relativeto):
- # Don't adjust pkg resource spec names
- if ':' in uri:
- return uri
- return TemplateLookup.adjust_uri(self, uri, relativeto)
-
- def get_template(self, uri):
- if ':' not in uri:
- return TemplateLookup.get_template(self, uri)
- try:
- if self.filesystem_checks:
- return self._check(uri, self._collection[uri])
- else:
- return self._collection[uri]
- except KeyError:
- pname, path = resolve_resource_spec(uri)
- srcfile = abspath_from_resource_spec(path, pname)
+
+class PkgResourceTemplateLookup(TemplateLookup):
+ def adjust_uri(self, uri, relativeto):
+ # Don't adjust pkg resource spec names
+ if ':' in uri:
+ return uri
+ return TemplateLookup.adjust_uri(self, uri, relativeto)
+
+ def get_template(self, uri):
+ if ':' not in uri:
+ return TemplateLookup.get_template(self, uri)
+ try:
+ if self.filesystem_checks:
+ return self._check(uri, self._collection[uri])
+ else:
+ return self._collection[uri]
+ except KeyError:
+ pname, path = resolve_resource_spec(uri)
+ srcfile = abspath_from_resource_spec(path, pname)
+ if os.path.isfile(srcfile):
+ return self._load(srcfile, uri)
+
+ u = re.sub(r'^\/+', '', path)
+ for dir in self.directories:
+ srcfile = posixpath.normpath(posixpath.join(dir, u))
if os.path.isfile(srcfile):
return self._load(srcfile, uri)
-
- u = re.sub(r'^\/+', '', path)
- for dir in self.directories:
- srcfile = posixpath.normpath(posixpath.join(dir, u))
- if os.path.isfile(srcfile):
- return self._load(srcfile, uri)
- else:
- raise exceptions.TopLevelLookupException(
- "Cant locate template for uri %r" % uri)
-
+ else:
+ raise exceptions.TopLevelLookupException(
+ "Cant locate template for uri %r" % uri)
+
+
+def renderer_factory(path):
registry = get_current_registry()
lookup = registry.queryUtility(IMakoLookup)
if lookup is None:
@@ -60,7 +63,7 @@ def renderer_factory(path):
raise ConfigurationError(
'Mako template used without a lookup path')
directories = directories.splitlines()
- directories = [ abspath_from_resource_spec(d) for d in directories ]
+ directories = [ abspath_from_resource_spec(d) for d in directories ]
lookup = PkgResourceTemplateLookup(directories=directories,
module_directory=module_directory,
input_encoding=input_encoding,
@@ -68,6 +71,7 @@ def renderer_factory(path):
registry.registerUtility(lookup, IMakoLookup)
return MakoLookupTemplateRenderer(path, lookup)
+
class MakoLookupTemplateRenderer(object):
implements(ITemplateRenderer)
def __init__(self, path, lookup):
@@ -97,4 +101,3 @@ class MakoLookupTemplateRenderer(object):
template = template.get_def(def_name)
result = template.render_unicode(**system)
return result
-