
    Ki                    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     c/home/jay/workspace/scripts/.codegraph-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29===	#9:&&y11  +z)Y/OilI6669%% > 7s"   %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=   sl      

 $&	.x8
%/%5%5%7 	O!Iz).)B)B:)N#NIi 	O  $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24<<@@	 DLL-9-	#::5)LL,dll ALs$   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==Q2RE/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     8G$%%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CLYq\	215	58STU8V	VV 
&JqM &8!$Q' !H 
 M 
 M	 H 
 H	 ; 
 ;	 0 
 0&r   