U
    nËjþ�  ã                   @   sv  d dl Z 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 d dl	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZ d dlZd dlmZ d dlmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z5 d d	l6m7Z7 d d
l8m9Z9m:Z: d dl;m<Z< d dl=m>Z> d dl?m@Z@ d dlAmBZB d dlCmDZD d dlEmFZFmGZG d dlHmIZI d dlJmKZK d d	lLm7ZM d dlNmOZO d dlPmQZQmRZRmSZSmTZTmUZU d dlVmWZWmXZX d dlYmZZZ d dl[m\Z\ d dl]m^Z^m_Z_m`Z`maZa ddlbmcZc dZddZeddœdd„Zfejgehe<d œd!d"„Zid#ddd$œe<ejeeeD  eeeh  e<d%œd&d'„Zkee ee d(œd)d*„Zle<ee d+œd,d-„Zmed.e
f ejnd/œd0d1„Zoed.e
f ejnd/œd2d3„Zpe
eehe
f e
d4œd5d6„Zqed.e
f e
d/œd7d8„Zrdddd9dd:œehed.e
f eeh eeeh  eeeh  ejee_d; df e<d<œd=d>„Zsehe
e<eej d?œd@dA„ZteG dBdC„ dCƒƒZuehe
e
ejeudDœdEdF„Zvee<ddGœdHdI„Zwe<eeehe
f e
dJœdKdL„ZxeG dMdN„ dNƒƒZyddddddOœeeXe\f e<eeeehe
f eQf  eeM eeZ ee
 eeeDe
