summaryrefslogtreecommitdiff
path: root/repoze/bfg/templating.py
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-06-27 06:17:35 +0000
committerChris McDonough <chrism@agendaless.com>2009-06-27 06:17:35 +0000
commit3c9613061499de48d65714d11fe97b19475fb97d (patch)
tree2929ee287566b6058ad52cf929786f27b1084540 /repoze/bfg/templating.py
parentd9a76e61e75f77fbacf6ee5525f64fe2ac37184f (diff)
downloadpyramid-3c9613061499de48d65714d11fe97b19475fb97d.tar.gz
pyramid-3c9613061499de48d65714d11fe97b19475fb97d.tar.bz2
pyramid-3c9613061499de48d65714d11fe97b19475fb97d.zip
- The ``repoze.bfg.templating`` module now uses ``pkg_resources`` to
locate and register template files instead of using an absolute path name.
Diffstat (limited to 'repoze/bfg/templating.py')
-rw-r--r--repoze/bfg/templating.py43
1 files changed, 29 insertions, 14 deletions
diff --git a/repoze/bfg/templating.py b/repoze/bfg/templating.py
index ce2833415..337621eef 100644
--- a/repoze/bfg/templating.py
+++ b/repoze/bfg/templating.py
@@ -1,24 +1,39 @@
+import pkg_resources
from zope.component import queryUtility
from repoze.bfg.interfaces import ITemplateRenderer
from zope.component import getSiteManager
-from repoze.bfg.path import caller_path
+from repoze.bfg.path import caller_module
import os
def renderer_from_cache(path, factory, level=3, **kw):
- abspath = caller_path(path, level=level)
- renderer = queryUtility(ITemplateRenderer, abspath)
+ if os.path.isabs(path):
+ # 'path' is an absolute filename (not common and largely only
+ # for backwards compatibility)
+ if not os.path.exists(path):
+ raise ValueError('Missing template file: %s' % path)
+ renderer = queryUtility(ITemplateRenderer, name=path)
+ if renderer is None:
+ renderer = factory(path, **kw)
+ sm = getSiteManager()
+ sm.registerUtility(renderer, ITemplateRenderer, name=path)
- if renderer is None:
- # service unit tests and explicit registrations by trying the relative
- # "path"
- renderer = queryUtility(ITemplateRenderer, path)
-
- if renderer is None:
- if not os.path.exists(abspath):
- raise ValueError('Missing template file: %s' % abspath)
- renderer = factory(abspath, **kw)
- sm = getSiteManager()
- sm.registerUtility(renderer, ITemplateRenderer, name=abspath)
+ else:
+ # 'path' is a relative filename
+ module = caller_module(level=level)
+ spec = (module.__name__, path)
+ utility_name = '%s\t%s' % spec # utility name must be a string :-(
+ renderer = queryUtility(ITemplateRenderer, name=utility_name)
+ if renderer is None:
+ # service unit tests here by trying the relative path
+ # string as the utility name directly
+ renderer = queryUtility(ITemplateRenderer, name=path)
+ if renderer is None:
+ if not pkg_resources.resource_exists(*spec):
+ raise ValueError('Missing template resource: %s:%s' % spec)
+ abspath = pkg_resources.resource_filename(*spec)
+ renderer = factory(abspath, **kw)
+ sm = getSiteManager()
+ sm.registerUtility(renderer, ITemplateRenderer, name=utility_name)
return renderer