o
    ˜»áfc	  ã                   @   sb   d dl Z d dlZd dlmZ dZG dd„ deƒZe ¡ Zdd„ Z	dd	„ Z
dad
d„ Zddd„ZdS )é    N)ÚwrapsTc                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú_InterruptHandlerc                 C   sN   d| _ || _t|tƒr"|tjkrtj}n|tjkrdd„ }ntdƒ‚|| _	d S )NFc                 S   s   d S ©N© )Úunused_signumÚunused_framer   r   ú'/usr/lib/python3.10/unittest/signals.pyÚdefault_handler   s   z3_InterruptHandler.__init__.<locals>.default_handlerzYexpected SIGINT signal handler to be signal.SIG_IGN, signal.SIG_DFL, or a callable object)
ÚcalledÚoriginal_handlerÚ
isinstanceÚintÚsignalÚSIG_DFLÚdefault_int_handlerÚSIG_IGNÚ	TypeErrorr	   )Úselfr	   r   r   r   Ú__init__
   s   




z_InterruptHandler.__init__c                 C   sR   t  t j¡}|| ur|  ||¡ | jr|  ||¡ d| _t ¡ D ]}| ¡  q d S )NT)r   Ú	getsignalÚSIGINTr	   r
   Ú_resultsÚkeysÚstop)r   ÚsignumÚframeÚinstalled_handlerÚresultr   r   r   Ú__call__   s   
ÿz_InterruptHandler.__call__N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   	   s    r   c                 C   s   dt | < d S )Né   )r   ©r   r   r   r   ÚregisterResult*   s   r$   c                 C   s   t t | d ¡ƒS r   )Úboolr   Úpopr#   r   r   r   ÚremoveResult-   s   r'   c                  C   s2   t d u rt tj¡} t| ƒa t tjt ¡ d S d S r   )Ú_interrupt_handlerr   r   r   r   )r	   r   r   r   ÚinstallHandler1   s
   ýr)   c                    s@   ˆ d urt ˆ ƒ‡ fdd„ƒ}|S td urt tjtj¡ d S d S )Nc               
      sB   t  t j¡}tƒ  zˆ | i |¤ŽW t   t j|¡ S t   t j|¡ w r   )r   r   r   ÚremoveHandler)ÚargsÚkwargsÚinitial©Úmethodr   r   Úinner;   s
    zremoveHandler.<locals>.inner)r   r(   r   r   r   )r/   r0   r   r.   r   r*   9   s   ÿr*   r   )r   ÚweakrefÚ	functoolsr   Ú
__unittestÚobjectr   ÚWeakKeyDictionaryr   r$   r'   r(   r)   r*   r   r   r   r   Ú<module>   s     