U
    |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.8/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}|| k	r | || | jr2| || d| _t D ]}|  q@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 r   )boolr   popr   r   r   r   removeResult-   s    r#   c                  C   s.   t d kr*ttj} t| a ttjt  d S r   )_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               
      s6   t t j}t  z | |W S t  t j| X d S r   )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    