a ÕDOgc ã@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