zmc
2023-08-08 e792e9a60d958b93aef96050644f369feb25d61b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
U
¸ý°dN$ã@sŠddlmZddlZddlZddlmZddlmZddlmZddlmZddlm    Z    ddlm
Z
dd    lm Z dd
lm Z dd lm Z dd lmZdd lmZddlmZddlmZddlmZddlZddlmZddlmZddlmZddlmZededZededdZededZGdd„de eƒZGdd „d eeejƒZ Gd!d"„d"e eƒZ!d#d$d%œd&d'„Z"Gd(d)„d)eeƒZ#dS)*é)Ú 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@sÒeZdZUiZded<dZedddœdd„ƒZedddœd    d„ƒZd
d
dœd d„Zedd dddœdd„ƒZ    edddœdd„ƒZ
eed ddddœdd„ƒƒZ eed!ddddœdd„ƒƒZ ed"ddddœdd„ƒZ d S)#ÚReversibleProxyzCClassVar[Dict[weakref.ref[Any], weakref.ref[ReversibleProxy[Any]]]]Ú_proxy_objects)Ú __weakref__r)ÚtargetÚreturncCsdS©N©©Úselfrr"r"úRd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\sqlalchemy/ext/asyncio/base.pyÚ_assign_proxied.szReversibleProxy._assign_proxiedÚNonecCsdSr!r"r#r"r"r%r&2sz Optional[_PT]cCs:|dk    r6t |tj¡}t |t tj|¡¡}|tj|<|Sr!)ÚweakrefÚrefrÚ _target_gcedÚ    functoolsÚpartialr)r$rZ
target_refÚ    proxy_refr"r"r%r&6sÿÿþ
Nzweakref.ref[_PT]zOptional[weakref.ref[Self]])r)r-r cCs|j |d¡dSr!)rÚpop)Úclsr)r-r"r"r%r*EszReversibleProxy._target_gcedrcCs
tƒ‚dSr!©ÚNotImplementedError)r/rr"r"r%Ú_regenerate_proxy_for_targetMsz,ReversibleProxy._regenerate_proxy_for_target.z Literal[True])rÚ
regenerater cCsdSr!r"©r/rr3r"r"r%Ú_retrieve_proxy_for_targetQsz*ReversibleProxy._retrieve_proxy_for_targetTÚboolzOptional[Self]cCsdSr!r"r4r"r"r%r5ZscCsRz|jt |¡}Wntk
r(YnX|ƒ}|dk    r<|S|rJ| |¡SdSdSr!)rr(r)ÚKeyErrorr2)r/rr3r-Úproxyr"r"r%r5as
)N).)T)T) Ú__name__Ú
__module__Ú __qualname__rÚ__annotations__Ú    __slots__rr&Ú classmethodr*r2r5r"r"r"r%r(s0
þ
ýýÿÿrc@sleZdZdZejddddœdd„ƒZdd    œd
d „Zdd    œd d „Zejdddddœdd„ƒZ    dd    œdd„Z
dS)ÚStartableContextr"Fr6r©Ú is_ctxmanagerr cÃs
tƒ‚dSr!r0)r$rAr"r"r%ÚstartwszStartableContext.startzGenerator[Any, Any, _T_co]©r cCs | ¡ ¡Sr!)rBÚ    __await__©r$r"r"r%rD{szStartableContext.__await__cÃs|jddIdHS)NT)rA)rBrEr"r"r%Ú
__aenter__~szStartableContext.__aenter__rúOptional[bool])Útype_ÚvalueÚ    tracebackr cÃsdSr!r")r$rHrIrJr"r"r%Ú    __aexit__szStartableContext.__aexit__r cCst d|jj¡‚dS)Nz@%s context has not been started and object has not been awaited.)Ú    async_excZAsyncContextNotStartedÚ    __class__r9rEr"r"r%Ú_raise_for_not_started‡s
ÿÿz'StartableContext._raise_for_not_startedN)F) r9r:r;r=ÚabcÚabstractmethodrBrDrFrKrNr"r"r"r%r?tsr?c@sReZdZUdZded<ddddœdd    „Zdd d d œdd„Zdddddœdd„ZdS)ÚGeneratorStartableContext©ÚgenzAsyncGenerator[_T_co, Any]rSú#Callable[..., AsyncIterator[_T_co]]zTuple[Any, ...]zDict[str, Any])ÚfuncÚargsÚkwdscCs|||Ž|_dSr!rR)r$rUrVrWr"r"r%Ú__init__“sz"GeneratorStartableContext.__init__Fr6rr@cÃsNzt |j¡IdH}Wntk
r4tdƒd‚YnX|sJ|j ¡IdH|S)Nzgenerator didn't yield)rÚanext_rSÚStopAsyncIterationÚ RuntimeErrorÚaclose)r$rAZ start_valuer"r"r%rB›szGeneratorStartableContext.startrrG)ÚtyprIrJr c
Ãs.|dkr@zt |j¡IdHWntk
r4YdSXtdƒ‚nê|dkrN|ƒ}z|j |||¡IdHWn¸tk
r–}z||k    WY¢Sd}~XYnŒtk
rì}z:||kr¸WY¢,dSt|ttfƒrÚ|j|krÚWY¢
dS‚W5d}~XYn6t    k
r }z||k    r
‚WY¢dSd}~XYnXtdƒ‚dS)NFzgenerator didn't stopz$generator didn't stop after athrow())
rrYrSrZr[ÚathrowÚ
isinstanceÚ StopIterationÚ    __cause__Ú BaseException)r$r]rIrJrr"r"r%rKªs4
 
     ÿþ
 
z#GeneratorStartableContext.__aexit__N)F)r9r:r;r=r<rXrBrKr"r"r"r%rQŽs
 
rQrTz/Callable[..., GeneratorStartableContext[_T_co]])rUr cs$t ˆ¡ddddœ‡fdd„ ƒ}|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::
 
        @asyncstartablecontext
        async def some_async_generator(<arguments>):
            <setup>
            try:
                yield <value>
            except GeneratorExit:
                # return value was awaited, no context manager is present
                # and caller will .close() the resource explicitly
                pass
            else:
                <context manager cleanup>
 
 
    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.
 
 
    rz GeneratorStartableContext[_T_co])rVrWr cs tˆ||ƒSr!)rQ)rVrW©rUr"r%Úhelpersz%asyncstartablecontext.<locals>.helper)r+Úwraps)rUrdr"rcr%Úasyncstartablecontextßs#rfc@sReZdZdZejddœdd„ƒZddœdd„Zd    d
d œd d „Zd    d
d œdd„Z    dS)ÚProxyComparabler"rrCcCs
tƒ‚dSr!r0rEr"r"r%Ú_proxied szProxyComparable._proxiedÚintcCst|ƒSr!)ÚidrEr"r"r%Ú__hash__szProxyComparable.__hash__rr6)Úotherr cCst||jƒo|j|jkSr!©r_rMrh©r$rlr"r"r%Ú__eq__s 
þzProxyComparable.__eq__cCst||jƒ p|j|jkSr!rmrnr"r"r%Ú__ne__s
þzProxyComparable.__ne__N)
r9r:r;r=rZro_non_memoized_propertyrhrkrorpr"r"r"r%rg    s rg)$Ú
__future__rrOr+Útypingrrrrrrr    r
r r r rrrr(ÚrrLrZ util.typingrrrrrrÚABCr?rQrfrgr"r"r"r%Ú<module>s:                     LQ*