\d ddlZddlmZddlmZmZmZddlmZddlm Z ddlm Z dZ Gd d ej Z eGd d Zd eedefdZdeedefdZdS)N) TracebackType)finalOptionalType)events) exceptions)tasks)Timeouttimeout timeout_atc"eZdZdZdZdZdZdZdS)_StatecreatedactiveexpiringexpiredfinishedN)__name__ __module__ __qualname__CREATEDENTEREDEXPIRINGEXPIREDEXITED!..\python\lib\asyncio\timeouts.pyrrs'GGHG FFFrrc eZdZdZdeeddfdZdeefdZdeeddfdZde fdZ de fd Z dd Z d eeed eed eedee fdZddZdS)r zAsynchronous context manager for cancelling overdue coroutines. Use `timeout()` or `timeout_at()` rather than instantiating this class directly. whenreturnNcRtj|_d|_d|_||_dS)zSchedule a timeout that will trigger at a given loop time. - If `when` is `None`, the timeout will never trigger. - If `when < loop.time()`, the timeout will trigger on the next iteration of the event loop. N)rr_state_timeout_handler_task_when)selfr!s r__init__zTimeout.__init__!s'n >B+/  rc|jS)zReturn the current deadline.)r'r(s rr!z Timeout.when.s zrc|jtjusJ|jtjurt d|jjd||_|j|j| d|_dStj }|| kr!| |j |_dS|||j |_dS)zReschedule the timeout.zCannot change state of z TimeoutN)r$rrr RuntimeErrorvaluer'r%cancelrget_running_looptime call_soon _on_timeoutcall_at)r(r!loops r reschedulezTimeout.reschedule2s{&.0000 ;fn , ,E$+*;EEE   ,  ! ( ( * * * <$(D ! ! !*,,Dtyy{{""(,t7G(H(H%%%(, T4;K(L(L%%%rc@|jtjtjfvS)z$Is timeout expired during execution?)r$rrrr+s rrzTimeout.expiredHs{v???rcdg}|jtjur6|jt |jdnd}|d|d|}d|jjd|dS)Nzwhen= z )r$rrr'roundappendjoinr.)r(infor!info_strs r__repr__zTimeout.__repr__Lszt ;&. ( (+/:+A5Q'''tD KK ' ' '88D>>;DK-;;;;;;rcKtj|_tj|_|j|_|jtd| |j |S)Nz$Timeout should be used inside a task) rrr$r current_taskr& cancelling _cancellingr-r6r'r+s r __aenter__zTimeout.__aenter__Tsen ')) :0022 : EFF F  ### rexc_typeexc_valexc_tbcK|jtjtjfvsJ|j |jd|_|jtjurJtj|_|j|j kr|tj urt|n$|jtjurtj |_dSN)r$rrrr%r/rr&uncancelrGr CancelledError TimeoutErrorr)r(rIrJrKs r __aexit__zTimeout.__aexit__]s {v~v?????  ,  ! ( ( * * *$(D ! ;&/ ) ) .DKz""$$(888XIb=b=b#/ [FN * * -DKtrc|jtjusJ|jtj|_d|_dSrM)r$rrr&r/rr%r+s rr3zTimeout._on_timeoutusB{fn,,,, o $r)r"r )r"N)rrr__doc__rfloatr)r!r6boolrstrrCrHr BaseExceptionrrQr3rrrr r sD Xe_     huoMxM4MMMM,@@@@@<#<<<<4 ./-('  $ 0%%%%%%rr delayr"cxtj}t|||zndS)a Timeout async context manager. Useful in cases when you want to apply timeout logic around block of code or in cases when asyncio.wait_for is not suitable. For example: >>> async with asyncio.timeout(10): # 10 seconds timeout ... await long_running_task() delay - value in seconds or None to disable timeout logic long_running_task() is interrupted by raising asyncio.CancelledError, the top-most affected timeout() context manager converts CancelledError into TimeoutError. N)rr0r r1)rXr5s rr r }s7  " $ $D %*;499;;&& F FFrr!c t|S)abSchedule the timeout at absolute time. Like timeout() but argument gives absolute time in the same clock system as loop.time(). Please note: it is not POSIX time but a time with undefined starting base, e.g. the time of the system power on. >>> async with asyncio.timeout_at(loop.time() + 10): ... await long_running_task() when - a deadline when timeout occurs or None to disable timeout logic long_running_task() is interrupted by raising asyncio.CancelledError, the top-most affected timeout() context manager converts CancelledError into TimeoutError. )r )r!s rr r s& 4==r)enumtypesrtypingrrrr9rr r __all__Enumrr rTr r rrrr`s@ (((((((((( TY_%_%_%_%_%_%_%_%DG8E?GwGGGG(Xe_r