B
    ^ Çcc	  ã               @   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ƒrD|tjkr(tj}n|tjkr<dd„ }ntdƒ‚|| _	d S )NFc             S   s   d S )N© )Zunused_signumZunused_framer   r   ú!lib/python3.7/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   sV   t  t j¡}|| k	r |  ||¡ | jr2|  ||¡ d| _xt ¡ D ]}| ¡  qBW d S )NT)r   Ú	getsignalÚSIGINTr   r   Ú_resultsÚkeysÚstop)r   ZsignumÚframeZ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 )N)Úboolr   Úpop)r   r   r   r   ÚremoveResult-   s    r!   c              C   s.   t d kr*t tj¡} t| ƒa t tjt ¡ d S )N)Ú_interrupt_handlerr   r   r   r   )r   r   r   r   ÚinstallHandler1   s    r#   c                s<   ˆ d k	r t ˆ ƒ‡ fdd„ƒ}|S td k	r8t tjtj¡ d S )Nc           
      s2   t  t j¡}tƒ  z
ˆ | |ŽS t   t j|¡ X d S )N)r   r   r   ÚremoveHandler)ÚargsÚkwargsÚinitial)Úmethodr   r   Úinner;   s
    
zremoveHandler.<locals>.inner)r   r"   r   r   r   )r(   r)   r   )r(   r   r$   9   s
    r$   )N)r   ÚweakrefÚ	functoolsr   Z
__unittestÚobjectr   ÚWeakKeyDictionaryr   r   r!   r"   r#   r$   r   r   r   r   Ú<module>   s    