JFIF$        dd7 

Viewing File: /usr/lib/python3.9/site-packages/certbot/_internal/__pycache__/error_handler.cpython-39.pyc

a

}|�g�@sdZddlZddlZddlZddlZddlmZddlmZddlm	Z	ddlm
Z
ddlmZddlmZdd	lm
Z
dd
lmZddlmZddlmZe�e�Zejd
kr�ejgZejejejejfD]Ze�e�ejkr�e� e�q�ngZGdd�d�Z!Gdd�de!�Z"dS)zBRegisters functions to be called if an exception or signal occurs.�N)�
TracebackType)�Any)�Callable)�Dict)�List)�Optional)�Type)�Union)�errors)�os�ntc@s�eZdZdZedefeedd�dd�Zdd�dd	�Zee	e
ee
eeed
�dd�Z
edefeedd�d
d�Zdd�dd�Zdd�dd�Zdd�dd�Zeedd�dd�Zdd�dd�ZdS)�ErrorHandleraGContext manager for running code that must be cleaned up on failure.

    The context manager allows you to register functions that will be called
    when an exception (excluding SystemExit) or signal is encountered.
    Usage::

        handler = ErrorHandler(cleanup1_func, *cleanup1_args, **cleanup1_kwargs)
        handler.register(cleanup2_func, *cleanup2_args, **cleanup2_kwargs)

        with handler:
            do_something()

    Or for one cleanup function::

        with ErrorHandler(func, args, kwargs):
            do_something()

    If an exception is raised out of do_something, the cleanup functions will
    be called in last in first out order. Then the exception is raised.
    Similarly, if a signal is encountered, the cleanup functions are called
    followed by the previously received signal handler.

    Each registered cleanup function is called exactly once. If a registered
    function raises an exception, it is logged and the next function is called.
    Signals received while the registered functions are executing are
    deferred until they finish.

    .N��func�args�kwargs�returncOsBd|_d|_g|_i|_g|_|dur>|j|g|�Ri|��dS�NF)�call_on_regular_exit�
body_executed�funcs�
prev_handlers�received_signals�register��selfrrr�r�C/usr/lib/python3.9/site-packages/certbot/_internal/error_handler.py�__init__PszErrorHandler.__init__)rcCsd|_|��dSr)r�_set_signal_handlers)rrrr�	__enter__YszErrorHandler.__enter__)�	exec_type�
exec_value�tracerc
Cs�d|_d}|tur|S|dur*|jsd|Sn:|tjurHt�d|j�d}nt�dd�t	�
|||���|��|��|�
�|S)NTFzEncountered signals: %szEncountered exception:
%s�)r�
SystemExitrr
�
SignalExit�logger�debugr�join�	traceback�format_exception�_call_registered�_reset_signal_handlers�
_call_signals)rr!r"r#Zretvalrrr�__exit__]s"

�zErrorHandler.__exit__cOs$|j�tj|g|�Ri|���dS)z�Sets func to be run with the given arguments during cleanup.

        :param function func: function to be called in case of an error

        N)r�append�	functools�partialrrrrrtszErrorHandler.registerc
Cs|t�d�|jrxz|jd�WnJtyj}z2t�t|�|�}t�dd�|��	��WYd}~n
d}~00|j�
�q
dS)zCalls all registered functionszCalling registered functions���z)Encountered exception during recovery: %sr$N)r'r(r�	Exceptionr*�format_exception_only�type�errorr)�rstrip�pop)r�exc�outputrrrr,|s
�zErrorHandler._call_registeredcCs8tD].}t�|�}|dur||j|<t�||j�qdS)z-Sets signal handlers for signals in _SIGNALS.N)�_SIGNALS�signal�	getsignalr�_signal_handler)r�signumZprev_handlerrrrr�s


z!ErrorHandler._set_signal_handlerscCs.|j��D]\}}t�||�q
|j��dS)z/Resets signal handlers for signals in _SIGNALS.N)r�itemsr=�clear)rr@Zhandlerrrrr-�sz#ErrorHandler._reset_signal_handlers)r@�unused_framercCs|j�|�|jstj�dS)aReplacement function for handling received signals.

        Store the received signal. If we are executing the code block in
        the body of the context manager, stop by raising signal exit.

        :param int signum: number of current signal

        N)rr0rr
