3 \c ã@sbddlZddlZddlmZdZGdd„deƒZejƒ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__cCsVtjtjƒ}||k r |j||ƒ|jr2|j||ƒd|_xtjƒD] }|jƒ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*srcCsttj|dƒƒS)N)ÚboolrÚpop)rrrrÚ removeResult-sr!cCs.tdkr*tjtjƒ}t|ƒatjtjtƒdS)N)Ú_interrupt_handlerr rrr)rrrrÚinstallHandler1s r#cs<ˆdk r tˆƒ‡fdd„ƒ}|Stdk r8tjtjtjƒdS)Nc s2tjtjƒ}tƒz ˆ||ŽStjtj|ƒ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