f  eejeydPœ
dQdR„Zzee
eehe
f eehd.f ee
ee
 f dSœdTdU„Z{dmeeehe
f eehdf e
dVœdWdX„Z|ee eeehe
f eTeRf eeehe
f ee
 f dYœdZd[„Z}e
ejd\œd]d^„Z~ee ejd(œd_d`„Zee eQeehe
f daœdbdc„Z€ee eeeehe
f eQf  ejeeehe
f eeehe
f  f ddœdedf„Z�e<ehejee dgœdhdi„Z‚eehdjœdkdl„ZƒdS )né    N)ÚAsyncExitStackÚcontextmanager)ÚcopyÚdeepcopy)Ú	dataclass)ÚAnyÚCallableÚ	CoroutineÚDictÚ
ForwardRefÚListÚMappingÚOptionalÚSequenceÚTupleÚTypeÚUnionÚcast)Úparams)ÚPYDANTIC_V2Ú
ModelFieldÚRequiredParamÚ	UndefinedÚ_is_error_wrapperÚ_is_model_classÚcopy_field_infoÚcreate_body_modelÚevaluate_forwardrefÚfield_annotation_is_scalarÚget_annotation_from_field_infoÚget_cached_model_fieldsÚget_missing_field_errorÚis_bytes_fieldÚis_bytes_sequence_fieldÚis_scalar_fieldÚis_scalar_sequence_fieldÚis_sequence_fieldÚ.is_uploadfile_or_nonable_uploadfile_annotationÚ!is_uploadfile_sequence_annotationÚlenient_issubclassÚmay_v1Úsequence_typesÚserialize_sequence_valueÚvalue_is_sequence)Úannotation_is_pydantic_v1)ÚBackgroundTasks)ÚasynccontextmanagerÚcontextmanager_in_threadpool)Ú	Dependant)ÚDependencyScopeError)Úlogger)ÚSecurityScopes)ÚDependencyCacheKey)Úcreate_model_fieldÚget_path_param_names)Ú	BaseModel)Ú	FieldInfo)Úrun_in_threadpool)ÚFormDataÚHeadersÚImmutableMultiDictÚQueryParamsÚ
UploadFile)ÚHTTPConnectionÚRequest)ÚResponse)Ú	WebSocket)Ú	AnnotatedÚLiteralÚget_argsÚ
get_originé   )Útemp_pydantic_v1_paramsz€Form data requires "python-multipart" to be installed. 
You can install "python-multipart" with: 

pip install python-multipart
zéForm data requires "python-multipart" to be installed. It seems you installed "multipart" instead. 
You can remove "multipart" with: 

pip uninstall multipart

And then install "python-multipart" with: 

pip install python-multipart
)Úreturnc                  C   s¾   zddl m}  | dkst‚W nœ ttfk
r¸   zZddlm}  | sFt‚zddlm} |s\t‚W n( tk
r†   t t	¡ t
t	ƒd ‚Y nX W n( tk
r²   t t¡ t
tƒd ‚Y nX Y nX d S )Nr   )Ú__version__z0.0.12)Úparse_options_header)Zpython_multipartrL   ÚAssertionErrorÚImportErrorÚ	multipartZmultipart.multipartrM   r4   ÚerrorÚ!multipart_incorrect_install_errorÚRuntimeErrorÚmultipart_not_installed_error)rL   rM   © rU   ú>/tmp/pip-unpacked-wheel-yktl02hi/fastapi/dependencies/utils.pyÚensure_multipart_is_installeda   s     

rW   )ÚdependsÚpathrK   c                 C   sH   t | jƒstdƒ‚g }t| tjƒr4| jr4| | j¡ t|| j| j	|d�S )Nz;A parameter-less dependency must have a callable dependency)rY   ÚcallÚscopeÚown_oauth_scopes)
ÚcallableÚ
dependencyrN   Ú
isinstancer   ÚSecurityÚscopesÚextendÚget_dependantr[   )rX   rY   r\   rU   rU   rV   Úget_parameterless_sub_dependant|   s    ÿürd   F©Úskip_repeatsÚvisitedÚparent_oauth_scopes)Ú	dependantrf   rg   rh   rK   c                C   s  |d krg }|  | j¡ |pg | jp&g  }t| j ¡ | j ¡ | j ¡ | j ¡ | j	 ¡ | j
| j| j| j| j| j| j| j| j|| j| j| jd�}| jD ]†}|r¦|j|kr¦q’t||||jd�}|j  |¡ |j |j¡ |j |j¡ |j |j¡ |j |j¡ |j	 |j	¡ |j |j¡ q’|S )N)Úpath_paramsÚquery_paramsÚheader_paramsÚcookie_paramsÚbody_paramsÚnamerZ   Úrequest_param_nameÚwebsocket_param_nameÚhttp_connection_param_nameÚresponse_param_nameÚbackground_tasks_param_nameÚsecurity_scopes_param_namer\   rh   Ú	use_cacherY   r[   re   )ÚappendÚ	cache_keyÚoauth_scopesr2   rj   r   rk   rl   rm   rn   ro   rZ   rp   rq   rr   rs   rt   ru   r\   rv   rY   r[   ÚdependenciesÚget_flat_dependantrb   )ri   rf   rg   rh   Zuse_parent_oauth_scopesÚflat_dependantÚsub_dependantZflat_subrU   rU   rV   r{   ‹   sV    ÿî
ür{   )ÚfieldsrK   c                 C   s8   | s| S | d }t | ƒdkr4t|jƒr4t|jƒ}|S | S )Nr   é   )Úlenr   Útype_r    )r~   Úfirst_fieldÚfields_to_extractrU   rU   rV   Ú_get_flat_fields_from_paramsÁ   s    
r„   )ri   rK   c                 C   sD   t | dd�}t|jƒ}t|jƒ}t|jƒ}t|jƒ}|| | | S )NT)rf   )r{   r„   rj   rk   rl   rm   )ri   r|   rj   rk   rl   rm   rU   rU   rV   Úget_flat_paramsË   s    



r…   .)rZ   rK   c                 C   sL   t jdkr>ztj| dd�}W qH tk
r:   t | ¡}Y qHX n
t | ¡}|S )N)é   é
   T)Zeval_str)ÚsysÚversion_infoÚinspectÚ	signatureÚ	NameError)rZ   r‹   rU   rU   rV   Ú_get_signatureÔ   s    

r�   c                    sD   t | ƒ}t | ¡}t|di ƒ‰ ‡ fdd„|j ¡ D ƒ}t |¡}|S )NÚ__globals__c              	      s,   g | ]$}t j|j|j|jt|jˆ ƒd �‘qS ))ro   ÚkindÚdefaultÚ
annotation)rŠ   Ú	Parameterro   r�   r�   Úget_typed_annotationr‘   )Ú.0Úparam©ÚglobalnsrU   rV   Ú
<listcomp>å   s   ú
üz'get_typed_signature.<locals>.<listcomp>)r�   rŠ   ÚunwrapÚgetattrÚ
parametersÚvaluesÚ	Signature)rZ   r‹   Ú	unwrappedZtyped_paramsZtyped_signaturerU   r–   rV   Úget_typed_signatureá   s    

ù	
rŸ   )r‘   r—   rK   c                 C   s2   t | tƒr.t| ƒ} t| ||ƒ} | td ƒkr.d S | S ©N)r_   Ústrr   r   Útype)r‘   r—   rU   rU   rV   r“   ò   s    
r“   c                 C   s>   t | ƒ}t | ¡}|j}|tjjkr(d S t|di ƒ}t||ƒS )NrŽ   )r�   rŠ   r™   Úreturn_annotationr�   Úemptyrš   r“   )rZ   r‹   rž   r‘   r—   rU   rU   rV   Úget_typed_return_annotationû   s    
r¥   T)ro   r\   rh   rv   r[   )ÚfunctionÚrequest)rY   rZ   ro   r\   rh   rv   r[   rK   c              
   C   s�  t ||| ||||d�}|pg |p"g  }t| ƒ}	t|ƒ}
|
j}| ¡ D �]D\}}||	k}t||j|j|d�}|jd k	�r|jj	s‚t
‚|jsŽ|jrÂ|jdkrÂ|jjdkrÂ|js®t
‚td|jj› d�ƒ‚g }t|jtjƒrè|jjrèt|jjƒ}t| |jj	||||jj|jjd�}|j |¡ qDt||j|d��rD|jd ksDt
d	|›�ƒ‚qD|jd k	�sTt
‚t|jjtjt jfƒ�r||j! |j¡ qDt"|j|d
� qD|S )N)rZ   ro   rY   rv   r[   r\   rh   )Ú
param_namer‘   ÚvalueÚis_path_paramr§   r¦   zThe dependency "zS" has a scope of "request", it cannot depend on dependencies with scope "function".)rY   rZ   ro   r\   rh   rv   r[   ©r¨   Útype_annotationri   z0Cannot specify multiple FastAPI annotations for )Úfieldri   )#r2   r8   rŸ   r›   ÚitemsÚanalyze_paramr‘   r�   rX   r^   rN   Úis_gen_callableÚis_async_gen_callableZcomputed_scoper[   rZ   r3   Ú__name__r_   r   r`   ra   Úlistrc   rv   rz   rw   Ú!add_non_field_param_to_dependencyr¬   r­   Ú
field_infoÚBodyrJ   rn   Úadd_param_to_fields)rY   rZ   ro   r\   rh   rv   r[   ri   Zcurrent_scopesZpath_param_namesZendpoint_signatureZsignature_paramsr¨   r•   rª   Zparam_detailsZsub_own_oauth_scopesr}   rU   rU   rV   rc     s†    
ù	üÿÿþ
ý
ÿù	ýÿ 
ÿrc   )r¨   r¬   ri   rK   c                 C   s|   t |tƒr| |_dS t |tƒr(| |_dS t |tƒr<| |_dS t |tƒrP| |_dS t |t	ƒrd| |_
dS t |tƒrx| |_dS d S )NT)r)   rB   rp   rD   rq   rA   rr   rC   rs   ÚStarletteBackgroundTasksrt   r5   ru   r«   rU   rU   rV   r´   T  s&    





