From ff336d0251829d4f8adabdba110a06575678bccc Mon Sep 17 00:00:00 2001 From: Ben Bangert Date: Wed, 27 Oct 2010 12:53:11 -0700 Subject: Move PkgResourceTemplateLookup to module level to avoid redefinining it on every call to renderer_factory. --- pyramid/mako_templating.py | 69 ++++++++++++++++++++++++---------------------- 1 file 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 - -- cgit v1.2.3