U
    ui                     @   s   d dl Z d dlZd dlmZmZ d dlmZ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 d dlmZ d dlmZ ejd	krd d
l mZ nd d
lmZ ee
de	f  e	dddZe
de	f e
de	f dddZeG dd dZdS )    N)	dataclassfield)cached_propertypartial)AnyCallableListOptionalUnion)
ModelField)SecurityBase)DependencyCacheKey)Literal)      )iscoroutinefunction.)callreturnc                 C   s   | d kr| S t t| }|S N)inspectunwrap
_impartial)r   	unwrapped r   U/home/lhs5088/backend/venv/lib/python3.8/site-packages/fastapi/dependencies/models.py_unwrapped_call   s    r   )funcr   c                 C   s   t | tr| j} q | S r   )
isinstancer   r   )r   r   r   r   r      s    
r   c                   @   s:  e Zd ZU eedZee ed< eedZ	ee ed< eedZ
ee ed< eedZee ed< eedZee ed< eedZed  ed< dZee ed	< dZeed
ef  ed< dZee ed< dZee ed< dZee ed< dZee ed< dZee ed< dZee ed< dZeee  ed< dZeee  ed< dZeed< dZee ed< dZe e!d df ed< e"ee dddZ#e"e$dddZ%e"edddZ&e"edd d!Z'e"e(dd"d#Z)e"ed  dd$d%Z*e"edd&d'Z+e"edd(d)Z,e"edd*d+Z-e"e edf dd,d-Z.dS ).	Dependant)default_factorypath_paramsquery_paramsheader_paramscookie_paramsbody_paramsdependenciesNname.r   request_param_namewebsocket_param_namehttp_connection_param_nameresponse_param_namebackground_tasks_param_namesecurity_scopes_param_nameown_oauth_scopesparent_oauth_scopesT	use_cachepath)functionrequestscope)r   c                 C   s:   | j r| j  ng }| jpg D ]}||kr|| q|S r   )r.   copyr-   append)selfZscopesr3   r   r   r   oauth_scopes5   s
    zDependant.oauth_scopesc                 C   s2   | j rttt| jpg nd}| j|| jp.dfS )Nr    )_uses_scopestuplesortedsetr7   r   computed_scope)r6   Zscopes_for_cacher   r   r   	cache_key>   s    zDependant.cache_keyc                 C   s>   | j r
dS | jd k	rdS | jr"dS | jD ]}|jr( dS q(dS )NTF)r-   r,   _is_security_schemer%   r9   )r6   Zsub_depr   r   r   r9   I   s    

zDependant._uses_scopesc                 C   s"   | j d krdS t| j }t|tS )NF)r   r   r   r   r6   r   r   r   r   r?   V   s    

zDependant._is_security_schemec                 C   s   t | j}t|tst|S r   )r   r   r   r   AssertionErrorr@   r   r   r   _security_scheme^   s    
zDependant._security_schemec                 C   s   dd | j D }|S )Nc                 S   s   g | ]}|j r|qS r   )r?   ).0depr   r   r   
<listcomp>f   s      z4Dependant._security_dependencies.<locals>.<listcomp>)r%   )r6   Zsecurity_depsr   r   r   _security_dependenciesd   s    z Dependant._security_dependenciesc                 C   s   | j d krdS tt| j s.tt| j r2dS tt| j rFdS tt| j dd }|d krddS tt|stt|rdS tt| j dd }|d krdS tt|stt|rdS dS NFT__call__)r   r   isgeneratorfunctionr   r   isclassgetattrr6   Zdunder_callZdunder_unwrapped_callr   r   r   is_gen_callablei   s:    
zDependant.is_gen_callablec                 C   s   | j d krdS tt| j s.tt| j r2dS tt| j rFdS tt| j dd }|d krddS tt|stt|rdS tt| j dd }|d krdS tt|stt|rdS dS rG   )r   r   isasyncgenfunctionr   r   rJ   rK   rL   r   r   r   is_async_gen_callable   s:    
zDependant.is_async_gen_callablec                 C   s   | j d krdS tt| j r0tt| j r0dS tt| j rRtt| j rRdS tt| j rfdS tt| j dd }|d krdS tt|stt|rdS tt| j dd }|d krdS tt|stt|rdS dS rG   )r   r   	isroutiner   r   r   rJ   rK   rL   r   r   r   is_coroutine_callable   s:    

zDependant.is_coroutine_callablec                 C   s    | j r| j S | js| jrdS d S )Nr2   )r3   rM   rO   )r6   r   r   r   r=      s
    zDependant.computed_scope)/__name__
__module____qualname__r   listr    r   r   __annotations__r!   r"   r#   r$   r%   r&   r	   strr   r   r   r'   r(   r)   r*   r+   r,   r-   r.   r/   boolr0   r3   r
   r   r   r7   r   r>   r9   r?   r   rB   rF   rM   rO   rQ   r=   r   r   r   r   r      sN   

r   )r   sysdataclassesr   r   	functoolsr   r   typingr   r   r   r	   r
   Zfastapi._compatr   Zfastapi.security.baser   Zfastapi.typesr   typing_extensionsr   version_infor   Zasyncior   r   r   r   r   r   r   <module>   s   
 