a €šç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 )Úselfr rrrÚ__init__ s    z_InterruptHandler.__init__cCsRt tj¡}||ur | ||¡|jr2| ||¡d|_t ¡D] }| ¡q@dS)NT)rÚ getsignalÚSIGINTr r Ú_resultsÚkeysÚstop)rÚsignumÚframeÚinstalled_handlerÚresultrrrÚ__call__s    z_InterruptHandler.__call__N)Ú__name__Ú __module__Ú __qualname__rrrrrrr srcCs dt|<dS)Né)r©rrrrÚregisterResult*sr$cCstt |d¡ƒSr)ÚboolrÚpopr#rrrÚ removeResult-sr'cCs.tdur*t tj¡}t|ƒat tjt¡dSr)Ú_interrupt_handlerrrrr)r rrrÚinstallHandler1s r)cs<ˆdur tˆƒ‡fdd„ƒ}|Stdur8t tjtj¡dS)Nc sFt tj¡}tƒzˆ|i|¤ŽWt tj|¡St tj|¡0dSr)rrrÚ removeHandler)ÚargsÚkwargsÚinitial©ÚmethodrrÚinner;s þzremoveHandler..inner)rr(rrr )r/r0rr.rr*9s r*)N)rÚweakrefÚ functoolsrÚ __unittestÚobjectrÚWeakKeyDictionaryrr$r'r(r)r*rrrrÚs