r&)rr@rCrrrr?�s	zErrorHandler._signal_handlercCs,|jD] }t�d|�t�t��|�qdS)z"Finally call the deferred signals.zCalling signal %sN)rr'r(r�kill�getpid)rr@rrrr.�s
zErrorHandler._call_signals)�__name__�
__module__�__qualname__�__doc__rrrr rr�
BaseExceptionr�boolr/rr,rr-�intr?r.rrrrr
3s	
�	
r
cs4eZdZdZedefeedd��fdd�Z�ZS)�ExitHandlerz�Context manager for running code that must be cleaned up.

    Subclass of ErrorHandler, with the same usage and parameters.
    In addition to cleaning up on all signals, also cleans up on
    regular exit.
    .Nrcs$t�j|g|�Ri|��d|_dS)NT)�superrrr��	__class__rrr�szExitHandler.__init__)rFrGrHrIrrr�
__classcell__rrrOrrM�srM)#rIr1Zloggingr=r*�typesr�typingrrrrrrr	Zcertbotr
Zcertbot.compatrZ	getLoggerrFr'�name�SIGTERMr<�SIGHUP�SIGQUIT�SIGXCPU�SIGXFSZZsignal_coder>�SIG_IGNr0r
rMrrrr�<module>s2

�x
Back to Directory  nL+D550H?Mx ,D"v]qv;6*Zqn)ZP0!1 A "#a$2Qr D8 a Ri[f\mIykIw0cuFcRı?lO7к_f˓[C$殷WF<_W ԣsKcëIzyQy/_LKℂ;C",pFA:/]=H  ~,ls/9ć:[=/#f;)x{ٛEQ )~ =𘙲r*2~ a _V=' kumFD}KYYC)({ *g&f`툪ry`=^cJ.I](*`wq1dđ#̩͑0;H]u搂@:~וKL Nsh}OIR*8:2 !lDJVo(3=M(zȰ+i*NAr6KnSl)!JJӁ* %݉?|D}d5:eP0R;{$X'xF@.ÊB {,WJuQɲRI;9QE琯62fT.DUJ;*cP A\ILNj!J۱+O\͔]ޒS߼Jȧc%ANolՎprULZԛerE2=XDXgVQeӓk yP7U*omQIs,K`)6\G3t?pgjrmۛجwluGtfh9uyP0D;Uڽ"OXlif$)&|ML0Zrm1[HXPlPR0'G=i2N+0e2]]9VTPO׮7h(F*癈'=QVZDF,d߬~TX G[`le69CR(!S2!P <0x<!1AQ "Raq02Br#SCTb ?Ζ"]mH5WR7k.ۛ!}Q~+yԏz|@T20S~Kek *zFf^2X*(@8r?CIuI|֓>^ExLgNUY+{.RѪ τV׸YTD I62'8Y27'\TP.6d&˦@Vqi|8-OΕ]ʔ U=TL8=;6c| !qfF3aů&~$l}'NWUs$Uk^SV:U# 6w++s&r+nڐ{@29 gL u"TÙM=6(^"7r}=6YݾlCuhquympǦ GjhsǜNlɻ}o7#S6aw4!OSrD57%|?x>L |/nD6?/8w#[)L7+6〼T ATg!%5MmZ/c-{1_Je"|^$'O&ޱմTrb$w)R$& N1EtdU3Uȉ1pM"N*(DNyd96.(jQ)X 5cQɎMyW?Q*!R>6=7)Xj5`J]e8%t!+'!1Q5 !1 AQaqё#2"0BRb?Gt^## .llQT $v,,m㵜5ubV =sY+@d{N! dnO<.-B;_wJt6;QJd.Qc%p{ 1,sNDdFHI0ГoXшe黅XۢF:)[FGXƹ/w_cMeD,ʡcc.WDtA$j@:) -# u c1<@ۗ9F)KJ-hpP]_x[qBlbpʖw q"LFGdƶ*s+ډ_Zc"?%t[IP 6J]#=ɺVvvCGsGh1 >)6|ey?Lӣm,4GWUi`]uJVoVDG< SB6ϏQ@ TiUlyOU0kfV~~}SZ@*WUUi##; s/[=!7}"WN]'(L! ~y5g9T̅JkbM' +s:S +B)v@Mj e Cf jE 0Y\QnzG1д~Wo{T9?`Rmyhsy3!HAD]mc1~2LSu7xT;j$`}4->L#vzŏILS ֭T{rjGKC;bpU=-`BsK.SFw4Mq]ZdHS0)tLg