mirror of https://github.com/django/django.git
Added return value to Signal.disconnect().
This commit is contained in:
parent
937fab030d
commit
23f1a8dad2
|
@ -160,14 +160,17 @@ class Signal(object):
|
|||
else:
|
||||
lookup_key = (_make_id(receiver), _make_id(sender))
|
||||
|
||||
disconnected = False
|
||||
with self.lock:
|
||||
self._clear_dead_receivers()
|
||||
for index in range(len(self.receivers)):
|
||||
(r_key, _) = self.receivers[index]
|
||||
if r_key == lookup_key:
|
||||
disconnected = True
|
||||
del self.receivers[index]
|
||||
break
|
||||
self.sender_receivers_cache.clear()
|
||||
return disconnected
|
||||
|
||||
def has_listeners(self, sender=None):
|
||||
return bool(self._live_receivers(sender))
|
||||
|
|
|
@ -278,7 +278,12 @@ Disconnecting signals
|
|||
.. method:: Signal.disconnect([receiver=None, sender=None, weak=True, dispatch_uid=None])
|
||||
|
||||
To disconnect a receiver from a signal, call :meth:`Signal.disconnect`. The
|
||||
arguments are as described in :meth:`.Signal.connect`.
|
||||
arguments are as described in :meth:`.Signal.connect`. The method returns
|
||||
``True`` if a receiver was disconnected and ``False`` if not.
|
||||
|
||||
The *receiver* argument indicates the registered receiver to disconnect. It may
|
||||
be ``None`` if ``dispatch_uid`` is used to identify the receiver.
|
||||
The ``receiver`` argument indicates the registered receiver to disconnect. It
|
||||
may be ``None`` if ``dispatch_uid`` is used to identify the receiver.
|
||||
|
||||
.. versionchanged:: 1.8
|
||||
|
||||
The boolean return value was added.
|
||||
|
|
|
@ -153,6 +153,16 @@ class DispatcherTests(unittest.TestCase):
|
|||
a_signal.disconnect(receiver_3)
|
||||
self.assertTestIsClean(a_signal)
|
||||
|
||||
def test_values_returned_by_disconnection(self):
|
||||
receiver_1 = Callable()
|
||||
receiver_2 = Callable()
|
||||
a_signal.connect(receiver_1)
|
||||
receiver_1_disconnected = a_signal.disconnect(receiver_1)
|
||||
receiver_2_disconnected = a_signal.disconnect(receiver_2)
|
||||
self.assertTrue(receiver_1_disconnected)
|
||||
self.assertFalse(receiver_2_disconnected)
|
||||
self.assertTestIsClean(a_signal)
|
||||
|
||||
def test_has_listeners(self):
|
||||
self.assertFalse(a_signal.has_listeners())
|
||||
self.assertFalse(a_signal.has_listeners(sender=object()))
|
||||
|
|
Loading…
Reference in New Issue