Signal
class (third-party)¶
blinker.Signal
¶
Signal(doc=None)
A notification emitter.
:param doc: The docstring for the signal.
PARAMETER | DESCRIPTION |
---|---|
doc
|
TYPE:
|
Source code in .venv/lib/python3.11/site-packages/blinker/base.py
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
|
ANY
class-attribute
instance-attribute
¶
ANY = ANY
An alias for the :data:~blinker.ANY
sender symbol.
set_class
class-attribute
instance-attribute
¶
set_class = set
The set class to use for tracking connected receivers and senders.
Python's set
is unordered. If receivers must be dispatched in the order
they were connected, an ordered set implementation can be used.
.. versionadded:: 1.7
receiver_connected
cached
property
¶
receiver_connected
Emitted at the end of each :meth:connect
call.
The signal sender is the signal instance, and the :meth:connect
arguments are passed through: receiver
, sender
, and weak
.
.. versionadded:: 1.2
receiver_disconnected
cached
property
¶
receiver_disconnected
Emitted at the end of each :meth:disconnect
call.
The sender is the signal instance, and the :meth:disconnect
arguments
are passed through: receiver
and sender
.
This signal is emitted only when :meth:disconnect
is called
explicitly. This signal cannot be emitted by an automatic disconnect
when a weakly referenced receiver or sender goes out of scope, as the
instance is no longer be available to be used as the sender for this
signal.
An alternative approach is available by subscribing to
:attr:receiver_connected
and setting up a custom weakref cleanup
callback on weak receivers and senders.
.. versionadded:: 1.2
receivers
instance-attribute
¶
receivers = {}
The map of connected receivers. Useful to quickly check if any
receivers are connected to the signal: if s.receivers:
. The
structure and data is not part of the public API, but checking its
boolean value is.
connect
¶
connect(receiver, sender=ANY, weak=True)
Connect receiver
to be called when the signal is sent by
sender
.
:param receiver: The callable to call when :meth:send
is called with
the given sender
, passing sender
as a positional argument
along with any extra keyword arguments.
:param sender: Any object or :data:ANY
. receiver
will only be
called when :meth:send
is called with this sender. If ANY
, the
receiver will be called for any sender. A receiver may be connected
to multiple senders by calling :meth:connect
multiple times.
:param weak: Track the receiver with a :mod:weakref
. The receiver will
be automatically disconnected when it is garbage collected. When
connecting a receiver defined within a function, set to False
,
otherwise it will be disconnected when the function scope ends.
PARAMETER | DESCRIPTION |
---|---|
receiver
|
TYPE:
|
sender
|
TYPE:
|
weak
|
TYPE:
|
Source code in .venv/lib/python3.11/site-packages/blinker/base.py
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
|
connect_via
¶
connect_via(sender, weak=False)
Connect the decorated function to be called when the signal is sent
by sender
.
The decorated function will be called when :meth:send
is called with
the given sender
, passing sender
as a positional argument along
with any extra keyword arguments.
:param sender: Any object or :data:ANY
. receiver
will only be
called when :meth:send
is called with this sender. If ANY
, the
receiver will be called for any sender. A receiver may be connected
to multiple senders by calling :meth:connect
multiple times.
:param weak: Track the receiver with a :mod:weakref
. The receiver will
be automatically disconnected when it is garbage collected. When
connecting a receiver defined within a function, set to False
,
otherwise it will be disconnected when the function scope ends.=
.. versionadded:: 1.1
PARAMETER | DESCRIPTION |
---|---|
sender
|
TYPE:
|
weak
|
TYPE:
|
Source code in .venv/lib/python3.11/site-packages/blinker/base.py
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 |
|
connected_to
¶
connected_to(receiver, sender=ANY)
A context manager that temporarily connects receiver
to the
signal while a with
block executes. When the block exits, the
receiver is disconnected. Useful for tests.
:param receiver: The callable to call when :meth:send
is called with
the given sender
, passing sender
as a positional argument
along with any extra keyword arguments.
:param sender: Any object or :data:ANY
. receiver
will only be
called when :meth:send
is called with this sender. If ANY
, the
receiver will be called for any sender.
.. versionadded:: 1.1
PARAMETER | DESCRIPTION |
---|---|
receiver
|
TYPE:
|
sender
|
TYPE:
|
Source code in .venv/lib/python3.11/site-packages/blinker/base.py
167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 |
|
muted
¶
muted()
A context manager that temporarily disables the signal. No receivers
will be called if the signal is sent, until the with
block exits.
Useful for tests.
Source code in .venv/lib/python3.11/site-packages/blinker/base.py
191 192 193 194 195 196 197 198 199 200 201 202 |
|
send
¶
send(sender=None, /, *, _async_wrapper=None, **kwargs)
Call all receivers that are connected to the given sender
or :data:ANY
. Each receiver is called with sender
as a positional
argument along with any extra keyword arguments. Return a list of
(receiver, return value)
tuples.
The order receivers are called is undefined, but can be influenced by
setting :attr:set_class
.
If a receiver raises an exception, that exception will propagate up. This makes debugging straightforward, with an assumption that correctly implemented receivers will not raise.
:param sender: Call receivers connected to this sender, in addition to
those connected to :data:ANY
.
:param _async_wrapper: Will be called on any receivers that are async
coroutines to turn them into sync callables. For example, could run
the receiver with an event loop.
:param kwargs: Extra keyword arguments to pass to each receiver.
.. versionchanged:: 1.7
Added the _async_wrapper
argument.
PARAMETER | DESCRIPTION |
---|---|
sender
|
TYPE:
|
_async_wrapper
|
TYPE:
|
**kwargs
|
TYPE:
|
Source code in .venv/lib/python3.11/site-packages/blinker/base.py
204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 |
|
send_async
async
¶
send_async(sender=None, /, *, _sync_wrapper=None, **kwargs)
Await all receivers that are connected to the given sender
or :data:ANY
. Each receiver is called with sender
as a positional
argument along with any extra keyword arguments. Return a list of
(receiver, return value)
tuples.
The order receivers are called is undefined, but can be influenced by
setting :attr:set_class
.
If a receiver raises an exception, that exception will propagate up. This makes debugging straightforward, with an assumption that correctly implemented receivers will not raise.
:param sender: Call receivers connected to this sender, in addition to
those connected to :data:ANY
.
:param _sync_wrapper: Will be called on any receivers that are sync
callables to turn them into async coroutines. For example,
could call the receiver in a thread.
:param kwargs: Extra keyword arguments to pass to each receiver.
.. versionadded:: 1.7
PARAMETER | DESCRIPTION |
---|---|
sender
|
TYPE:
|
_sync_wrapper
|
TYPE:
|
**kwargs
|
TYPE:
|
Source code in .venv/lib/python3.11/site-packages/blinker/base.py
255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 |
|
has_receivers_for
¶
has_receivers_for(sender)
Check if there is at least one receiver that will be called with the
given sender
. A receiver connected to :data:ANY
will always be
called, regardless of sender. Does not check if weakly referenced
receivers are still live. See :meth:receivers_for
for a stronger
search.
:param sender: Check for receivers connected to this sender, in addition
to those connected to :data:ANY
.
PARAMETER | DESCRIPTION |
---|---|
sender
|
TYPE:
|
Source code in .venv/lib/python3.11/site-packages/blinker/base.py
305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 |
|
receivers_for
¶
receivers_for(sender)
Yield each receiver to be called for sender
, in addition to those
to be called for :data:ANY
. Weakly referenced receivers that are not
live will be disconnected and skipped.
:param sender: Yield receivers connected to this sender, in addition
to those connected to :data:ANY
.
PARAMETER | DESCRIPTION |
---|---|
sender
|
TYPE:
|
Source code in .venv/lib/python3.11/site-packages/blinker/base.py
326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 |
|
disconnect
¶
disconnect(receiver, sender=ANY)
Disconnect receiver
from being called when the signal is sent by
sender
.
:param receiver: A connected receiver callable. :param sender: Disconnect from only this sender. By default, disconnect from all senders.
PARAMETER | DESCRIPTION |
---|---|
receiver
|
TYPE:
|
sender
|
TYPE:
|
Source code in .venv/lib/python3.11/site-packages/blinker/base.py
364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 |
|
Further documentation¶
Blinker is a third-party library, more documentation is under:
Note: in earlier versions edgy implemented signals itself, so there are maybe some wrong examples lingering around.