Ë
    ÅÏÉiÌ  ã                  óJ  — d Z ddlmZ ddlZddlmZmZ ddlmZm	Z	m
Z
 ddlmZ ddlmZmZmZmZmZ dd	lmZ dd
lmZ  ed«      Zedeee   z  e	e   z  ee   z  f   Z G d„ dee   «      Z G d„ dee   «      Zedd„«       Zedd„«       Zedd„«       Zedd„«       Zdd„Zy)z6Factory-based dependencies: Depends and its internals.é    )ÚannotationsN)Ú	AwaitableÚCallable)ÚAbstractAsyncContextManagerÚAbstractContextManagerÚAsyncExitStack)Ú
ContextVar)ÚAnyÚClassVarÚTypeVarÚcastÚoverloadé   )Ú
Dependency)Úget_dependency_parametersÚR.c                  ó8   — e Zd ZU dZded<   dd„Z	 	 	 	 	 	 dd„Zy)	Ú_FunctionalDependencyz3Base for dependencies that wrap a factory function.úDependencyFactory[R]Úfactoryc                ó   — || _         y ©N©r   )Úselfr   s     úg/Users/bowang/.openclaw/workspace/ChatDev/.venv/lib/python3.12/site-packages/uncalled_for/functional.pyÚ__init__z_FunctionalDependency.__init__   s	   € Øˆó    c              ƒ  óN  K  — t        |t        «      r|j                  |«      ƒ d {  –—† S t        |t        «      r|j	                  |«      S t        j                  |«      st        |t        «      rt        t        t           |«      ƒ d {  –—† S t        t        |«      S 7 Œy7 Œ­wr   )
Ú
isinstancer   Úenter_async_contextr   Úenter_contextÚinspectÚiscoroutiner   r   r   )r   ÚstackÚ	raw_values      r   Ú_resolve_factory_valuez,_FunctionalDependency._resolve_factory_value!   s†   è ø€ ô iÔ!<Ô=Ø×2Ñ2°9Ó=×=Ð=Ü˜	Ô#9Ô:Ø×&Ñ& yÓ1Ð1Ü× Ñ  Ô+¬z¸)ÄYÔ/OÜœi¬™l¨IÓ6×6Ð6äœ˜9Ó%Ð%ð >øð 7ús"   ‚%B%§B!¨A$B%ÂB#ÂB%Â#B%N)r   r   ÚreturnÚNone)r$   r   r%   zMR | Awaitable[R] | AbstractContextManager[R] | AbstractAsyncContextManager[R]r'   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r   r&   © r   r   r   r      s1   … Ù=à!Ó!óð&àð&ð-ð	&ð 
ô&r   r   c                  ó^   — e Zd ZU dZ ed«      Zded<    ed«      Zded<   	 	 	 	 dd„Zdd	„Z	y
)Ú_Dependsz5Call-scoped dependency, resolved fresh for each call.Úuncalled_for_cachez7ClassVar[ContextVar[dict[DependencyFactory[Any], Any]]]ÚcacheÚuncalled_for_stackz$ClassVar[ContextVar[AsyncExitStack]]r$   c              ƒ  óÈ   K  — | j                   j                  «       }i }t        |«      }|j                  «       D ]!  \  }}|j	                  |«      ƒ d {  –—† ||<   Œ# |S 7 Œ­wr   )r$   Úgetr   Úitemsr    )r   Úfunctionr$   Ú	argumentsÚ
parametersÚ	parameterÚ
dependencys          r   Ú_resolve_parametersz_Depends._resolve_parameters=   se   è ø€ ð —
‘
—‘Ó ˆØ$&ˆ	Ü.¨xÓ8ˆ
à%/×%5Ñ%5Ö%7Ñ!ˆIzØ).×)BÑ)BÀ:Ó)N×#NˆIiÒ ð &8ð Ðð $Oús   ‚AA"ÁA ÁA"c              ƒ  ót  K  — | j                   j                  «       }| j                  |v r|| j                     S | j                  j                  «       }| j	                  | j                  «      ƒ d {  –—† } | j                  di |¤Ž}| j                  ||«      ƒ d {  –—† }||| j                  <   |S 7 ŒA7 Œ­w)Nr.   )r2   r5   r   r$   r<   r&   )r   r2   r$   r8   r%   Úresolved_values         r   Ú
__aenter__z_Depends.__aenter__J   sž   è ø€ Ø—
‘
—‘Ó ˆà<‰<˜5Ñ Ø˜Ÿ™Ñ&Ð&à—
‘
—‘Ó ˆØ×2Ñ2°4·<±<Ó@×@ˆ	Ø D—L‘LÑ- 9Ñ-ˆ	Ø#×:Ñ:¸5À)ÓL×Lˆà,ˆˆdl‰lÑØÐð AøàLús$   ‚A0B8Á2B4Á3+B8ÂB6ÂB8Â6B8N)r7   zCallable[..., Any]r'   zdict[str, Any])r'   r   )
r)   r*   r+   r,   r	   r2   r-   r$   r<   r?   r.   r   r   r0   r0   5   sJ   … Ù?áEOØóF€EÐBó ñ 3=Ð=QÓ2R€EÐ/ÓRðà$ðð 
óôr   r0   c                 ó   — y r   r.   r   s    r   ÚDependsrA   Y   s   € ØJMr   c                 ó   — y r   r.   r   s    r   rA   rA   [   s   € ØEHr   c                 ó   — y r   r.   r   s    r   rA   rA   ]   s   € Ø8;r   c                 ó   — y r   r.   r   s    r   rA   rA   _   s   € Ø-0r   c                ó4   — t        t        t        | «      «      S )a‚  Declare a dependency on a factory function.

    The factory is called once per resolution scope. It may be:

    - A sync function returning a value
    - An async function returning a value
    - A sync generator (context manager) yielding a value
    - An async generator (async context manager) yielding a value

    Context managers get proper enter/exit lifecycle management.
    )r   r   r0   r   s    r   rA   rA   a   s   € ô ””8˜GÓ$Ó%Ð%r   )r   z-Callable[..., AbstractAsyncContextManager[R]]r'   r   )r   z(Callable[..., AbstractContextManager[R]]r'   r   )r   zCallable[..., Awaitable[R]]r'   r   )r   zCallable[..., R]r'   r   )r   r   r'   r   )r,   Ú
__future__r   r"   Úcollections.abcr   r   Ú
contextlibr   r   r   Úcontextvarsr	   Útypingr
   r   r   r   r   Úbaser   Úintrospectionr   r   ÚDependencyFactoryr   r0   rA   r.   r   r   Ú<module>rN      sÊ   ðÙ <å "ã ß /÷ñ õ
 #ß 9Õ 9å Ý 4áˆCƒL€àØˆˆYq‰\Ñ	Ð2°1Ñ5Ñ	5Ð8SÐTUÑ8VÑ	VÐVñÐ ô
&˜J q™Mô &ô8!Ð$ QÑ'ô !ðH 
Ú Mó 
Ø MØ	Ú Hó 
Ø HØ	Ú ;ó 
Ø ;Ø	Ú 0ó 
Ø 0ô&r   