
    vKg                        S SK Jr  S SKrS SKJr  S SKJr  S SKJr  S SK	r	SSK
JrJrJr  \(       a  S SKJrJrJrJr  S S	KJr  S S
KJr  \      SS j5       r " S S5      rSS jr\    SS j5       rg)    )annotationsN)OrderedDict)contextmanager)TYPE_CHECKING   )ConflictDetectoris_main_threadsignal_raise)AsyncIteratorCallable	GeneratorIterable)	FrameType)Selfc              #  4  #    0 n [        U 5       H  n[        R                  " X15      X#'   M     S v   UR                  5        H  u  p4[        R                  " X45        M     g ! UR                  5        H  u  p4[        R                  " X45        M     f = f7fN)setsignalitems)signalshandleroriginal_handlerssignumoriginal_handlers        M/var/www/highfloat_scraper/venv/lib/python3.13/site-packages/trio/_signals.py_signal_handlerr   6   s|     
 4'lF(.f(F% #(9(?(?(A$FMM&3 )B(9(?(?(A$FMM&3 )Bs   B.A$ 0B$1BBc                  F    \ rS rSrS	S jrS
S jrS	S jrSS jrSS jrSr	g)SignalReceiverE   c                    [        5       U l        [        R                  R	                  5       U l        [        S5      U l        SU l        g )Nz8only one task can iterate on a signal receiver at a timeF)	r   _pendingtriolowlevel
ParkingLot_lotr   _conflict_detector_closedselfs    r   __init__SignalReceiver.__init__F   s8    0;MM,,.	"2F#
     c                    U R                   (       a  [        U5        g S U R                  U'   U R                  R	                  5         g r   )r'   r
   r!   r%   unpark)r)   r   s     r   _addSignalReceiver._addO   s/    << $(DMM&!IIr,   c                6   ^ ^ ST l         SUU 4S jjmT" 5         g )NTc                    > TR                   (       a/  TR                   R                  SS9u  p [        U 5        T" 5         g g ! T" 5         f = f)NFlast)r!   popitemr
   )r   _deliver_nextr)   s     r   r7   9SignalReceiver._redeliver_remaining.<locals>.deliver_next^   sC    }} MM11u1=	# ( N 
 !Ns   A 	AreturnNone)r'   )r)   r7   s   `@r   _redeliver_remaining#SignalReceiver._redeliver_remainingV   s     
	# 	# 	r,   c                    U $ r    r(   s    r   	__aiter__SignalReceiver.__aiter__h   s    r,   c                  #    U R                   (       a  [        S5      eU R                     U R                  (       d#  U R                  R                  5       I S h  vN   O&[        R                  R                  5       I S h  vN   U R                  R                  SS9u  pUsS S S 5        $  NQ N,! , (       d  f       g = f7f)Nz)open_signal_receiver block already exitedFr3   )
r'   RuntimeErrorr&   r!   r%   parkr"   r#   
checkpointr5   )r)   r   r6   s      r   	__anext__SignalReceiver.__anext__k   s     <<JKK $$==iinn&&&mm..000--5-9IF %$&0	 %$s@   )C/B0B,&B0B. B0"
C,B0.B00
B>:C)r'   r&   r%   r!   Nr9   )r   intr:   r;   )r:   r   )r:   rH   )
__name__
__module____qualname____firstlineno__r*   r/   r<   r@   rF   __static_attributes__r?   r,   r   r   r   E   s    $r,   r   c                Z    [        U [        5      (       d   e[        U R                  5      $ )z/Helper for tests, not public or otherwise used.)
isinstancer   lenr!   )recs    r   get_pending_signal_countrR   z   s&     c>****s||r,   c               '  h  ^^#    U (       d  [        S5      e[        5       (       d  [        S5      e[        R                  R                  5       m[        5       mSUU4S jjn [        X5         Tv   SSS5        TR                  5         g! , (       d  f       N= f! TR                  5         f = f7f)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                <   > TR                  TR                  U SS9  g )NT)
idempotent)run_sync_soonr/   )r   framequeuetokens     r   r   %open_signal_receiver.<locals>.handler   s    EJJ4@r,   N)r   rH   rW   zFrameType | Noner:   r;   )		TypeErrorr	   rC   r"   r#   current_trio_tokenr   r   r<   )r   r   rX   rY   s     @@r   open_signal_receiverr]      s     L 233/
 	
 MM,,.EEA A%W.K / 	""$ /. 	""$s6   AB2#B .B3B ;B2
BB B//B2)r   zIterable[int]r   zHCallable[[int, FrameType | None], object] | int | signal.Handlers | Noner:   zGenerator[None, None, None])rQ   zAsyncIterator[int]r:   rH   )r   zsignal.Signals | intr:   z)Generator[AsyncIterator[int], None, None])
__future__r   r   collectionsr   
contextlibr   typingr   r"   _utilr   r	   r
   collections.abcr   r   r   r   typesr   typing_extensionsr   r   r   rR   r]   r?   r,   r   <module>rf      s    "  # %    A ALL&L 44U4 !4 42 2j 7%"7%.7% 7%r,   