B YI~dc �@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__cCsVt�tj�}||k r |�||�|jr2|�||�d|_xt��D] }|��qBWdS)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*srcCstt�|d��S)N)�boolr�pop)rrrr� removeResult-sr!cCs.tdkr*t�tj�}t|�at�tjt�dS)N)�_interrupt_handlerr rrr)rrrr�installHandler1s r#cs<�dk r t���fdd��}|Stdk r8t�tjtj�dS)Nc s2t�tj�}t�z �||�St�tj|�XdS)N)r rr� removeHandler)�args�kwargs�initial)�methodrr�inner;s   zremoveHandler..inner)rr"r rr)r(r)r)r(rr$9s r$)N)r �weakref� functoolsrZ __unittest�objectr�WeakKeyDictionaryrrr!r"r#r$rrrr�s