r´   c                   @   s0   e Zd ZU eed< eej ed< ee ed< dS )ÚParamDetailsr¬   rX   r­   N)	r²   Ú
__module__Ú__qualname__r   Ú__annotations__r   r   ÚDependsr   rU   rU   rU   rV   r¹   l  s   
r¹   )r¨   r‘   r©   rª   rK   c              	   C   s  d }d }t }t }|tjjk	r$|}|}t|ƒtk�rt|ƒ}|d }dd„ |dd … D ƒ}	dd„ |	D ƒ}
|
rt|
d }nd }t|tt	jfƒröt
||d�}|jtt	jhksÎ|jtt	jhksÎtd|jj› d	| ›d
�ƒ‚|tjjk	rî|rætdƒ‚||_nt|_nt|tjƒ�r|}t|tjƒ�rL|d k�s.td| ›�ƒ‚|d k�sFtd| ›�ƒ‚|}nFt|tt	jfƒ�r’|d k�svtd| ›�ƒ‚|}t�r’t|tƒ�r’||_|d k	�r¾|jd k�r¾t|ƒ}tj||d�}t|ttttttfƒ�r|d k�sîtd|›�ƒ‚|d k�s®td|›�ƒ‚n¦|d k�r®|d k�r®|tjjk	�r.|nt}|�rFtj |d�}nht!|ƒ�sZt"|ƒ�rjtj#||d�}nDt$|d��s t%|ƒ�r�t&j'||d�}ntj'||d�}ntj(||d�}d }|d k	�r|�rðt|tj t&j fƒ�s td|jj› d| ›�ƒ‚n0t|tj)t&j)fƒ�r t*|dd ƒd k�r tj+j,|_-t.||| ƒ}t|tj/t&j/fƒ�rFt0ƒ  |j1�sjt*|dd ƒ�rj|  dd¡}n|j1�pt| }||_1t2| ||j||jtt	jtfk|d�}|�r¼t3|d��stdƒ‚nJt|tj(t&j(fƒ�rt3|ƒ�st4|ƒ�st5|j6ƒ�rt*|ddƒdk�st‚t7|||d�S )Nr   c                 S   s$   g | ]}t |ttjtjfƒr|‘qS rU   )r_   r:   r*   r   r½   ©r”   ÚargrU   rU   rV   r˜   …  s   þz!analyze_param.<locals>.<listcomp>r   c              	   S   s.   g | ]&}t |tjtjtjtjtjfƒr|‘qS rU   )r_   r   ÚParamrJ   r¶   r½   r¾   rU   rU   rV   r˜   Š  s   ûþþéÿÿÿÿ)rµ   r‘   ú`z1` default value cannot be set in `Annotated` for z). Set the default value with `=` instead.z*Path parameters cannot have default valueszGCannot specify `Depends` in `Annotated` and default value together for zaCannot specify a FastAPI annotation in `Annotated` and `Depends` as a default value together for zQCannot specify FastAPI annotations in `Annotated` and default value together for )r^   z"Cannot specify `Depends` for type z+Cannot specify FastAPI annotation for type )r‘   )r‘   r�   zCannot use `z` for path param Úin_Úconvert_underscoresÚ_ú-)ro   r�   r�   ÚaliasÚrequiredrµ   )r­   z1Path params must be of one of the supported typesÚshape)r¬   rX   r­   )8r   rŠ   r�   r¤   rH   rE   rG   r_   r:   r*   r   r�   r   r   rN   Ú	__class__r²   r   r½   r   r‘   r^   r   ÚdataclassesÚreplacer)   rB   rD   rA   rC   r¸   r5   ÚPathr'   r(   ÚFiler   r.   rJ   r¶   ZQueryrÀ   rš   Ú
ParamTypesÚqueryrÃ   r   ÚFormrW   rÇ   r7   r$   r%   r   r�   r¹   )r¨   r‘   r©   rª   rµ   rX   r¬   Zuse_annotationZannotated_argsZfastapi_annotationsZfastapi_specific_annotationsZfastapi_annotationÚdefault_valuer­   Zuse_annotation_from_field_inforÇ   rU   rU   rV   r¯   s  s   
þþþ ÿþýüÿÿÿúþÿÿþ
 ÿ ÿ
 
