L iI#ddlmZddlZddlZddlmZddlmZddlmZddlmZddlm Z ddlm Z dd lm Z dd lm Z dd lm Z dd lmZdd lmZddlmZddlmZddlmZddlZddlmZddlmZddlmZddlmZedeZededZedeZGdde eZGdd eeej>Z Gd!d"e eZ! d&d#Z"Gd$d%eeZ#y)') annotationsN)Any)AsyncGenerator) AsyncIterator) Awaitable)Callable)ClassVar)Dict) Generator)Generic)NoReturn)Optional)overload)Tuple)TypeVar)exc)util)Literal)Self_T)bound_T_coT)r covariant_PTc eZdZUiZded<dZed dZeddZddZe d ddZ e dd Z ee d dd Z ee d dd Z e d dd Z y)ReversibleProxyzCClassVar[Dict[weakref.ref[Any], weakref.ref[ReversibleProxy[Any]]]]_proxy_objects) __weakref__cyNselftargets a/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/sqlalchemy/ext/asyncio/base.py_assign_proxiedzReversibleProxy._assign_proxied.s36cyr"r#r$s r'r(zReversibleProxy._assign_proxied1s58r)c|otj|tj}tj|t j tj|}|tj |<|Sr")weakrefrefr _target_gced functoolspartialr)r%r& target_ref proxy_refs r'r(zReversibleProxy._assign_proxied4sb  +2;;44,J !!/">"> KI:CO * *: 6 r)Nc<|jj|dyr")rpop)clsr-r2s r'r.zReversibleProxy._target_gcedAs sD)r)c tr"NotImplementedError)r5r& additional_kws r'_regenerate_proxy_for_targetz,ReversibleProxy._regenerate_proxy_for_targetIs "##r)c yr"r#r5r& regenerater9s r'_retrieve_proxy_for_targetz*ReversibleProxy._retrieve_proxy_for_targetOsr)c yr"r#r<s r'r>z*ReversibleProxy._retrieve_proxy_for_targetUsr)c  |jtj|}|}||S|r|j|fi|Sy#t$rY!wxYwr")rr,r-KeyErrorr:)r5r&r=r9r2proxys r'r>z*ReversibleProxy._retrieve_proxy_for_target[sf **7;;v+>?IKE  3333FLmL L   s"A AA)r&rreturnr)r&NonerCrD)r& Optional[_PT]rCrEr")r-zweakref.ref[_PT]r2zOptional[weakref.ref[Self]]rCrD)r&rr9rrCr).)r&rr=z Literal[True]r9rrCr)T)r&rr=boolr9rrCzOptional[Self]) __name__ __module__ __qualname__r__annotations__ __slots__rr( classmethodr.r:r>r#r)r'rr(sT  !I 66 88 26* */*  **$$+.$ $$ 69&3LO -1&*DG -1&*DG r)rceZdZdZej dd dZd dZd dZej d dZ d dZ y)StartableContextr#cKtwr"r7)r% is_ctxmanagers r'startzStartableContext.startqs!##s c>|jjSr")rQ __await__r%s r'rSzStartableContext.__await__uszz|%%''r)cBK|jdd{S7w)NT)rP)rQrTs r' __aenter__zStartableContext.__aenter__xsZZdZ3333s c Kywr"r#)r%type_value tracebacks r' __aexit__zStartableContext.__aexit__{s  scZtjd|jjz)Nz@%s context has not been started and object has not been awaited.) async_excAsyncContextNotStarted __class__rGrTs r'_raise_for_not_startedz'StartableContext._raise_for_not_starteds*.. N~~&& (  r)NFrPrFrCr)rCzGenerator[Any, Any, _T_co])rCr)rXrrYrrZrrCOptional[bool])rCr ) rGrHrIrKabcabstractmethodrQrSrVr[r`r#r)r'rNrNnshI$$(4   !$ 14    r)rNcReZdZUdZded< ddZd d dZ d dZy) GeneratorStartableContextgenzAsyncGenerator[_T_co, Any]ric||i||_yr"rh)r%funcargskwdss r'__init__z"GeneratorStartableContext.__init__s &&r)cK tj|jd{}|s"|jj d{|S7*#t$r t ddwxYw7!w)Nzgenerator didn't yield)ranext_riStopAsyncIteration RuntimeErroraclose)r%rP start_values r'rQzGeneratorStartableContext.startsi C $ DHH 55K((//# # #6! C78d B C $s7A."AAAA. A, A.AA))A.cK|3 tj|jd{td||} |jj |d{td7G#t$rYywxYw7 #t$r}||ucYd}~Sd}~wt$r8}||urYd}~yt |ttfr|j|urYd}~yd}~wt$r}||urYd}~yd}~wwxYww)Nzgenerator didn't stopFz$generator didn't stop after athrow()) rrprirrrqathrow isinstance StopIteration __cause__ BaseException)r%typrYrZrs r'r[z#GeneratorStartableContext.__aexit__s ; <kk$((+++##:;;}! hhooe,,,BEF FY,%  -% (%'' %< u}6H&IJ .  e# sC2"A2A0A2C2B B!B% C20A22 A>;C2=A>>C2B C/ BC/C2 C/!C%C2*$CC2C C/ C*%C2*C//C2N)rk#Callable[..., AsyncIterator[_T_co]]rlzTuple[Any, ...]rmzDict[str, Any]rarb)r{rrYrrZrrCrc)rGrHrIrKrJrnrQr[r#r)r'rgrgs]I ##'1'' ' 2G2G"2G/22G 2Gr)rgcDtjdfd }|S)a=@asyncstartablecontext decorator. the decorated function can be called either as ``async with fn()``, **or** ``await fn()``. This is decidedly different from what ``@contextlib.asynccontextmanager`` supports, and the usage pattern is different as well. Typical usage: .. sourcecode:: text @asyncstartablecontext async def some_async_generator(): try: yield except GeneratorExit: # return value was awaited, no context manager is present # and caller will .close() the resource explicitly pass else: Above, ``GeneratorExit`` is caught if the function were used as an ``await``. In this case, it's essential that the cleanup does **not** occur, so there should not be a ``finally`` block. If ``GeneratorExit`` is not invoked, this means we're in ``__aexit__`` and we were invoked as a context manager, and cleanup should proceed. ct||Sr")rg)rlrmrks r'helperz%asyncstartablecontext..helpers(tT::r))rlrrmrrCz GeneratorStartableContext[_T_co])r/wraps)rkrs` r'asyncstartablecontextrs(J__T;; Mr)cNeZdZdZej ddZddZd dZd dZ y) ProxyComparabler#ctr"r7rTs r'_proxiedzProxyComparable._proxieds !##r)ct|Sr")idrTs r'__hash__zProxyComparable.__hash__ s $xr)cdt||jxr|j|jk(Sr"rwr_rr%others r'__eq__zProxyComparable.__eq__s* udnn - 0 / r)cft||j xs|j|jk7Sr"rrs r'__ne__zProxyComparable.__ne__s-5$..1 1 /}}. r)N)rCr)rCint)rrrCrF) rGrHrIrKrro_non_memoized_propertyrrrrr#r)r'rrs.I ""$#$  r)r)rkr|rCz/Callable[..., GeneratorStartableContext[_T_co]])$ __future__rrdr/typingrrrrrr r r r r rrrrr,rr]r util.typingrrrrrrABCrNrgrrr#r)r'rs# ! " Tsd3e3CgclCL y' 4NG 0 7NGb) -)4)X oc* r)