Ë
    _§1h  ã                  óÜ   — d dl mZ d dlZd dlmZ d dlmZ d dlmZ d dl	Z	ddl
mZmZ erd dlmZmZmZmZ d d	lmZ d d
lmZ e	 	 	 	 	 	 dd„«       Z G d„ d«      Zdd„Ze	 	 	 	 dd„«       Zy)é    )ÚannotationsN)ÚOrderedDict)Úcontextmanager)ÚTYPE_CHECKINGé   )ÚConflictDetectorÚis_main_thread)ÚAsyncIteratorÚCallableÚ	GeneratorÚIterable)Ú	FrameType)ÚSelfc              #  ó.  K  — i }	 t        | «      D ]  }t        j                  ||«      ||<   Œ d –— |j                  «       D ]  \  }}t        j                  ||«       Œ y # |j                  «       D ]  \  }}t        j                  ||«       Œ w xY w­w©N)ÚsetÚsignalÚitems)ÚsignalsÚhandlerÚoriginal_handlersÚsignumÚoriginal_handlers        úK/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/trio/_signals.pyÚ_signal_handlerr   6   sœ   è ø€ ð
 Ðð4Ü˜'“lò 	GˆFÜ(.¯©°f¸gÓ(FÐ˜fÒ%ð	Gãà(9×(?Ñ(?Ó(Aò 	4Ñ$ˆFÐ$Ü�M‰M˜&Ð"2Õ3ñ	4øÐ(9×(?Ñ(?Ó(Aò 	4Ñ$ˆFÐ$Ü�M‰M˜&Ð"2Õ3ñ	4üs   ‚B†-A" ³/BÁ"0BÂBc                  ó4   — e Zd Zdd„Zdd„Zdd„Zd	d„Zd
d„Zy)ÚSignalReceiverc                ó–   — t        «       | _        t        j                  j	                  «       | _        t        d«      | _        d| _        y )Nz8only one task can iterate on a signal receiver at a timeF)	r   Ú_pendingÚtrioÚlowlevelÚ
ParkingLotÚ_lotr   Ú_conflict_detectorÚ_closed©Úselfs    r   Ú__init__zSignalReceiver.__init__F   s8   € ä0;³ˆŒÜ—M‘M×,Ñ,Ó.ˆŒ	Ü"2ØFó#
ˆÔð ˆ�ó    c                óš   — | j                   rt        j                  |«       y d | j                  |<   | j                  j                  «        y r   )r%   r   Úraise_signalr   r#   Úunpark)r'   r   s     r   Ú_addzSignalReceiver._addO   s5   € Ø�<Š<Ü×Ñ Õ'à$(ˆD�M‰M˜&Ñ!Ø�I‰I×ÑÕr)   c                ó2   ‡ ‡— d‰ _         dˆˆ fd„Š ‰«        y )NTc                 ó°   •— ‰j                   r=‰j                   j                  d¬«      \  } }	 t        j                  | «        ‰«        y y #  ‰«        w xY w)NF©Úlast)r   Úpopitemr   r+   )r   Ú_Údeliver_nextr'   s     €€r   r4   z9SignalReceiver._redeliver_remaining.<locals>.deliver_next^   sK   ø€ Ø�}Š}Ø ŸM™M×1Ñ1°uÐ1Ó=‘	�˜ð#Ü×'Ñ'¨Ô/á •Nð øñ
 !•Nús   ®A Á	A©ÚreturnÚNone)r%   )r'   r4   s   `@r   Ú_redeliver_remainingz#SignalReceiver._redeliver_remainingV   s   ù€ ð ˆŒö
	#ñ 	�r)   c                ó   — | S r   © r&   s    r   Ú	__aiter__zSignalReceiver.__aiter__h   s   € Øˆr)   c              ƒ  óp  K  — | j                   rt        d«      ‚| j                  5  | j                  s#| j                  j                  «       ƒ d {  –—†  n&t        j                  j                  «       ƒ d {  –—†  | j                  j                  d¬«      \  }}|cd d d «       S 7 ŒU7 Œ0# 1 sw Y   y xY w­w)Nz)open_signal_receiver block already exitedFr0   )
