a bê²^¿ã@s¼ddlmZddlZddlZddlZddlZddlmZmZddl m Z dd„Z da ed d „ƒZ e jZe ej¡ejur„eejƒZnd Zd d „Zedd„ƒZdd„Zgadaedd„ƒZdS)é)Úprint_functionN)ÚclosingÚcontextmanageré)Ú_gicCsnt|dƒr| d¡nTz ddl}Wnty<tdƒ‚Yn.0| ¡}| ||j¡}| ||j||jB¡dS)zŸEnsures that the socket is not inherited by child processes Raises: EnvironmentError NotImplementedError: With Python <3.4 on Windows Úset_inheritableFrNz+Not implemented for older Python on Windows) ÚhasattrrÚfcntlÚ ImportErrorÚNotImplementedErrorÚfilenoZF_GETFDZF_SETFDZ FD_CLOEXEC)Úsockr ÚfdÚflags©rú5/usr/lib64/python3.9/site-packages/gi/_ossighelper.pyÚensure_socket_not_inheritables    ÿ rFc #sÊtrdVdSddlm‰t ¡\‰}tˆƒ„t|ƒXˆ|fD]}| d¡t|ƒqFzt  |  ¡¡}Wn2t y¢dVYWdƒWdƒdS0da‡‡fdd„}z¦t j dkrÔˆj ˆ  ¡¡}nˆj ˆ  ¡¡}ˆ |ˆjˆjjˆjjBˆjjBˆjjB|¡}zdVWˆ |¡n ˆ |¡0Wt  |¡}||  ¡krXt  |¡dan(t  |¡}||  ¡kr€t  |¡da0Wdƒn1sœ0YWdƒn1s¼0YdS) aÓA decorator for functions which create a glib event loop to keep Python signal handlers working while the event loop is idling. In case an OS signal is received will wake the default event loop up shortly so that any registered Python signal handlers registered through signal.signal() can run. In case the wrapped function is not called from the main thread it will be called as is and it will not wake up the default loop for signals. Nr)ÚGLibFTc sV|ˆj@rNztˆ d¡ƒWStyH}zt|ƒWYd}~dSd}~00dSdSdS)NrFT)ZIO_INÚboolZrecvÚEnvironmentErrorÚprint)ÚsourceZ conditionÚe©rZ read_socketrrÚ signal_notify\s z'wakeup_on_signal..signal_notifyÚnt)Ú_wakeup_fd_is_activeZ gi.repositoryrÚsocketZ socketpairrZ setblockingrÚsignalÚ set_wakeup_fdr Ú ValueErrorÚosÚnameZ IOChannelZwin32_new_socketZunix_newZ io_add_watchZPRIORITY_DEFAULTZ IOConditionÚINZHUPZNVALZERRZ source_remove)Z write_socketr Zorig_fdrZchannelZ source_idZwrite_fdrrrÚwakeup_on_signal7sV         ÿÿÿû  û  r$éÿÿÿÿcCs t tj¡tjuottjƒtkS)z?Returns if on SIGINT the default Python handler would be called)rÚ getsignalÚSIGINTÚdefault_int_handlerÚ PyOS_getsigÚstartup_sigint_ptrrrrrÚsigint_handler_is_defaults ÿr+c cstƒs J‚t tj|¡ttjƒ}z8dVWt tj¡|urŒttjƒ|krŒt tjtj¡n0t tj¡|urŠttjƒ|krŠt tjtj¡0dS)z»Context manager for saving/restoring the SIGINT handler default state. Will only restore the default handler again if the handler is not changed while the context is active. N)r+rr'r)r&r()ZhandlerZsig_ptrrrrÚ&sigint_handler_set_and_restore_default”s   ÿþ ÿr,cCst ¡jdkS)z@Returns True in case the function is called from the main threadÚ MainThread)Ú threadingÚcurrent_threadr"rrrrÚis_main_thread¨sr0c csêtƒsdVdStƒsbtrXt |¡zdVWt ¡}trV|ƒq^t ¡}trT|ƒ0ndVdSdadd„}t |¡zNt|ƒdVWdƒn1sž0YWtr¾t tj d¡qæt ¡ntrÜt tj d¡nt ¡0dS)aßInstalls a SIGINT signal handler in case the default Python one is active which calls 'callback' in case the signal occurs. Only does something if called from the main thread. In case of nested context managers the signal handler will be only installed once and the callbacks will be called in the reverse order of their registration. The old signal handler will be restored in case no signal handler is registered while the context is active. NFcSstrdSdat ¡ƒdS)NT)Ú_sigint_calledÚ_callback_stackÚpop)Zsig_numÚframerrrÚsigint_handlerßsz0register_sigint_fallback..sigint_handler) r0r+r2Úappendr3r1r,rr(r')ÚcallbackÚcbr5rrrÚregister_sigint_fallback²s8 þ   & ýr9)Z __future__rr!rrr.Ú contextlibrrÚrrrr$Z pyos_getsigr)r&r'r(r*r+r,r0r2r1r9rrrrÚs,   I