1B d Z ddlmZ ddlmZ ddlmZmZmZm Z m Z mZmZ ed Z de _ dZ G d de Z ed Z G d de Z G d d e Z G d de Z e j ZdS )a+ Signals and events. A small implementation of signals, inspired by a snippet of Django signal API client code seen in a blog post. Signals are first-class objects and each manages its own receivers and message emission. The :func:`signal` function provides singleton behavior for named signals. )warn)WeakValueDictionary) WeakTypescontextmanagerdefaultdicthashable_identity lazy_property referencesymbolANYzToken for "any sender".c e Zd ZdZeZed Zed ZddZedfdZ dd Z eefd ZefdZ d Zd Zd ZefdZd Zd Zd Zd Zd ZdS )SignalzA notification emitter.c " t d S )zEmitted after each :meth:`connect`. The signal sender is the signal instance, and the :meth:`connect` arguments are passed through: *receiver*, *sender*, and *weak*. .. versionadded:: 1.2 z"Emitted after a receiver connects.docr selfs l/builddir/build/BUILD/imunify360-venv-2.6.2/opt/imunify360/venv/lib/python3.11/site-packages/blinker/base.pyreceiver_connectedzSignal.receiver_connected% s >???? c " t d S )a Emitted after :meth:`disconnect`. The sender is the signal instance, and the :meth:`disconnect` arguments are passed through: *receiver* and *sender*. Note, this signal is emitted **only** when :meth:`disconnect` is called explicitly. The disconnect signal can not be emitted by an automatic disconnect (due to a weakly referenced receiver or sender going out of scope), as the receiver and/or sender instances are no longer available for use at the time this signal would be emitted. 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 z%Emitted after a receiver disconnects.r r r s r receiver_disconnectedzSignal.receiver_disconnected1 s , ABBBBr Nc |r|| _ i | _ t t | _ t t | _ i | _ dS )zt :param doc: optional. If provided, will be assigned to the signal's __doc__ attribute. N)__doc__ receiversr set_by_receiver _by_sender _weak_senders)r r s r __init__zSignal.__init__I sI DL ',,%c**r Tc Z t | }|rt || j }||_ n|}|t u rt }nt | }| j || | j | | | j | | ~|t urS|| j vrJ t || j }||_ | j || ~n# t $ r Y nw xY wd| j v rH| j j r< | j | ||| n# | || xY wt j rE| t ur< t | ||| n# | || xY w|S )aa Connect *receiver* to signal events sent by *sender*. :param receiver: A callable. Will be invoked by :meth:`send` with `sender=` as a single positional argument and any \*\*kwargs that were provided to a call to :meth:`send`. :param sender: Any object or :obj:`ANY`, defaults to ``ANY``. Restricts notifications delivered to *receiver* to only those :meth:`send` emissions sent by *sender*. If ``ANY``, the receiver will always be notified. A *receiver* may be connected to multiple *sender* values on the same Signal through multiple calls to :meth:`connect`. :param weak: If true, the Signal will hold a weakref to *receiver* and automatically disconnect when *receiver* goes out of scope or is garbage collected. Defaults to True. r )receiversenderweak)receiver_arg sender_argweak_arg)r r _cleanup_receiverreceiver_idr ANY_IDr setdefaultr addr r _cleanup_sender sender_id TypeError__dict__r send disconnect)r r# r$ r% r* receiver_refr/ sender_refs r connectzSignal.connect\ s &