From 3ebf0287eeb8c269a7a3b35ee1441d1b07118d7f Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Wed, 6 Jan 2010 02:46:54 +0000 Subject: - Show the derived abspath of template resource specifications in the traceback when a renderer template cannot be found. - Show the original traceback when a Chameleon template cannot be rendered due to a platform incompatibility. --- repoze/bfg/chameleon_text.py | 7 +++++-- repoze/bfg/chameleon_zpt.py | 7 +++++-- repoze/bfg/renderers.py | 12 +++++------- 3 files changed, 15 insertions(+), 11 deletions(-) (limited to 'repoze') diff --git a/repoze/bfg/chameleon_text.py b/repoze/bfg/chameleon_text.py index 85f0126b3..f1dc8e3aa 100644 --- a/repoze/bfg/chameleon_text.py +++ b/repoze/bfg/chameleon_text.py @@ -1,14 +1,17 @@ +import sys + from webob import Response from zope.interface import implements try: from chameleon.core.template import TemplateFile -except ImportError, why: # pragma: no cover +except ImportError: # pragma: no cover + exc_class, exc, tb = sys.exc_info() # Chameleon doesn't work on non-CPython platforms class TemplateFile(object): def __init__(self, *arg, **kw): - raise ImportError(why[0]) + raise ImportError, exc, tb try: from chameleon.zpt.language import Parser diff --git a/repoze/bfg/chameleon_zpt.py b/repoze/bfg/chameleon_zpt.py index 22d409f33..f597ebd5f 100644 --- a/repoze/bfg/chameleon_zpt.py +++ b/repoze/bfg/chameleon_zpt.py @@ -1,14 +1,17 @@ +import sys + from webob import Response from zope.interface import implements try: from chameleon.zpt.template import PageTemplateFile -except ImportError, why: # pragma: no cover +except ImportError: # pragma: no cover + exc_class, exc, tb = sys.exc_info() # Chameleon doesn't work on non-CPython platforms class PageTemplateFile(object): def __init__(self, *arg, **kw): - raise ImportError(why[0]) + raise ImportError, exc, tb from repoze.bfg.interfaces import IResponseFactory from repoze.bfg.interfaces import ITemplateRenderer diff --git a/repoze/bfg/renderers.py b/repoze/bfg/renderers.py index e937bd2a1..b54803b3b 100644 --- a/repoze/bfg/renderers.py +++ b/repoze/bfg/renderers.py @@ -45,20 +45,18 @@ def template_renderer_factory(spec, impl): else: # spec is a package:relpath resource spec renderer = reg.queryUtility(ITemplateRenderer, name=spec) - if renderer is None: - # service unit tests by trying the relative path string as - # the utility name directly - renderer = reg.queryUtility(ITemplateRenderer, name=spec) if renderer is None: try: package_name, filename = spec.split(':', 1) except ValueError: # pragma: no cover - # unit test or someone passing a relative pathname + # unit test or somehow we were passed a relative pathname; + # this should die package_name = caller_package(4).__name__ filename = spec - if not pkg_resources.resource_exists(package_name, filename): - raise ValueError('Missing template resource: %s' % spec) abspath = pkg_resources.resource_filename(package_name, filename) + if not pkg_resources.resource_exists(package_name, filename): + raise ValueError( + 'Missing template resource: %s (%s)' % (spec, abspath)) renderer = impl(abspath) if not _reload_resources(): # cache the template -- cgit v1.2.3