summaryrefslogtreecommitdiff
path: root/repoze/bfg/view.py
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2010-02-04 18:32:36 +0000
committerChris McDonough <chrism@agendaless.com>2010-02-04 18:32:36 +0000
commit89968dce0273f49cf34e07480077f7843593f54e (patch)
treebc7f1f02d0af23c497bbb612e962def3a044d6fc /repoze/bfg/view.py
parentd43b02fbe101233ad89eee605d558ca6f60a7e01 (diff)
downloadpyramid-89968dce0273f49cf34e07480077f7843593f54e.tar.gz
pyramid-89968dce0273f49cf34e07480077f7843593f54e.tar.bz2
pyramid-89968dce0273f49cf34e07480077f7843593f54e.zip
- Fix a bug whereby a ``renderer`` argument to the ``@bfg_view``
decorator that provided a package-relative template filename might not have been resolved properly. Symptom: inappropriate ``Missing template resource`` errors.
Diffstat (limited to 'repoze/bfg/view.py')
-rw-r--r--repoze/bfg/view.py17
1 files changed, 17 insertions, 0 deletions
diff --git a/repoze/bfg/view.py b/repoze/bfg/view.py
index 02a53824f..ac0977378 100644
--- a/repoze/bfg/view.py
+++ b/repoze/bfg/view.py
@@ -1,5 +1,6 @@
import cgi
import mimetypes
+import os
import sys
# See http://bugs.python.org/issue5853 which is a recursion bug
@@ -26,7 +27,9 @@ from repoze.bfg.interfaces import IRoutesMapper
from repoze.bfg.interfaces import IView
from repoze.bfg.path import caller_package
+from repoze.bfg.path import package_path
from repoze.bfg.resource import resolve_resource_spec
+from repoze.bfg.resource import resource_spec_from_abspath
from repoze.bfg.static import PackageURLParser
from repoze.bfg.threadlocal import get_current_registry
@@ -489,6 +492,20 @@ class bfg_view(object):
else:
settings = getattr(wrapped, '__bfg_view_settings__', [])
wrapped.__bfg_view_settings__ = settings
+
+ # try to convert the renderer provided into a fully qualified
+ # resource specification
+ abspath = setting.get('renderer')
+ if abspath is not None and '.' in abspath:
+ isabs = os.path.isabs(abspath)
+ if not (':' in abspath and not isabs):
+ # not already a resource spec
+ if not isabs:
+ pp = package_path(module)
+ abspath = os.path.join(pp, abspath)
+ resource = resource_spec_from_abspath(abspath, module)
+ setting['renderer'] = resource
+
settings.append(setting)
return wrapped