U
    ui                     @   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Zee eeeehe
f eQf  ejeeehe
f eeehe
f  f dddedfZe<ehejee dgdhdiZeehdjdkdlZd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_paramszForm data requires "python-multipart" to be installed. 
You can install "python-multipart" with: 

pip install python-multipart
zForm 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   T/home/lhs5088/backend/venv/lib/python3.8/site-packages/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rqt||||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	st
|js|jr|jdkr|jjdkr|jst
td|jj dg }t|jtjr|jjrt|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rt
||d}|jtt	jhks|jtt	jhkstd|jj d	| d
|tjjk	r|rt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rt|tr||_|d k	r|jd krt|}tj||d}t|ttttttfr|d kstd||d kst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st%|rt&j'||d}ntj'||d}ntj(||d}d }|d k	r|rt|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}|rt3|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&rt'|j&||dI d H \}}|%| || |j(r| ||j(< |j)rt| t*r| ||j)< n|j+rt| t,r| ||j+< |j-r|d krt. }|||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| rt|dkr| jrd 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	rt|
jd|}|rt
|
}||
jkr|dd}t|
||d}|d k	r||t
|
< |	|pt
|
 qj| D ]b}||	krt|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st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   Z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 }nt	|rt|tjtjfrt
|rt|tstg  tg ttttf f d d fdd}t 4 I d H }|D ]}|||j qW 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 }|rd}	t||||	d\}
}|j	|
i|fS | D ]}dt
|f}	d }|d k	rz|t
|}W n& tk
r   |t|	 Y qY 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}ntdd | j D rtj}n|tdd | j D rtj}n`tdd | j D rtj}nDt|rt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   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