U e5dc ã@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¡}||k r | ||¡|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.tdkr*t tj¡}t|ƒat tjt¡dSr)Ú_interrupt_handlerr rrr)rrrrÚinstallHandler1s r%cs<ˆdk r tˆƒ‡fdd„ƒ}|Stdk r8t tjtj¡dS)Nc s6t tj¡}tƒzˆ||ŽW¢St tj|¡XdSr)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