summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES.txt9
-rw-r--r--repoze/bfg/chameleon_text.py7
-rw-r--r--repoze/bfg/chameleon_zpt.py7
-rw-r--r--repoze/bfg/renderers.py12
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