diff options
| -rw-r--r-- | CHANGES.txt | 9 | ||||
| -rw-r--r-- | repoze/bfg/chameleon_text.py | 7 | ||||
| -rw-r--r-- | repoze/bfg/chameleon_zpt.py | 7 | ||||
| -rw-r--r-- | repoze/bfg/renderers.py | 12 |
4 files changed, 24 insertions, 11 deletions
diff --git a/CHANGES.txt b/CHANGES.txt index 554c05d4c..e6beb4700 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -11,6 +11,15 @@ Bug Fixes - Updated dependency on ``WebOb`` to require a version which supports features now used in tests. +Features +-------- + +- 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. + 1.2a10 (2010-01-04) =================== 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 @@ -46,19 +46,17 @@ def template_renderer_factory(spec, impl): # 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 |
