Added return value to Signal.disconnect().
This commit is contained in:
parent
937fab030d
commit
23f1a8dad2
|
@ -160,14 +160,17 @@ class Signal(object):
|
||||||
else:
|
else:
|
||||||
lookup_key = (_make_id(receiver), _make_id(sender))
|
lookup_key = (_make_id(receiver), _make_id(sender))
|
||||||
|
|
||||||
|
disconnected = False
|
||||||
with self.lock:
|
with self.lock:
|
||||||
self._clear_dead_receivers()
|
self._clear_dead_receivers()
|
||||||
for index in range(len(self.receivers)):
|
for index in range(len(self.receivers)):
|
||||||
(r_key, _) = self.receivers[index]
|
(r_key, _) = self.receivers[index]
|
||||||
if r_key == lookup_key:
|
if r_key == lookup_key:
|
||||||
|
disconnected = True
|
||||||
del self.receivers[index]
|
del self.receivers[index]
|
||||||
break
|
break
|
||||||
self.sender_receivers_cache.clear()
|
self.sender_receivers_cache.clear()
|
||||||
|
return disconnected
|
||||||
|
|
||||||
def has_listeners(self, sender=None):
|
def has_listeners(self, sender=None):
|
||||||
return bool(self._live_receivers(sender))
|
return bool(self._live_receivers(sender))
|
||||||
|
|
|
@ -278,7 +278,12 @@ Disconnecting signals
|
||||||
.. method:: Signal.disconnect([receiver=None, sender=None, weak=True, dispatch_uid=None])
|
.. method:: Signal.disconnect([receiver=None, sender=None, weak=True, dispatch_uid=None])
|
||||||
|
|
||||||
To disconnect a receiver from a signal, call :meth:`Signal.disconnect`. The
|
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
|
The ``receiver`` argument indicates the registered receiver to disconnect. It
|
||||||
be ``None`` if ``dispatch_uid`` is used to identify the receiver.
|
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)
|
a_signal.disconnect(receiver_3)
|
||||||
self.assertTestIsClean(a_signal)
|
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):
|
def test_has_listeners(self):
|
||||||
self.assertFalse(a_signal.has_listeners())
|
self.assertFalse(a_signal.has_listeners())
|
||||||
self.assertFalse(a_signal.has_listeners(sender=object()))
|
self.assertFalse(a_signal.has_listeners(sender=object()))
|
||||||
|
|
Loading…
Reference in New Issue