B °-_c ã@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