ÿýÿþ
ý
ÿù	ÿÿþüú
r¯   )r­   ri   rK   c                 C   sŒ   | j }t|dd ƒ}|tjjkr,|j | ¡ n\|tjjkrF|j | ¡ nB|tjj	kr`|j
 | ¡ n(|tjjks|td| j› �ƒ‚|j | ¡ d S )NrÃ   z>non-body parameters must be in path, query, header or cookie: )rµ   rš   r   rÏ   rY   rj   rw   rÐ   rk   Úheaderrl   ÚcookierN   ro   rm   )r­   ri   rµ   Zfield_info_inrU   rU   rV   r·   .  s    
ÿr·   )ri   ÚstackÚ
sub_valuesrK   c                 Ã   sL   | j s
t‚| jr"t| j ƒf |Ž}n| jr<tt| j ƒf |Žƒ}| |¡I d H S r    )rZ   rN   r±   r0   r°   r1   r   Úenter_async_context)ri   rÕ   rÖ   ÚcmrU   rU   rV   Ú_solve_generator>  s    
rÙ   c                   @   sN   e Zd ZU eeef ed< ee ed< ee	 ed< e
ed< eeef ed< dS )ÚSolvedDependencyrœ   ÚerrorsÚbackground_tasksÚresponseÚdependency_cacheN)r²   rº   r»   r
   r¡   r   r¼   r   r   r¸   rC   r6   rU   rU   rU   rV   rÚ   I  s
   
rÚ   )ÚbodyrÜ   rÝ   Údependency_overrides_providerrÞ   )
r§   ri   rß   rÜ   rÝ   rà   rÞ   Úasync_exit_stackÚembed_body_fieldsrK   c        	         Ã   s8  | j  d¡}	t|	tƒstdƒ‚| j  d¡}
t|
tƒs<tdƒ‚i }g }|d kr`tƒ }|jd= d |_|d krli }|jD �]X}t	t
dtf |jƒ|_|j}|}|rÚ|jrÚ|j}t|di ƒ ||¡}|j}t|||j|j|j d�}t| ||||||||d	�	I d H }|j}|j�r| |j¡ qr|j�r6|j|k�r6||j }nl|j�sF|j�rr|	}|j d
k�rZ|
}t|||jd�I d H }n0|j�rŽ|f |jŽI d H }nt|f|jŽI d H }|jd k	�r¸|||j< |j|krr|||j< qrt|j | j ƒ\}}t|j!| j!ƒ\}}t|j"| jƒ\}}t|j#| j$ƒ\}}| %|¡ | %|¡ | %|¡ | %|¡ ||| | | 7 }|j&�rˆt'|j&||d�I d H \}}| %|¡ | |¡ |j(�rš| ||j(< |j)�rºt| t*ƒ�rº| ||j)< n|j+�rØt| t,ƒ�rØ| ||j+< |j-�rú|d k�rðt.ƒ }|||j-< |j/�r|||j/< |j0�r&t1|jd�||j0< t2|||||d�S )NZfastapi_inner_astackz/fastapi_inner_astack not found in request scopeZfastapi_function_astackz2fastapi_function_astack not found in request scopezcontent-length.Údependency_overrides)rY   rZ   ro   rh   r[   )	r§   ri   rß   rÜ   rÝ   rà   rÞ   rá   râ   r¦   )ri   rÕ   rÖ   )Úbody_fieldsÚreceived_bodyrâ   )ra   )rœ   rÛ   rÜ   rÝ   rÞ   )3r[   Úgetr_   r   rN   rC   ÚheadersÚstatus_coderz   r   r   r   rZ   rã   rš   rY   rc   ro   ry   Úsolve_dependenciesrÜ   rÛ   rb   rv   rx   r°   r±   rÙ   rœ   Zis_coroutine_callabler;   Úrequest_params_to_argsrj   rk   rl   rm   ÚcookiesÚupdatern   Úrequest_body_to_argsrr   rp   rB   rq   rD   rt   r/   rs   ru   r5   rÚ   )r§   ri   rß   rÜ   rÝ   rà   rÞ   rá   râ   Zrequest_astackZfunction_astackrœ   rÛ   r}   rZ   Zuse_sub_dependantZoriginal_callZuse_pathZsolved_resultZsolvedZ
use_astackZpath_valuesZpath_errorsZquery_valuesZquery_errorsÚheader_valuesZheader_errorsZcookie_valuesZcookie_errorsZbody_valuesZbody_errorsrU   rU   rV   ré   R  s   ÿÿÿþ  ÿ þû÷ÿÿý

 ÿ ÿ ÿ ÿ



