diff options
| author | Phil Jones <philip.graham.jones@googlemail.com> | 2023-01-23 23:00:32 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-01-24 00:00:32 +0100 |
| commit | d06b2416ea43c535b907b7d0a2b72fff3b2f3a0f (patch) | |
| tree | 566da903678855496ab9d691f229edc2bf89c917 /src | |
| parent | 9c2f289f024e7aac20bf3dbdebfc4ec279df3458 (diff) | |
| download | blinker-d06b2416ea43c535b907b7d0a2b72fff3b2f3a0f.tar.gz | |
Added `muted` context manager for temproary switching signal off (#84)
This is useful whilst testing to remove a signal's affects.
Co-authored-by: Michael Elovskikh <wronglink@yandex-team.ru>
Diffstat (limited to 'src')
| -rw-r--r-- | src/blinker/base.py | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/src/blinker/base.py b/src/blinker/base.py index 2b87cb9..f80750c 100644 --- a/src/blinker/base.py +++ b/src/blinker/base.py @@ -82,6 +82,7 @@ class Signal: #: of the mapping is useful as an extremely efficient check to see if #: any receivers are connected to the signal. self.receivers = {} + self.is_muted = False self._by_receiver = defaultdict(set) self._by_sender = defaultdict(set) self._weak_senders = {} @@ -209,6 +210,19 @@ class Signal: else: self.disconnect(receiver) + @contextmanager + def muted(self): + """Context manager for temporarily disabling signal. + Useful for test purposes. + """ + self.is_muted = True + try: + yield None + except Exception as e: + raise e + finally: + self.is_muted = False + def temporarily_connected_to(self, receiver, sender=ANY): """An alias for :meth:`connected_to`. @@ -259,10 +273,14 @@ class Signal: ) else: sender = sender[0] - return [ - (receiver, receiver(sender, **kwargs)) - for receiver in self.receivers_for(sender) - ] + + if self.is_muted: + return [] + else: + return [ + (receiver, receiver(sender, **kwargs)) + for receiver in self.receivers_for(sender) + ] def has_receivers_for(self, sender): """True if there is probably a receiver for *sender*. |
