U
    nËj›  ã                   @   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r”d 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   ú?/tmp/pip-unpacked-wheel-yktl02hi/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|ƒ¡s€t t|ƒ¡r„dS tt| j ƒdd ƒ}|d kr¢dS t t|ƒ¡s¾t t|ƒ¡rÂd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|ƒ¡s€t t|ƒ¡r„dS tt| j ƒdd ƒ}|d kr¢dS t t|ƒ¡s¾t t|ƒ¡rÂd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r„dS tt|ƒƒsœtt|ƒƒr dS tt| j ƒdd ƒ}|d kr¾dS tt|ƒƒsÖtt|ƒƒrÚd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   ÚsysZdataclassesr   r   Ú	functoolsr   r   Útypingr   r   r   r	   r
   Zfastapi._compatr   Zfastapi.security.baser   Zfastapi.typesr   Ztyping_extensionsr   Úversion_infor   Zasyncior   r   r   r   r   r   r   Ú<module>   s   
 