ý
ý






ÿûré   )r­   r©   rœ   ÚlocrK   c                 C   s~   |d kr,| j rd t|d�gfS t| jƒg fS | j|||d�\}}t|ƒrRd |gfS t|tƒrrtj	|dd�}d |fS |g fS d S )N)rï   rU   )rÛ   Z
loc_prefix)
rÈ   r!   r   r�   Úvalidater   r_   r³   r*   Z_regenerate_error_with_loc)r­   r©   rœ   rï   Úv_Úerrors_Z
new_errorsrU   rU   rV   Ú _validate_value_with_model_fieldÞ  s    

ró   )r­   rœ   rÇ   rK   c                 C   s”   |p
t | ƒ}t| ƒr.t|ttfƒr.| |¡}n| |d ¡}|d ks|t| jtj	t
j	fƒrht|tƒrh|dks|t| ƒr�t|ƒdkr�| jr†d S t| jƒS |S )NÚ r   )Úget_validation_aliasr&   r_   r>   r=   Úgetlistræ   rµ   r   rÑ   rJ   r¡   r€   rÈ   r   r�   )r­   rœ   rÇ   r©   rU   rU   rV   Ú_get_multidict_valueð  s(    ÿýüûù
ù	
r÷   )r~   Úreceived_paramsrK   c                 C   s"  i }g }| s||fS | d }| }d}d}t | ƒdkr\t|jtƒr\t|jƒ}d}t|jddƒ}i }tƒ }	|D ]v}
d }t|t	ƒr¬t|
jd|ƒ}|r¬t
|
ƒ}||
jkr¬| dd¡}t|
||d�}|d k	rÎ||t
|
ƒ< |	 |pÜt
|
ƒ¡ qj| ¡ D ]b}||	krêt|d	ƒ�r>| |¡}t|tƒ�r4t |ƒdk�r4|d ||< n|||< qê| |¡||< qê|�r¢|j}t|tjtjfƒ�svtd
ƒ‚|jjf}t||||d�\}}|j|i|fS | D ]r}
t|
|ƒ}|
j}t|tjtjfƒ�sÖtd
ƒ‚|jjt
|
ƒf}t|
|||d�\}}|�r| |¡ n
|||
j< �q¦||fS )Nr   FTr   rÄ   rÅ   rÆ   )rÇ   rö   z"Params must be subclasses of Param©r­   r©   rœ   rï   )r€   r)   r�   r9   r    rš   rµ   Úsetr_   r=   rõ   ro   rÌ   r÷   ÚaddÚkeysÚhasattrrö   r³   ræ   r   rÀ   rJ   rN   rÃ   r©   ró   rb   )r~   rø   rœ   rÛ   r‚   rƒ   Úsingle_not_embedded_fieldZdefault_convert_underscoresZparams_to_processZprocessed_keysr­   rÇ   rÄ   r©   Úkeyrµ   rï   rñ   rò   rU   rU   rV   rê     s�    
  ÿ
  ÿ