r%   ÚRuntimeErrorr$   r   r#   Úparkr    r!   Ú
checkpointr2   )r'   r   r3   s      r   Ú	__anext__zSignalReceiver.__anext__k   s”   è ø€ Ø�<Š<ÜÐJÓKÐKð ×$Ñ$ñ 	Ø—=’=Ø—i‘i—n‘nÓ&×&Ñ&ä—m‘m×.Ñ.Ó0×0Ð0ØŸ™×-Ñ-°5Ð-Ó9‰IˆF�AØ÷	ñ 	à&øà0ø÷		ð 	üs@   ‚$B6¦*B*ÁB&Á&B*Á7B(Á8$B*Â
B6Â&B*Â(B*Â*B3Â/B6Nr5   )r   Úintr6   r7   )r6   r   )r6   rA   )Ú__name__Ú
__module__Ú__qualname__r(   r-   r8   r;   r@   r:   r)   r   r   r   E   s   „ óóóó$ôr)   r   c                óP   — t        | t        «      sJ ‚t        | j                  «      S )z/Helper for tests, not public or otherwise used.)Ú
isinstancer   Úlenr   )Úrecs    r   Úget_pending_signal_countrI   z   s#   € ô �cœ>Ô*Ð*Ð*Üˆs�|‰|ÓÐr)   c               '  óH  ‡‡K  — | st        d«      ‚t        «       st        d«      ‚t        j                  j                  «       Št        «       Šdˆˆfd„}	 t        | |«      5  ‰–— ddd«       ‰j                  «        y# 1 sw Y   ŒxY w# ‰j                  «        w xY w­w)aÞ  A context manager for catching signals.

    Entering this context manager starts listening for the given signals and
    returns an async iterator; exiting the context manager stops listening.

    The async iterator blocks until a signal arrives, and then yields it.

    Note that if you leave the ``with`` block while the iterator has
    unextracted signals still pending inside it, then they will be
    re-delivered using Python's regular signal handling logic. This avoids a
    race condition when signals arrives just before we exit the ``with``
    block.

    Args:
      signals: the signals to listen for.

    Raises:
      TypeError: if no signals were provided.

      RuntimeError: if you try to use this anywhere except Python's main
          thread. (This is a Python limitation.)

    Example:

      A common convention for Unix daemons is that they should reload their
      configuration when they receive a ``SIGHUP``. Here's a sketch of what
      that might look like using :func:`open_signal_receiver`::

         with trio.open_signal_receiver(signal.SIGHUP) as signal_aiter:
             async for signum in signal_aiter:
                 assert signum == signal.SIGHUP
                 reload_configuration()

    zNo signals were providedz]Sorry, open_signal_receiver is only possible when running in Python interpreter's main threadc                óB   •— ‰j                  ‰j                  | d¬«       y )NT)Ú
idempotent)Úrun_sync_soonr-   )r   ÚframeÚqueueÚtokens     €€r   r   z%open_signal_receiver.<locals>.handler²   s   ø€ Ø×Ñ˜EŸJ™J¨¸4ÐÕ@r)   N)r   rA   rN   zFrameType | Noner6   r7   )	Ú	TypeErrorr	   r=   r    r!   Úcurrent_trio_tokenr   r   r8   )r   r   rO   rP   s     @@r   Úopen_signal_receiverrS   �   s˜   ùè ø€ ñL ÜÐ2Ó3Ð3äÔÜð/ó
ð 	
ô �M‰M×,Ñ,Ó.€EÜÓ€EöAð%Ü˜W gÓ.ñ 	ØŠK÷	ð 	×"Ñ"Õ$÷	ð 	ûð 	×"Ñ"Õ$üs6   „AB"ÁB Á#BÁ(B Á0B"ÂB
ÂB ÂBÂB")r   zIterable[int]r   zHCallable[[int, FrameType | None], object] | int | signal.Handlers | Noner6   zGenerator[None, None, None])rH   zAsyncIterator[int]r6   rA   )r   zsignal.Signals | intr6   z)Generator[AsyncIterator[int], None, None])Ú
__future__r   r   Úcollectionsr   Ú
contextlibr   Útypingr   r    Ú_utilr   r	   Úcollections.abcr
   r   r   r   Útypesr   Útyping_extensionsr   r   r   rI   rS   r:   r)   r   ú<module>r\      sŒ   ðÝ "ã Ý #Ý %Ý  ã ç 3áßLÓLÝå&ðL ð4Øð4àUð4ð !ò4ó ð4÷2ñ 2ójð ð7%Ø"ð7%à.ò7%ó ñ7%r)   