
    ,h                        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        O/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/trio/_signals.py_signal_handlerr   6   s     
 4'l 	GF(.fg(Ff%	G(9(?(?(A 	4$F$MM&"23	4(9(?(?(A 	4$F$MM&"23	4s   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;MM,,.	"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    <<'$(DMM&!II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    }} MM11u1=	#''/ N 
 !Ns   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 $$ 	==iinn&&&mm..000--5-9IFA	 	&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    EJJ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/
 	
 MM,,.EEA%Wg. 	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)   