ÿ
   ÿ

ÿ   ÿ
rê   )Ú
field_typerK   c                 C   sL   ddl m} t| ƒ}|tk	r(||k	r(dS t| ƒ}|D ]}t|ƒs4 dS q4dS )zJCheck if field type is a Union where all members are BaseModel subclasses.r   )Ú	UnionTypeFT)Úfastapi.typesr  rH   r   rG   r   )r   r  ÚoriginZ
union_argsr¿   rU   rU   rV   Úis_union_of_base_models[  s    r  c                 C   sp   | sdS dd„ | D ƒ}t |ƒdkr&dS | d }t|jdd ƒr@dS t|jtjtjfƒrlt|jƒslt	|jƒsldS dS )NFc                 S   s   h | ]
}|j ’qS rU   )ro   ©r”   r­   rU   rU   rV   Ú	<setcomp>s  s     z,_should_embed_body_fields.<locals>.<setcomp>r   Tr   Úembed)
r€   rš   rµ   r_   r   rÑ   rJ   r   r�   r  )r~   Zbody_param_names_setr‚   rU   rU   rV   Ú_should_embed_body_fieldsn  s     ÿþýr  )rä   rå   rK   c                 ƒ   s`  i }| D ]ü}t ||ƒ}|j}t|tjtjfƒrPt|ƒrPt|tƒrP| ¡ I d H }n t	|ƒrðt|tjtjfƒrðt
|ƒrðt|tƒs€t‚g ‰ tg ttttf f d dœ‡ fdd„}t ¡ 4 I d H š}|D ]}| ||j¡ qÀW 5 Q I d H R X t|ˆ d�}|d k	r||t|ƒ< qdd„ | D ƒ}	| ¡ D ]>}
|
|	k�r| |
¡}t|ƒdk�rP|d ||
< n|||
< �q|S )	N)ÚfnrK   c                 “   s   | ƒ I d H }ˆ   |¡ d S r    )rw   )r	  Úresult©ÚresultsrU   rV   Ú
process_fnž  s    z&_extract_form_body.<locals>.process_fn)r­   r©   c                 S   s   h | ]}t |ƒ’qS rU   )rõ   r  rU   rU   rV   r  ª  s     z%_extract_form_body.<locals>.<setcomp>r   r   )r÷   rµ   r_   r   rÎ   rJ   r"   r@   Úreadr#   r-   r+   rN   r   r	   r   ÚanyioZcreate_task_groupZ
start_soonr,   rõ   rü   rö   r€   )rä   rå   rœ   r­   r©   rµ   r  ÚtgZ	sub_valueZfield_aliasesrÿ   Zparam_valuesrU   r  rV   Ú_extract_form_body†  sH    
ÿþýÿþýþ 

r  )rä   rå   râ   rK   c              	   Ã   s0  i }g }| st dƒ‚t| ƒdko$| }| d }|}| }|rXt|jƒrXt|tƒrXt|jƒ}t|tƒrrt||ƒI d H }|rœd}	t||||	d�\}
}|j	|
i|fS | D ]†}dt
|ƒf}	d }|d k	röz| t
|ƒ¡}W n& tk
rô   | t|	ƒ¡ Y q Y nX t||||	d�\}
}|�r| |¡ q |
||j	< q ||fS )Nz3request_body_to_args() should be called with fieldsr   r   )rß   rù   rß   )rN   r€   r   r�   r_   r<   r    r  ró   ro   rõ   ræ   ÚAttributeErrorrw   r!   rb   )rä   rå   râ   rœ   rÛ   rþ   r‚   Zbody_to_processrƒ   rï   rñ   rò   r­   r©   rU   rU   rV   rí   µ  sX    ÿþý

   ÿ

   ÿ
rí   )r|   ro   râ   rK   c                 C   s,  | j s
dS | j d }|s|S d| }t| j |d�}tdd„ | j D ƒƒ}|ddœ}|s\d|d	< td
d„ | j D ƒƒrxtj}n˜tdd„ | j D ƒƒr”tj}n|tdd„ | j D ƒƒr°tj}n`tdd„ | j D ƒƒrÌtj}nDt|ƒrÜtj}ntj}dd„ | j D ƒ}	t	t
|	ƒƒdk�r|	d |d< td||d|f |Žd�}
|
S )a—  
    Get a ModelField representing the request body for a path operation, combining
    all body parameters into a single field if necessary.

    Used to check if it's form data (with `isinstance(body_field, params.Form)`)
    or JSON and to generate the JSON Schema for a request body.

    This is **not** used to validate/parse the request body, that's done with each
    individual body parameter.
    Nr   ZBody_)r~   Ú
