From 3a2af35cc39ae4d656ed766cb255342d1abd3641 Mon Sep 17 00:00:00 2001 From: Chris McDonough Date: Mon, 1 Nov 2010 01:02:22 -0400 Subject: imply that a renderer helper implements a well-understood interface (IRendererInfo) that can act as a contract between a renderer factory and the framework --- TODO.txt | 6 +++--- pyramid/interfaces.py | 10 ++++++++++ pyramid/renderers.py | 4 ++++ pyramid/tests/test_renderers.py | 6 ++++++ 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): -- cgit v1.2.3