o
     d}l                     @   s  d dl Z d dlZd dl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 d dlmZmZ d dlmZ d d	l m!Z! d d
l"m#Z#m$Z$ d dl%m&Z& d dl'm(Z(m)Z) d dl*m+Z+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z< d dl=m>Z> d dl?m@Z@ d dlAmBZB d dlCmDZD d dlEmFZF d dlGmHZHmIZImJZJmKZK d dlLmMZMmNZN d dlOmPZP d dlQmRZR e3e5e2e7e4e8hZSeTeUeVfZWe3eTe5eUe7eVe4eTe8eTiZXdZYdZZde:ddfddZ[dd d!ej\d"e]d#eee]  defd$d%Z^d&ej_d"e]defd'd(Z`ddd)d&ej_d*ed+ef d"e]d,ee] d#eee]  defd-d.Zaeeed+ef  ee]d+f f Zbd/dd0d1ed2ecd3eeeb  defd4d5Zdd1edee: fd6d7Zede:decfd8d9Zfde:decfd:d;Zgd<ed+ef dejhfd=d>Zid?ed@e
e]ef defdAdBZjd<ed+ef defdCdDZkdddEdFd"e]d<ed+ef d,ee] d#eee]  dGecdefdHdIZld!ej\d1edeec fdJdKZmejndd/dLd!ej\dMe]dNeejn dOeejo dPecde:fdQdRZpde:d1eddfdSdTZqd<ed+ef decfdUdVZrd<ed+ef decfdWdXZsd<ed+ef decfdYdZZtd<ed+ef d[ed\e
e]ef defd]d^Zudddddd_d`eeNeRf d1edaeee
e]ef eHf  dbeeD dceeP ddee deee
eed+ef ee] f ef  dee
e]ef ee. eeD ePe
eed+ef ee] f ef f fdfdgZvdhee: dieee]ef eJeIf dee
e]ef ee. f fdjdkZwdhee: dleee
e]ef eHf  dee
e]ef ee. f fdmdnZxdoee]d+f de.fdpdqZyd1ed,e]dee: fdrdsZzdS )t    N)contextmanager)deepcopy)AnyCallable	CoroutineDict
ForwardRefListMappingOptionalSequenceTupleTypeUnioncast)params)AsyncExitStackasynccontextmanagercontextmanager_in_threadpool)	DependantSecurityRequirement)logger)SecurityBase)OAuth2SecurityScopes)OpenIdConnect)create_response_fieldget_path_param_names)	BaseModelcreate_model)ErrorWrapper)MissingError)SHAPE_FROZENSET
SHAPE_LISTSHAPE_SEQUENCE	SHAPE_SETSHAPE_SINGLETONSHAPE_TUPLESHAPE_TUPLE_ELLIPSIS	FieldInfo
ModelFieldRequired	Undefined)get_annotation_from_field_info)evaluate_forwardref)lenient_issubclass)BackgroundTasks)run_in_threadpool)FormDataHeadersQueryParams
UploadFile)HTTPConnectionRequest)Response)	WebSocketzForm 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
fieldreturnc                 C   s   | j }t|tjrEz*ddlm} |sJ zddlm} |sJ W W d S  ty3   t	
t ttd w  tyD   t	
t ttd w d S )Nr   )__version__)parse_options_header)
field_info
isinstancer   Form	multipartr<   multipart.multipartr=   ImportErrorr   error!multipart_incorrect_install_errorRuntimeErrormultipart_not_installed_error)r:   r>   r<   r=    rH   E/usr/local/lib/python3.10/dist-packages/fastapi/dependencies/utils.pycheck_file_field]   s"   



rJ   )security_scopesparampathrK   c                 C   s.   | j }|jr
|j}n| j}t|||| j|dS )N)depends
dependencyrM   namerK   )defaultrO   
annotationget_sub_dependantrP   )rL   rM   rK   rN   rO   rH   rH   rI   get_param_sub_dependantr   s   rT   rN   c                 C   s"   t | js	J dt| | j|dS )Nz;A parameter-less dependency must have a callable dependency)rN   rO   rM   )callablerO   rS   )rN   rM   rH   rH   rI   get_parameterless_sub_dependant   s   rV   )rP   rK   rO   .rP   c           	      C   s|   d }|pg }t | tjr| j}|| t |tr*g }t |ttfr$|}t||d}t	||||| j
d}|r<|j| |S )N)security_schemescopes)rM   callrP   rK   	use_cache)r?   r   SecurityrX   extendr   r   r   r   get_dependantrZ   security_requirementsappend)	rN   rO   rM   rP   rK   security_requirementdependency_scopes
use_scopessub_dependantrH   rH   rI   rS      s,   

rS   Fskip_repeatsvisited	dependantre   rf   c             
   C   s   |d u rg }| | j t| j | j | j | j | j | j	 | j
| jd}| jD ];}|r9|j|v r9q/t|||d}|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security_schemesrZ   rM   rd   )r_   	cache_keyr   rh   copyri   rj   rk   rl   r^   rZ   rM   dependenciesget_flat_dependantr\   )rg   re   rf   flat_dependantrc   flat_subrH   rH   rI   rq      s4   

rq   c                 C   s$   t | dd}|j|j |j |j S )NT)re   )rq   rh   ri   rj   rk   )rg   rr   rH   rH   rI   get_flat_params   s   rt   c                 C   sl   | j }| jtkr#t| jts#t| jttf s#t	| js#t
|tjr%dS | jr4tdd | jD s4dS dS )NFc                 s   s    | ]}t |V  qd S N)is_scalar_field.0frH   rH   rI   	<genexpr>   s    z"is_scalar_field.<locals>.<genexpr>T)r>   shaper&   r/   type_r   sequence_typesdictdataclassesis_dataclassr?   r   Body
sub_fieldsall)r:   r>   rH   rH   rI   rv      s    


rv   c                 C   sR   | j tv rt| jts| jd ur| jD ]	}t|s dS qdS t| jtr'dS dS )NFT)r{   sequence_shapesr/   r|   r   r   rv   r}   )r:   	sub_fieldrH   rH   rI   is_scalar_sequence_field   s   

r   rY   c                    s<   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 ))rP   kindrQ   rR   )inspect	ParameterrP   r   rQ   get_typed_annotationrR   rx   rL   globalnsrH   rI   
<listcomp>   s    
z'get_typed_signature.<locals>.<listcomp>)r   	signaturegetattr
parametersvalues	Signature)rY   r   typed_paramstyped_signaturerH   r   rI   get_typed_signature   s   


	r   rR   r   c                 C   s"   t | trt| } t| ||} | S ru   )r?   strr   r.   )rR   r   rH   rH   rI   r     s   
r   c                 C   s6   t | }|j}|t jju rd S t| di }t||S )Nr   )r   r   return_annotationr   emptyr   r   )rY   r   rR   r   rH   rH   rI   get_typed_return_annotation  s   

r   T)rP   rK   rZ   rZ   c                 C   sH  t | }t|}|j}t||| ||d}| D ]\}	}
t|
jtjr1t	|
| |d}|j
| qt|
|dr8qt|
tj|	d}|	|v rht|dsMJ dt|
jtj }t|
|	tjtjj|d}t||d qt|drtt||d qt|
jtjtjfrt|rt||d q|j}t|tjsJ d	|j d
|j| q|S )N)rY   rP   rM   rK   rZ   )rL   rM   rK   rL   rg   )rL   default_field_info
param_namer:   z1Path params must be of one of the supported types)rL   r   r   
force_typeignore_default)r:   rg   zParam: z) can only be a request body, using Body())r   r   r   r   itemsr?   rQ   r   DependsrT   rp   r_   !add_non_field_param_to_dependencyget_param_fieldQueryrv   Path
ParamTypesrM   add_param_to_fieldsHeaderr   r>   r   rP   rl   )rM   rY   rP   rK   rZ   path_param_namesendpoint_signaturesignature_paramsrg   r   rL   rc   param_fieldr   r>   rH   rH   rI   r]     sj   
r]   c                 C   s   t | jtr| j|_dS t | jtr| j|_dS t | jtr$| j|_dS t | jt	r0| j|_
dS t | jtr<| j|_dS t | jtrH| j|_dS d S )NT)r/   rR   r7   rP   request_param_namer9   websocket_param_namer6   http_connection_param_namer8   response_param_namer0   background_tasks_param_namer   security_scopes_param_namer   rH   rH   rI   r   T  s&   r   )r   r   r   r   r   r   r   c                 C   s>  t }d}| j| jks|du r| j}t|tr5d}|}|j}t|tjr/t|dd d u r/|j|_|r4||_n||d}d}|t	u sB|rGd}d }n|t urMd}t
}	| j| jksX| j}	t|	||}	|jsot|dd ro| jdd}
n|jpt| j}
t| j|	||
||d}|st|d	st|j|_|st|jtrt|j|_|S )
NFTin_)rQ   convert_underscores_-)rP   r|   rQ   aliasrequiredr>   r   )r,   rQ   r   r?   r)   r   Paramr   r   r+   r   rR   r-   r   rP   replacer   rv   r   r>   r/   r|   r5   File)rL   r   r   r   r   default_value
had_schemar>   r   rR   r   r:   rH   rH   rI   r   l  sV   


r   c                 C   s   t tj| j}|jtjjkr|j|  d S |jtjj	kr%|j
|  d S |jtjjkr4|j|  d S |jtjjksCJ d| j |j|  d S )Nz>non-body parameters must be in path, query, header or cookie: )r   r   r   r>   r   r   rM   rh   r_   queryri   headerrj   cookierP   rk   )r:   rg   r>   rH   rH   rI   r     s   
r   c                 C   s8   t | r
t | S t | rdS t| dd }t |S )NF__call__)r   	isroutineiscoroutinefunctionisclassr   rY   dunder_callrH   rH   rI   is_coroutine_callable  s   



r   c                 C   $   t | rdS t| dd }t |S NTr   )r   isasyncgenfunctionr   r   rH   rH   rI   is_async_gen_callable     

r   c                 C   r   r   )r   isgeneratorfunctionr   r   rH   rH   rI   is_gen_callable  r   r   stack
sub_valuesc                    sL   t | rtt| di |}nt| rt| di |}||I d H S )NrH   )r   r   r   r   r   enter_async_context)rY   r   r   cmrH   rH   rI   solve_generator  s   r   )bodybackground_tasksresponsedependency_overrides_providerdependency_cacherequestr   r   r   r   r   c              
      s  i }g }|d u rt  }|jd= d |_|pi }|jD ]}	ttdtf |	j|	_tttdtf tt	 f |	j
|	_
|	j}
|	}|r\|jr\|	j}t|di ||}
|	j}t||
|	j|	jd}t| ||||||dI d H }|\}}}}}|| |r~|| q|	jr|	j
|v r||	j
 }n:t|
st|
r| jd}t|tsJ t|
||dI d H }nt|
r|
d
i |I d H }nt|
fi |I d H }|	jd ur|||	j< |	j
|vr|||	j
< qt|j| j\}}t|j | j \}}t|j!| j\}}t|j"| j#\}}|| || || || ||| | | 7 }|j$r7t%|j$|dI d H \}}|| || |j&r@| ||j&< |j'rPt| t(rP| ||j'< n|j)r_t| t*r_| ||j)< |j+rp|d u rkt, }|||j+< |j-ry|||j-< |j.rt/|jd	||j.< |||||fS )Nzcontent-length.dependency_overrides)rM   rY   rP   rK   )r   rg   r   r   r   r   r   fastapi_astack)rY   r   r   )required_paramsreceived_body)rX   rH   )0r8   headersstatus_coderp   r   r   r   rY   r   r   rn   r   r   getrM   r]   rP   rK   solve_dependenciesupdater\   rZ   r   r   scoper?   r   r   r   r1   request_params_to_argsrh   ri   rj   rk   cookiesrl   request_body_to_argsr   r   r7   r   r9   r   r0   r   r   r   )r   rg   r   r   r   r   r   r   errorsrc   rY   use_sub_dependantoriginal_calluse_pathsolved_resultr   
sub_errorsr   sub_dependency_cachesolvedr   path_valuespath_errorsquery_valuesquery_errorsheader_valuesheader_errorscookie_valuescookie_errorsbody_valuesbody_errorsrH   rH   rI   r     s   


















r   r   received_paramsc           	      C   s   i }g }| D ]t}t |rt|ttfr||jp|j}n||j}|j}t|t	j
s0J d|d u rP|jrG|tt |jj|jfd nt|j||j< q|j|||jj|jfd\}}t|trj|| qt|tru|| q|||j< q||fS )Nz"Params must be subclasses of Paramloc)r   r?   r4   r3   getlistr   rQ   r   r>   r   r   r   r_   r    r!   r   valuer   rP   validatelistr\   )	r   r   r   r   r:   r   r>   v_errors_rH   rH   rI   r   S  s@   



r   r   c              
      s  i }g }| r?| d }|j }t|dd }t| dko| }|r%|j|i}| D ]}|r/d}nd|jf}d }	|d uri|jtv sD|jtv rPt|t	rP|
|j}	nz||j}	W n tyh   |t| Y q'w |	d u st|tjrw|	dkst|tjr|jtv rt|	dkr|jr|t| nt|j||j< q't|tjrt|jtrt|	tr|	 I d H }	nb|jtv rt|tjrt|jtrt|	trg  dtg ttttf f dd f fd	d
}
t 4 I d H }|	D ]	}||
|j qW d   I d H  n1 I d H sw   Y  t |j  }	|j!|	||d\}}t|t"r-|| q't|t#r9|$| q'|||j< q'||fS )Nr   embed   )r   r    fnr;   c                    s   |  I d H }  | d S ru   )r_   )r  resultresultsrH   rI   
process_fn  s   z(request_body_to_args.<locals>.process_fnr   )%r>   r   lenr   r{   r   r|   r}   r?   r2   r   r   AttributeErrorr_   get_missing_field_errorr   r@   r   r   rQ   rP   r   r/   bytesr5   readr   r   r   anyiocreate_task_group
start_soonsequence_shape_to_typer   r    r  r\   )r   r   r   r   r:   r>   r  field_alias_omittedr   r   r  tg	sub_valuer  r  rH   r	  rI   r   z  s   





	



*r   r   c                 C   s   t t | d}|S )Nr   )r    r!   )r   missing_field_errorrH   rH   rI   r    s   r  c              	   C   sJ  t | }|js	d S |jd }|j}t|dd }dd |jD }t|dkr-|s-t| |S |jD ]	}t|jdd q0d| }t|}	|jD ]}
|
|	j|
j	< qEt
dd	 |jD }d
d i}t
dd	 |jD rjtj}n't
dd	 |jD rxtj}ntj}dd |jD }tt|dkr|d |d< td|	|d|di |d}t| |S )Nr   r  c                 S   s   h | ]}|j qS rH   )rP   r   rH   rH   rI   	<setcomp>  s    z!get_body_field.<locals>.<setcomp>r  TBody_c                 s   s    | ]}|j rd V  qdS )TN)r   rw   rH   rH   rI   rz     s    z!get_body_field.<locals>.<genexpr>rQ   c                 s       | ]
}t |jtjV  qd S ru   )r?   r>   r   r   rw   rH   rH   rI   rz         c                 s   r  ru   )r?   r>   r   r@   rw   rH   rH   rI   rz     r  c                 S   s"   g | ]}t |jtjr|jjqS rH   )r?   r>   r   r   
media_typerw   rH   rH   rI   r     s    z"get_body_field.<locals>.<listcomp>r  r   )rP   r|   r   r   r>   rH   )rq   rl   r>   r   r  rJ   setattrr   
__fields__rP   anyr   r   r@   r   setr   )rg   rP   rr   first_paramr>   r  body_param_names_setrL   
model_name	BodyModelry   r   BodyFieldInfo_kwargsBodyFieldInfobody_param_media_typesfinal_fieldrH   rH   rI   get_body_field  sJ   


r*  ){r   r   
contextlibr   ro   r   typingr   r   r   r   r   r	   r
   r   r   r   r   r   r   r  fastapir   fastapi.concurrencyr   r   r   fastapi.dependencies.modelsr   r   fastapi.loggerr   fastapi.security.baser   fastapi.security.oauth2r   r   $fastapi.security.open_id_connect_urlr   fastapi.utilsr   r   pydanticr   r   pydantic.error_wrappersr    pydantic.errorsr!   pydantic.fieldsr"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   pydantic.schemar-   pydantic.typingr.   pydantic.utilsr/   starlette.backgroundr0   starlette.concurrencyr1   starlette.datastructuresr2   r3   r4   r5   starlette.requestsr6   r7   starlette.responsesr8   starlette.websocketsr9   r   r  r!  tupler}   r  rG   rE   rJ   r   r   rT   r   rV   rS   CacheKeyboolrq   rt   rv   r   r   r   r   r   r]   r   r   r   r   r   r   r   r   r   r   r   r   r  r*  rH   rH   rH   rI   <module>   sx   <4







  

#



:

7	



"	

 
'
S