a XC?hc �@sbddlZddlZddlmZdZGdd�de�Ze��Zdd�Z dd �Z da d d �Z dd d �Z dS)�N)�wrapsTc@seZdZdd�Zdd�ZdS)�_InterruptHandlercCsNd|_||_t|t�rD|tjkr(tj}n|tjkr.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)�selfrrrr�__init__ s    z_InterruptHandler.__init__cCsRt�tj�}||ur |�||�|jr2|�||�d|_t��D] }|��q@dS)NT)r � getsignal�SIGINTrr�_results�keys�stop)rZsignum�frameZinstalled_handler�resultrrr�__call__s    z_InterruptHandler.__call__N)�__name__� __module__� __qualname__rrrrrrr srcCs dt|<dS)N�)r�rrrr�registerResult*sr cCstt�|d��Sr)�boolr�poprrrr� removeResult-sr#cCs.tdur*t�tj�}t|�at�tjt�dSr)�_interrupt_handlerr rrr)rrrr�installHandler1s r%cs<�dur t���fdd��}|Stdur8t�tjtj�dS)Nc sFt�tj�}t�z�|i|��Wt�tj|�St�tj|�0dSr)r rr� removeHandler)�args�kwargs�initial��methodrr�inner;s �zremoveHandler..inner)rr$r rr )r+r,rr*rr&9s r&)N)r �weakref� functoolsrZ __unittest�objectr�WeakKeyDictionaryrr r#r$r%r&rrrr�s