model_namec                 s   s   | ]}|j rd V  qdS )TN)rÈ   ©r”   ÚfrU   rU   rV   Ú	<genexpr>ý  s      z!get_body_field.<locals>.<genexpr>rß   )r‘   rÇ   r�   c                 s   s   | ]}t |jtjƒV  qd S r    )r_   rµ   r   rÎ   r  rU   rU   rV   r    s     c                 s   s   | ]}t |jtjƒV  qd S r    )r_   rµ   rJ   rÎ   r  rU   rU   rV   r    s   ÿc                 s   s   | ]}t |jtjƒV  qd S r    )r_   rµ   r   rÑ   r  rU   rU   rV   r    s     c                 s   s   | ]}t |jtjƒV  qd S r    )r_   rµ   rJ   rÑ   r  rU   rU   rV   r    s   ÿc                 S   s(   g | ] }t |jtjtjfƒr|jj‘qS rU   )r_   rµ   r   r¶   rJ   Ú
media_typer  rU   rU   rV   r˜     s   þz"get_body_field.<locals>.<listcomp>r   r  )ro   r�   rÈ   rÇ   rµ   )rn   r   Úanyr   rÎ   rJ   rÑ   r.   r¶   r€   rú   r7   )r|   ro   râ   Zfirst_paramr  Z	BodyModelrÈ   ZBodyFieldInfo_kwargsZBodyFieldInfoZbody_param_media_typesZfinal_fieldrU   rU   rV   Úget_body_fieldç  sX    
 ÿþþþþûr  )r­   rK   c                 C   s   t | dd ƒ}|p| jS )NZvalidation_alias)rš   rÇ   )r­   ÚvarU   rU   rV   rõ   )  s    rõ   )N)„rË   rŠ   rˆ   Ú
