diff options
| author | Chris McDonough <chrism@plope.com> | 2012-01-03 08:16:06 -0500 |
|---|---|---|
| committer | Chris McDonough <chrism@plope.com> | 2012-01-03 08:16:06 -0500 |
| commit | 52a948e65ef923340a9c172fe6d258f2832f8799 (patch) | |
| tree | 91ad8ef9a993ff3667fa608068cc7b04d318370b | |
| parent | 22c2200bf69ca49a0bfbe0e0a0241e87b9143737 (diff) | |
| download | pyramid-52a948e65ef923340a9c172fe6d258f2832f8799.tar.gz pyramid-52a948e65ef923340a9c172fe6d258f2832f8799.tar.bz2 pyramid-52a948e65ef923340a9c172fe6d258f2832f8799.zip | |
- The documentation of ``pyramid.events.subscriber`` indicated that using it
as a decorator with no arguments like this::
@subscriber()
def somefunc(event):
pass
Would register ``somefunc`` to receive all events sent via the registry,
but this was untrue. Instead, it would receive no events at all. This has
now been fixed and the code matches the documentation. See also
https://github.com/Pylons/pyramid/issues/386
Closes #386
| -rw-r--r-- | CHANGES.txt | 15 | ||||
| -rw-r--r-- | pyramid/events.py | 9 | ||||
| -rw-r--r-- | pyramid/tests/test_events.py | 10 |
3 files changed, 31 insertions, 3 deletions
diff --git a/CHANGES.txt b/CHANGES.txt index adc380c34..07c0b564d 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -12,6 +12,21 @@ Features - Use the ``waitress`` WSGI server instead of ``wsgiref`` in scaffolding. +Bug Fixes +--------- + +- The documentation of ``pyramid.events.subscriber`` indicated that using it + as a decorator with no arguments like this:: + + @subscriber() + def somefunc(event): + pass + + Would register ``somefunc`` to receive all events sent via the registry, + but this was untrue. Instead, it would receive no events at all. This has + now been fixed and the code matches the documentation. See also + https://github.com/Pylons/pyramid/issues/386 + 1.3a3 (2011-12-21) ================== diff --git a/pyramid/events.py b/pyramid/events.py index 9cb8b31ad..e181ef33f 100644 --- a/pyramid/events.py +++ b/pyramid/events.py @@ -1,6 +1,9 @@ import venusian -from zope.interface import implementer +from zope.interface import ( + implementer, + Interface + ) from pyramid.interfaces import ( IContextFound, @@ -26,7 +29,7 @@ class subscriber(object): def mysubscriber(event): event.request.foo = 1 - More than one event type can be passed as a construtor argument. The + More than one event type can be passed as a constructor argument. The decorated subscriber will be called for each event type. .. code-block:: python @@ -66,7 +69,7 @@ class subscriber(object): def register(self, scanner, name, wrapped): config = scanner.config - for iface in self.ifaces: + for iface in self.ifaces or (Interface,): config.add_subscriber(wrapped, iface) def __call__(self, wrapped): diff --git a/pyramid/tests/test_events.py b/pyramid/tests/test_events.py index 4b58a129c..f35083c02 100644 --- a/pyramid/tests/test_events.py +++ b/pyramid/tests/test_events.py @@ -155,6 +155,16 @@ class TestSubscriber(unittest.TestCase): dec.register(scanner, None, foo) self.assertEqual(config.subscribed, [(foo, IFoo), (foo, IBar)]) + def test_register_none_means_all(self): + from zope.interface import Interface + dec = self._makeOne() + def foo(): pass + config = DummyConfigurator() + scanner = Dummy() + scanner.config = config + dec.register(scanner, None, foo) + self.assertEqual(config.subscribed, [(foo, Interface)]) + def test_register_objectevent(self): from zope.interface import Interface class IFoo(Interface): pass |
