
    Ki                        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	 ddl
mZ ddlmZ dd	lmZ dd
lmZ ddlmZmZ  G d d      Ze		 d	 	 	 	 	 dd       Z ed      dd       Zy)zADependency resolution: resolving, wrapping, and failure handling.    )annotationsN)AsyncGeneratorCallable)AsyncExitStackasynccontextmanager)	lru_cache)Any   )get_annotation_dependencies)_Depends)get_dependency_parametersget_signaturec                      e Zd ZdZddZy)FailedDependencyz;Placeholder for a dependency that raised during resolution.c                     || _         || _        y N)	parametererror)selfr   r   s      c/home/jay/workspace/scripts/.codegraph-venv/lib/python3.12/site-packages/uncalled_for/resolution.py__init__zFailedDependency.__init__   s    "
    N)r   strr   	ExceptionreturnNone)__name__
__module____qualname____doc__r    r   r   r   r      s
    Er   r   c                 K   |xs i }t         j                  j                  i       }	 t               4 d{   }t         j                  j                  |      }	 i }t        |       }|j                         D ]/  \  }}	||v r	||   ||<   	 |j                  |	       d{   ||<   1 t        |       }|j                         D ]X  \  }}|j                  ||j                  |            }|D ]-  }	|	j                  ||      }|j                  |       d{    / Z | t         j                  j                  |       ddd      d{    t         j                  j                  |       y7 >7 # t        $ r}
t        ||
      ||<   Y d}
~
d}
~
ww xY w7 # t         j                  j                  |       w xY w7 u# 1 d{  7  sw Y   xY w# t         j                  j                  |       w xY ww)am  Resolve all dependencies declared on a function's signature.

    Yields a dict mapping parameter names to resolved values. Dependencies
    are entered as async context managers and cleaned up when the context
    exits.

    Parameters already present in *kwargs* are passed through without
    resolution, allowing callers to override specific dependencies.
    N)r   cachesetr   stackr   itemsenter_async_contextr   r   r   getbind_to_parameterreset)functionkwargsprovidedcache_tokenr%   stack_token	arguments
parametersr   
dependencyr   annotation_dependenciesparameter_namedependenciesvaluebounds                   r   resolved_dependenciesr8      s     |H..$$R(K*!# 	2 	2u"..,,U3K2,.	6x@
-7-=-=-? 
R)Iz H,/7	/B	), R5:5N5N&6 0	),
R +Fh*O'4K4Q4Q4S ?0NL$LL~9VWE&2 ?
 * < <^U S#77>>>??  $$[17	2 	2: 	[);	20 % R/?	5/Q	),R ? $$[17	2 	2 	2 	2: 	[)s   &HG E5G  G0F"E:!E8"E:)A/F"F 
F"&GG GG  H5G 8E::	FFF"FF""!GGG GGGG !G>>Hi  )maxsizec                :    t        t                     }t               }|s|s S t               }|j                  j                         D cg c]  \  }}||vr| }}}|j                  |t        j                  j                        }t        j                         d fd} j                  |_         j                  |_        ||_         j                  j                         D 	
ci c]  \  }	}
|	|vr|	dk7  r|	|
 c}
}	|_        |S c c}}w c c}
}	w )a  Produce a wrapper whose signature hides dependency parameters.

    If *function* has no ``Dependency`` defaults, it is returned unchanged.
    Otherwise an async wrapper is returned that resolves dependencies
    automatically and forwards user-supplied keyword arguments.
    )r1   return_annotationr   c                    K   t        |       4 d {   }i || }r! di | d {   cd d d       d {    S  di |cd d d       d {    S 7 F7 07 "7 # 1 d {  7  sw Y   y xY ww)Nr!   )r8   )r,   resolved
all_kwargsr+   is_asyncs      r   wrapperz%without_dependencies.<locals>.wrapperc   s     (6: 	* 	*h/H//J%3
33	* 	* 	* )j)		* 	* 	* 4	* 	* 	* 	* 	*so   A8AA8A#AA#A8AA8A#	A8A!A8A#A8!A8#A5)A,*A51A8)r,   r	   r   r	   )r$   r   r   r   r1   r&   replaceinspect	Parameteremptyiscoroutinefunctionr   r    __signature____annotations__)r+   dependency_namesr3   original_signaturenamepfiltered_parametersnew_signaturer@   kvr?   s   `          @r   without_dependenciesrP   J   s+    4X>?9(C$;&x0 *44::<D!'' 	
 
 '..&':K:K:Q:Q / M **84H*  ((G&&GO)G ,,224Aq$$h 	
1G N7*s   D0Dr   )r+   Callable[..., Any]r,   zdict[str, Any] | Noner   zAsyncGenerator[dict[str, Any]])r+   rQ   r   rQ   )r    
__future__r   rB   collections.abcr   r   
contextlibr   r   	functoolsr   typingr	   r   
functionalr   introspectionr   r   r   r8   rP   r!   r   r   <module>rY      sz    G "  4 :   4   C   %).* .*!.* $.* .*b 5( (r   