contextlibr   r   r   r   r   Útypingr   r   r	   r
   r   r   r   r   r   r   r   r   r   r  Zfastapir   Zfastapi._compatr   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   Zfastapi._compat.sharedr.   Zfastapi.backgroundr/   Zfastapi.concurrencyr0   r1   Zfastapi.dependencies.modelsr2   Zfastapi.exceptionsr3   Zfastapi.loggerr4   Zfastapi.security.oauth2r5   r  r6   Zfastapi.utilsr7   r8   Zpydanticr9   Zpydantic.fieldsr:   Zstarlette.backgroundr¸   Zstarlette.concurrencyr;   Zstarlette.datastructuresr<   r=   r>   r?   r@   Zstarlette.requestsrA   rB   Zstarlette.responsesrC   Zstarlette.websocketsrD   Ztyping_extensionsrE   rF   rG   rH   rô   rJ   rT   rR   rW   r½   r¡   rd   Úboolr{   r„   r…   r�   r�   rŸ   r“   r¥   rc   r´   r¹   r¯   r·   rÙ   rÚ   ré   ró   r÷   rê   r  r  r  rí   r  rõ   rU   rU   rU   rV   Ú<module>   s  <lÿÿ
û

ú6
		ø


÷N  þú <  
þø
ó   
 
þ ÿ 
 
þýS
ý0ü3  þB