summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris McDonough <chrism@plope.com>2010-11-01 01:02:22 -0400
committerChris McDonough <chrism@plope.com>2010-11-01 01:02:22 -0400
commit3a2af35cc39ae4d656ed766cb255342d1abd3641 (patch)
treece760e9bf771240018e6db1a833cd5c2acfc278f
parent57e98d5407107321552b34cc780235d008f9f2af (diff)
downloadpyramid-3a2af35cc39ae4d656ed766cb255342d1abd3641.tar.gz
pyramid-3a2af35cc39ae4d656ed766cb255342d1abd3641.tar.bz2
pyramid-3a2af35cc39ae4d656ed766cb255342d1abd3641.zip
imply that a renderer helper implements a well-understood interface (IRendererInfo) that can act as a contract between a renderer factory and the framework
-rw-r--r--TODO.txt6
-rw-r--r--pyramid/interfaces.py10
-rw-r--r--pyramid/renderers.py4
-rw-r--r--pyramid/tests/test_renderers.py6
4 files changed, 23 insertions, 3 deletions
diff --git a/TODO.txt b/TODO.txt
index 0fa2852ea..56038e3c0 100644
--- a/TODO.txt
+++ b/TODO.txt
@@ -66,8 +66,6 @@
- .flash API on session.
-- Provide a webob.Response class facade for forward compat.
-
- CRSF token machinery
- ``add_handler`` documentation.
@@ -98,6 +96,8 @@
- Remove references to 'WebOb' Response and just call it 'Response', and note
that it is imported from pyramid. API docs can mention its inheritance from
- webob.
+ webob (aka "Provide a webob.Response class facade for forward compat").
- Add docs for httpexceptions.
+
+- RendererHelper -> RendererInfo?
diff --git a/pyramid/interfaces.py b/pyramid/interfaces.py
index 1c7a8940c..ae322b36c 100644
--- a/pyramid/interfaces.py
+++ b/pyramid/interfaces.py
@@ -490,3 +490,13 @@ class ISession(Interface):
"""Return true if a key exists in the mapping."""
NO_PERMISSION_REQUIRED = '__no_permission_required__'
+
+class IRendererInfo(Interface):
+ name = Attribute('The value passed by the user as the renderer name')
+ package = Attribute('The "current package" when the renderer '
+ 'configuration statement was found')
+ type = Attribute('The renderer type name')
+ registry = Attribute('The "current" application registry when the '
+ 'renderer was created')
+ settings = Attribute('The ISettings dictionary related to the current app')
+
diff --git a/pyramid/renderers.py b/pyramid/renderers.py
index bf5a7e58b..92efc7b0e 100644
--- a/pyramid/renderers.py
+++ b/pyramid/renderers.py
@@ -4,11 +4,14 @@ import threading
from webob import Response
+from zope.interface import implements
+
from pyramid.interfaces import IRendererGlobalsFactory
from pyramid.interfaces import IRendererFactory
from pyramid.interfaces import IResponseFactory
from pyramid.interfaces import ITemplateRenderer
from pyramid.interfaces import ISettings
+from pyramid.interfaces import IRendererInfo
from pyramid.compat import json
from pyramid.decorator import reify
@@ -211,6 +214,7 @@ def renderer_from_name(path, package=None): # XXX deprecate?
return RendererHelper(name=path, package=package).renderer
class RendererHelper(object):
+ implements(IRendererInfo)
def __init__(self, name=None, package=None, registry=None):
if name and '.' in name:
rtype = os.path.splitext(name)[1]
diff --git a/pyramid/tests/test_renderers.py b/pyramid/tests/test_renderers.py
index 50946fdcd..deaa039a2 100644
--- a/pyramid/tests/test_renderers.py
+++ b/pyramid/tests/test_renderers.py
@@ -306,6 +306,12 @@ class TestRendererHelper(unittest.TestCase):
from pyramid.renderers import RendererHelper
return RendererHelper(*arg, **kw)
+ def test_instance_conforms(self):
+ from zope.interface.verify import verifyObject
+ from pyramid.interfaces import IRendererInfo
+ helper = self._makeOne()
+ verifyObject(IRendererInfo, helper)
+
def _registerRendererFactory(self):
from pyramid.interfaces import IRendererFactory
def renderer(*arg):