summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris McDonough <chrism@plope.com>2011-07-23 13:40:24 -0400
committerChris McDonough <chrism@plope.com>2011-07-23 13:40:24 -0400
commit9a66aa09a8a773f67da59642a6642f1a3240c254 (patch)
tree9eae91bf14bf60931cfdc73535be12d4b6d2ce87
parent16b93e024e4c16e5684186fa34be2485de1e96ee (diff)
downloadpyramid-9a66aa09a8a773f67da59642a6642f1a3240c254.tar.gz
pyramid-9a66aa09a8a773f67da59642a6642f1a3240c254.tar.bz2
pyramid-9a66aa09a8a773f67da59642a6642f1a3240c254.zip
- The ``pyramid.events.BeforeRender`` event now has an attribute named
``rendering_val``. This can be used to introspect the value returned by a view in a BeforeRender subscriber.
-rw-r--r--CHANGES.txt10
-rw-r--r--pyramid/events.py12
-rw-r--r--pyramid/interfaces.py4
-rw-r--r--pyramid/renderers.py2
-rw-r--r--pyramid/tests/test_events.py9
5 files changed, 31 insertions, 6 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
index a2ad1f720..57ab76e46 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,3 +1,13 @@
+Next release
+============
+
+Features
+--------
+
+- The ``pyramid.events.BeforeRender`` event now has an attribute named
+ ``rendering_val``. This can be used to introspect the value returned by a
+ view in a BeforeRender subscriber.
+
1.1 (2011-07-22)
================
diff --git a/pyramid/events.py b/pyramid/events.py
index b536bfd67..4021b94cc 100644
--- a/pyramid/events.py
+++ b/pyramid/events.py
@@ -193,10 +193,16 @@ class BeforeRender(dict):
BeforeRender subscriber, your subscriber code will need to (using
``.get`` or ``__contains__`` of the event object) ensure no value already
exists in the renderer globals dictionary before setting an overriding
- value."""
+ value.
- def __init__(self, system):
+ The event has an additional attribute named ``rendering_val``. This is
+ the (non-system) value returned by a view or passed to ``render*`` as
+ ``value``. This feature is new in Pyramid 1.1.1.
+ """
+
+ def __init__(self, system, rendering_val=None):
self._system = system
+ self.rendering_val = rendering_val
def __setitem__(self, name, value):
""" Set a name/value pair into the dictionary which is passed to a
@@ -230,4 +236,4 @@ class BeforeRender(dict):
""" Return the value for key ``k`` from the renderer globals
dictionary, or the default if no such value exists."""
return self._system.get(k)
-
+
diff --git a/pyramid/interfaces.py b/pyramid/interfaces.py
index d3a67e1aa..ec1d23acf 100644
--- a/pyramid/interfaces.py
+++ b/pyramid/interfaces.py
@@ -309,6 +309,10 @@ class IBeforeRender(Interface):
""" Return the value for key ``k`` from the renderer globals
dictionary, or the default if no such value exists."""
+ rendering_val = Attribute('The value returned by a view or passed to a '
+ '``render`` method for this rendering. '
+ 'This feature is new in Pyramid 1.1.1.')
+
class IRenderer(Interface):
def __call__(value, system):
""" Call a the renderer implementation with the result of the
diff --git a/pyramid/renderers.py b/pyramid/renderers.py
index 52459ee90..c718cf1bb 100644
--- a/pyramid/renderers.py
+++ b/pyramid/renderers.py
@@ -409,7 +409,7 @@ class RendererHelper(object):
if renderer_globals:
system_values.update(renderer_globals)
- registry.notify(BeforeRender(system_values))
+ registry.notify(BeforeRender(system_values, value))
result = renderer(value, system_values)
return result
diff --git a/pyramid/tests/test_events.py b/pyramid/tests/test_events.py
index e3a10ccad..116a48bb7 100644
--- a/pyramid/tests/test_events.py
+++ b/pyramid/tests/test_events.py
@@ -179,9 +179,9 @@ class TestSubscriber(unittest.TestCase):
[(foo, dec.register, 'pyramid')])
class TestBeforeRender(unittest.TestCase):
- def _makeOne(self, system):
+ def _makeOne(self, system, val=None):
from pyramid.events import BeforeRender
- return BeforeRender(system)
+ return BeforeRender(system, val)
def test_instance_conforms(self):
from zope.interface.verify import verifyObject
@@ -246,6 +246,11 @@ class TestBeforeRender(unittest.TestCase):
event = self._makeOne(system)
self.assertEqual(event.get('a'), None)
+ def test_rendering_val(self):
+ system = {}
+ val = {}
+ event = self._makeOne(system, val)
+ self.assertTrue(event.rendering_val is val)
class DummyConfigurator(object):
def __init__(self):