fddlZddlmZddlmZmZmZddlmZddlm Z ddlm Z dZ Gd d ejZ eGd d Zd eedefdZdeedefdZy)N) TracebackType)finalOptionalType)events) exceptions)tasks)Timeouttimeout timeout_atc eZdZdZdZdZdZdZy)_StatecreatedactiveexpiringexpiredfinishedN)__name__ __module__ __qualname__CREATEDENTEREDEXPIRINGEXPIREDEXITED'/usr/lib/python3.12/asyncio/timeouts.pyrrsGGHG Frrc eZdZdZdeeddfdZdeefdZdeeddfdZde fdZ de fd Z dd Z d eeed eed eedee fdZddZy)r zAsynchronous context manager for cancelling overdue coroutines. Use `timeout()` or `timeout_at()` rather than instantiating this class directly. whenreturnNcXtj|_d|_d|_||_y)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%nn >B+/  rc|jS)zReturn the current deadline.)r'r(s rr!z Timeout.when.s zzrc|jtjurJ|jtjur t dt d|jj d||_|j|jj|d|_ytj}||jkr!|j|j|_y|j||j|_y)zReschedule the timeout.zTimeout has not been enteredzCannot change state of z TimeoutN)r$rrr RuntimeErrorvaluer'r%cancelrget_running_looptime call_soon _on_timeoutcall_at)r(r!loops r reschedulezTimeout.reschedule2s ;;fnn ,{{fnn,"#ABB)$++*;*;))r$rrr'roundappendjoinr.)r(infor!info_strs r__repr__zTimeout.__repr__Msst ;;&.. (+/::+A5Q'tD KK%v '88D>DKK--.az;;rcJK|jtjur tdt j }| tdtj |_||_|jj|_ |j|j|Sw)Nz Timeout has already been enteredz$Timeout should be used inside a task) r$rrr-r current_taskrr& cancelling _cancellingr6r')r(tasks r __aenter__zTimeout.__aenter__Us} ;;fnn ,AB B!!# <EF Fnn  ::002  # sB!B#exc_typeexc_valexc_tbcK|jtjtjfvsJ|j!|jj d|_|jtjurVtj |_|jj|jkr|tjurt|y|jtjurtj|_ywN)r$rrrr%r/rr&uncancelrGr CancelledError TimeoutErrorr)r(rJrKrLs r __aexit__zTimeout.__aexit__as {{v~~v????  ,  ! ! ( ( *$(D ! ;;&// ) ..DKzz""$(8(88XIbIb=b#/[[FNN * --DKsDDc|jtjusJ|jj tj |_d|_yrN)r$rrr&r/rr%r+s rr3zTimeout._on_timeoutys;{{fnn,,, oo $r)r"r )r"N)rrr__doc__rfloatr)r!r6boolrstrrCrIr BaseExceptionrrRr3rrrr r s Xe_  huoMxM4M.@@<#< 4 ./-('  $ 0%rr delayr"crtj}t||j|zSdS)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)rYr5s rr r s5  " " $D %*;499;& FF FFrr!ct|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 rUr r rrrras (( TYYc%c%c%LG8E?GwG(Xe_r