diff options
| author | Chris McDonough <chrism@plope.com> | 2011-07-23 13:40:24 -0400 |
|---|---|---|
| committer | Chris McDonough <chrism@plope.com> | 2011-07-23 13:40:24 -0400 |
| commit | 9a66aa09a8a773f67da59642a6642f1a3240c254 (patch) | |
| tree | 9eae91bf14bf60931cfdc73535be12d4b6d2ce87 | |
| parent | 16b93e024e4c16e5684186fa34be2485de1e96ee (diff) | |
| download | pyramid-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.txt | 10 | ||||
| -rw-r--r-- | pyramid/events.py | 12 | ||||
| -rw-r--r-- | pyramid/interfaces.py | 4 | ||||
| -rw-r--r-- | pyramid/renderers.py | 2 | ||||
| -rw-r--r-- | pyramid/tests/test_events.py | 9 |
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): |
