o
    ɝi                     @   s  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.m/Z/m0Z0m1Z1m2Z2 d dl3m4Z4 d d	l5m6Z6 d d
l7m8Z8m9Z9 d dl:m;Z;m<Z< d dl=m>Z> d dl?m@Z@ d dlAmBZB d dlCmDZDmEZE d dlFmGZG d dlHmIZI d dlJmKZKmLZL d dlMmNZN d dlOmPZP d d	lQm6ZR d dlSmTZT d dlUmVZVmWZWmXZXmYZYmZZZ d dl[m\Z\m]Z] d dl^m_Z_ d dl`maZa d dlbmcZcmdZdmeZemfZf ddlgmhZh dZidZjd{d d!Zkd"ejld#emde;fd$d%Znd&dd'd(e;d)eod*eeeI  de;fd+d,Zpd-ee dee fd.d/Zqd(e;dee fd0d1Zrd2e
d3e	f de jsfd4d5Ztd6e	d7eeme	f de	fd8d9Zud2e
d3e	f de	fd:d;Zvddd<dd=d#emd2e
d3e	f d>eem d?eeem  d@eodAeeddB df de;fdCdDZwdEemdFe	d(e;deeo fdGdHZxeG dIdJ dJZydEemd6e	dKe	dLeodeyf
dMdNZzdOed(e;ddfdPdQZ{d(e;dRedSeeme	f de	fdTdUZ|eG dVdW dWZ}ddddddXdYee]eaf d(e;dZeeeeme	f eVf  d[eeR d\ee_ d]ee	 d^eeeIe	f  d_ed`eode}fdadbZ~dOedKe	dceeme	f ddeemd3f dee	ee	 f f
dedfZ	d|dOedceeme	f dgeemdf de	fdhdiZd-ee djeeeme	f eYeWf deeeme	f ee	 f fdkdlZdme	deofdndoZd-ee deofdpdqZdree dseVdeeme	f fdtduZdree dseeeeme	f eVf  d`eodeeeme	f eeeme	f  f fdvdwZdxe;d>emd`eodee fdydzZdS )}    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SecurityRequirement)DependencyScopeError)logger)SecurityBase)OAuth2SecurityScopes)OpenIdConnect)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J W d S  ttfyV   z,ddlm}  | s#J zddlm} |s.J W n ty@   tt	 t
t	d w W Y d S  tyU   tt t
td w w )Nr   )__version__z0.0.12)parse_options_header)python_multipartrP   ImportErrorAssertionError	multipartmultipart.multipartrQ   r5   error!multipart_incorrect_install_errorRuntimeErrormultipart_not_installed_error)rP   rQ    r[   V/var/www/html/ocr-read/venv/lib/python3.10/site-packages/fastapi/dependencies/utils.pyensure_multipart_is_installeda   s(   



r]   dependspathc                 C   sD   t | js	J dg }t| tjr| jr|| j t|| j|dS )Nz;A parameter-less dependency must have a callable dependency)r_   callsecurity_scopes)callable
dependency
isinstancer   Securityscopesextendget_dependant)r^   r_   use_security_scopesr[   r[   r\   get_parameterless_sub_dependant|   s   rj   Fskip_repeatsvisited	dependantrl   rm   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_requirements	use_cacher_   rk   )append	cache_keyr2   ro   r   rp   rq   rr   rs   rt   ru   r_   dependenciesget_flat_dependantrg   )rn   rl   rm   flat_dependantsub_dependantflat_subr[   r[   r\   ry      s4   

ry   fieldsc                 C   s8   | s| S | d }t | dkrt|jrt|j}|S | S )Nr      )lenr   type_r    )r}   first_fieldfields_to_extractr[   r[   r\   _get_flat_fields_from_params   s   
r   c                 C   sD   t | dd}t|j}t|j}t|j}t|j}|| | | S )NT)rl   )ry   r   ro   rp   rq   rr   )rn   rz   ro   rp   rq   rr   r[   r[   r\   get_flat_params   s   



r   r`   .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 ))namekinddefault
annotation)inspect	Parameterr   r   r   get_typed_annotationr   ).0paramglobalnsr[   r\   
<listcomp>   s    
z'get_typed_signature.<locals>.<listcomp>)r   	signaturegetattr
parametersvalues	Signature)r`   r   typed_paramstyped_signaturer[   r   r\   get_typed_signature   s   


	r   r   r   c                 C   s2   t | trt| } t| ||} | td u rd S | S N)rd   strr   r   type)r   r   r[   r[   r\   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   )r`   r   r   r   r[   r[   r\   get_typed_return_annotation   s   

r   T)r   ra   ru   scoper   ra   ru   r   )functionrequestc              	   C   s  t ||| |||d}t| }t|}|j}	t|tr3g }
t|ttfr'|p&|
}
t||
d}|j	
| |	 D ]\}}||v }t||j|j|d}|jd ur|jjsTJ |jsZ|jrt|jdkrt|jjdkrt|jsjJ td|jj d|pwg }t|jtjr|jjr||jj t| |jj|||jj|jjd}|j
| q7t||j |d	r|j!d u sJ d
|q7|j!d usJ t|j!j"tj#t$j#fr|j%
|j! q7t&|j!|d q7|S )N)r`   r   r_   ra   ru   r   )security_schemerf   )
param_namer   valueis_path_paramr   r   zThe dependency "zS" has a scope of "request", it cannot depend on dependencies with scope "function".)r_   r`   r   ra   ru   r   r   type_annotationrn   z0Cannot specify multiple FastAPI annotations for )fieldrn   )'r2   r<   r   r   rd   r6   r7   r9   r3   rt   rv   itemsanalyze_paramr   r   r^   rc   is_gen_callableis_async_gen_callablecomputed_scoper   r`   r4   __name__r   re   rf   rg   rh   ru   rx   !add_non_field_param_to_dependencyr   r   
field_infoBodyrN   rs   add_param_to_fields)r_   r`   r   ra   ru   r   rn   path_param_namesendpoint_signaturesignature_params
use_scopessecurity_requirementr   r   r   param_detailsri   r{   r[   r[   r\   rh      s   	



rh   r   r   c                 C   s|   t |tr
| |_dS t |tr| |_dS t |tr| |_dS t |tr(| |_dS t |t	r2| |_
dS t |tr<| |_dS d S )NT)r)   rF   request_param_namerH   websocket_param_namerE   http_connection_param_namerG   response_param_nameStarletteBackgroundTasksbackground_tasks_param_namer8   security_scopes_param_namer   r[   r[   r\   r   3  s&   





r   c                   @   s0   e Zd ZU eed< eej ed< ee ed< dS )ParamDetailsr   r^   r   N)	r   
__module____qualname__r   __annotations__r   r   Dependsr   r[   r[   r[   r\   r   K  s   
 r   r   r   c              	   C   s  d }d }t }t }|tjjur|}|}t|tu rt|}|d }dd |dd  D }	dd |	D }
|
r9|
d }nd }t|tt	jfrzt
||d}|jtt	jhv sf|jtt	jhv sfJ d|jj d	| d
|tjjurv|rrJ d||_nt|_nt|tjr|}t|tjr|d u sJ d| |d u sJ d| |}nt|tt	jfr|d u sJ d| |}trt|tr||_|d ur|jd u rt|}||_t|ttttttfr|d u sJ d||d u sJ d|nS|d u rE|d u rE|tjjur|nt}|rtj|d}n4t|st|r#tj ||d}n"t!|ds>t"|r6t#j$||d}ntj$||d}ntj%||d}d }|d ur|rft|tjt#jfseJ d|jj d| nt|tj&t#j&fr~t'|dd d u r~tj(j)|_*t+||| }t|tj,t#j,frt-  |j.st'|dd r| /dd}n|j.p| }||_.t0| ||j||jtt	jtfv |d}|rt1|dsJ dn%t|tj%t#j%frt1|st2|st3|j4rt'|dddksJ t5|||dS )Nr   c                 S   s$   g | ]}t |ttjtjfr|qS r[   )rd   r>   r*   r   r   r   argr[   r[   r\   r   d  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 r[   )rd   r   ParamrN   r   r   r   r[   r[   r\   r   i  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 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_-)r   r   r   aliasrequiredr   )r   z1Path params must be of one of the supported typesshape)r   r^   r   )6r   r   r   r   rL   rI   rK   rd   r>   r*   r   r   r   r   	__class__r   r   r   r   r   rc   r   r)   rF   rH   rE   rG   r   r8   Pathr'   r(   Filer   r.   rN   r   Queryr   r   
ParamTypesqueryr   r   Formr]   r   replacer;   r$   r%   r   r   r   )r   r   r   r   r   r^   r   use_annotationannotated_argsfastapi_annotationsfastapi_specific_annotationsfastapi_annotationdefault_valuer   use_annotation_from_field_infor   r[   r[   r\   r   R  s"  









	r   r   c                 C   s   | j }t|dd }|tjjkr|j|  d S |tjjkr%|j|  d S |tjj	kr3|j
|  d S |tjjksAJ d| j |j|  d S )Nr   z>non-body parameters must be in path, query, header or cookie: )r   r   r   r   r_   ro   rv   r   rp   headerrq   cookier   rr   )r   rn   r   field_info_inr[   r[   r\   r     s   
r   stack
sub_valuesc                    sV   | j sJ | jrtt| j di |}n| jr#t| j di |}||I d H S )Nr[   )r`   r   r1   r   r   r0   enter_async_context)rn   r   r   cmr[   r[   r\   _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   rG   r:   r[   r[   r[   r\   r   (  s   
 r   )bodyr   r   dependency_overrides_providerr   r   r   r   r   r   r   async_exit_stackembed_body_fieldsc        	            s0  | j d}	t|	tsJ d| j d}
t|
tsJ di }g }|d u r1t }|jd= d |_|d u r7i }|jD ]}tt	dt
f |j|_|j}|}|rm|jrm|j}t|di ||}|j}t|||j|j|j d}t| ||||||||d		I d H }|j}|jr||j q:|jr|j|v r||j }n6|js|jr|	}|j d
kr|
}t|||jdI d H }n|jr|di |jI d H }nt|fi |j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%r@t&|j%||dI d H \}}|$| || |j'rI| ||j'< |j(rYt| t)rY| ||j(< n|j*rht| t+rh| ||j*< |j,ry|d u rtt- }|||j,< |j.r|||j.< |j/rt0|jd||j/< t1|||||dS )Nfastapi_inner_astackz/fastapi_inner_astack not found in request scopefastapi_function_astackz2fastapi_function_astack not found in request scopezcontent-length.dependency_overrides)r_   r`   r   ra   r   )	r   rn   r   r   r   r   r   r   r   r   )rn   r   r   )body_fieldsreceived_bodyr   )rf   )r   r   r   r   r   r[   )2r   getrd   r   rG   headersstatus_coderx   r   r   r   r`   r   r   r_   rh   r   ra   solve_dependenciesr   r   rg   ru   rw   r   r   r   r   is_coroutine_callabler?   request_params_to_argsro   rp   rq   rr   cookiesupdaters   request_body_to_argsr   r   rF   r   rH   r   r/   r   r   r8   r   )r   rn   r   r   r   r   r   r   r   request_astackfunction_astackr   r   r{   r`   use_sub_dependantoriginal_calluse_pathsolved_resultsolved
use_astackpath_valuespath_errorsquery_valuesquery_errorsheader_valuesheader_errorscookie_valuescookie_errorsbody_valuesbody_errorsr[   r[   r\   r   1  s   

















r   r   locc                 C   sz   |d u r| j rd t|dgfS t| jg fS | j|||d\}}t|r)d |gfS t|tr9tj	|dd}d |fS |g fS )N)r  r[   )r   
loc_prefix)
r   r!   r   r   validater   rd   listr*   _regenerate_error_with_loc)r   r   r   r  v_errors_
new_errorsr[   r[   r\    _validate_value_with_model_field  s   

r  r   c                 C   s   |p| j }t| rt|ttfr||}n||d }|d u s=t| jtj	t
j	fr3t|tr3|dks=t| rGt|dkrG| jrBd S t| jS |S )N r   )r   r&   rd   rB   rA   getlistr   r   r   r   rN   r   r   r   r   r   )r   r   r   r   r[   r[   r\   _get_multidict_value  s"   

r  received_paramsc                 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 ]@}
d }t|t	rWt|
jd|}|rW|
j
|
jkrP|
j
n|
jdd}t|
||d}|d urg|||
j< |	|pm|
j
 |	|
j q5| D ]\}}||	vr|||< qz|r|j}t|tjtjfsJ d	|jjf}t||||d
\}}|j|i|fS | D ]5}
t|
|}|
j}t|tjtjfsJ d	|jj|
j
f}t|
|||d
\}}|r|| q|||
j< q||fS )Nr   FTr~   r   r   r   )r   z"Params must be subclasses of Paramr   r   r   r  )r   r)   r   r=   r    r   r   setrd   rA   r   r   r   r  addr   r   r   rN   r   r   r  rg   )r}   r  r   r   r   r   single_not_embedded_fielddefault_convert_underscoresparams_to_processprocessed_keysr   r   r   r   keyr   r  r  r  r[   r[   r\   r     sx   






r   
field_typec                 C   sL   ddl m} t| }|tur||urdS t| }|D ]	}t|s# dS qdS )zJCheck if field type is a Union where all members are BaseModel subclasses.r   )	UnionTypeFT)fastapi.typesr(  rL   r   rK   r   )r'  r(  origin
union_argsr   r[   r[   r\   is_union_of_base_models6  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r6t|js6t	|js6dS dS )NFc                 S   s   h | ]}|j qS r[   )r   )r   r   r[   r[   r\   	<setcomp>N  s    z,_should_embed_body_fields.<locals>.<setcomp>r~   Tr   embed)
r   r   r   rd   r   r   rN   r   r   r,  )r}   body_param_names_setr   r[   r[   r\   _should_embed_body_fieldsI  s    r0  r   r   c           
   
      sH  i }| D ]}t ||}|j}t|tjtjfr)t|r)t|tr)| I d H }n^t	|rt|tjtjfrt
|rt|tsAJ g  dtg ttttf f dd f fdd}t 4 I d H }|D ]	}|||j qbW d   I d H  n1 I d H s|w   Y  t| d}|d ur|||j< q| D ]\}	}|	|vr|||	< q|S )NfnrO   c                    s   |  I d H }  | d S r   )rv   )r1  resultresultsr[   r\   
process_fny  s   z&_extract_form_body.<locals>.process_fn)r   r   )r  r   rd   r   r   rN   r"   rD   readr#   r-   r+   r   r	   r   anyiocreate_task_group
start_soonr,   r   r   )
r   r   r   r   r   r   r5  tg	sub_valuer&  r[   r3  r\   _extract_form_bodya  sN   
(
r<  c              	      s&  i }g }| sJ dt | dko| }| d }|}| }|r-t|jr-t|tr-t|j}t|tr:t||I d H }|rOd}	t||||	d\}
}|j|
i|fS | D ]=}d|j	f}	d }|d urwz|
|j	}W n tyv   |t|	 Y qQw t||||	d\}
}|r|| qQ|
||j< qQ||fS )Nz3request_body_to_args() should be called with fieldsr~   r   )r   r  r   )r   r   r   rd   r@   r    r<  r  r   r   r   AttributeErrorrv   r!   rg   )r   r   r   r   r   r"  r   body_to_processr   r  r  r  r   r   r[   r[   r\   r     sP   




r   rz   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 r<tj}nKtdd | j D rJtj}n=tdd | j D rXtj}n/tdd | j D rftj}n!t|rntj}ntj}dd | j D }	t	t
|	dkr|	d |d< td||d|di |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   Body_)r}   
model_namec                 s   s    | ]}|j rd V  qdS )TN)r   r   fr[   r[   r\   	<genexpr>  s    z!get_body_field.<locals>.<genexpr>r   )r   r   r   c                 s       | ]
}t |jtjV  qd S r   )rd   r   r   r   rA  r[   r[   r\   rC        c                 s   rD  r   )rd   r   rN   r   rA  r[   r[   r\   rC    
    
c                 s   rD  r   )rd   r   r   r   rA  r[   r[   r\   rC    rE  c                 s   rD  r   )rd   r   rN   r   rA  r[   r[   r\   rC    rF  c                 S   s(   g | ]}t |jtjtjfr|jjqS r[   )rd   r   r   r   rN   
media_typerA  r[   r[   r\   r     s    z"get_body_field.<locals>.<listcomp>r~   rG  )r   r   r   r   r   r[   )rs   r   anyr   r   rN   r   r.   r   r   r   r;   )rz   r   r   first_paramr@  	BodyModelr   BodyFieldInfo_kwargsBodyFieldInfobody_param_media_typesfinal_fieldr[   r[   r\   get_body_field  sV   
rO  )rO   Nr   )r   
contextlibr   r   r   r   dataclassesr   typingr   r   r	   r
   r   r   r   r   r   r   r   r   r   r7  fastapir   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-   fastapi._compat.sharedr.   fastapi.backgroundr/   fastapi.concurrencyr0   r1   fastapi.dependencies.modelsr2   r3   fastapi.exceptionsr4   fastapi.loggerr5   fastapi.security.baser6   fastapi.security.oauth2r7   r8   $fastapi.security.open_id_connect_urlr9   r)  r:   fastapi.utilsr;   r<   pydanticr=   pydantic.fieldsr>   starlette.backgroundr   starlette.concurrencyr?   starlette.datastructuresr@   rA   rB   rC   rD   starlette.requestsrE   rF   starlette.responsesrG   starlette.websocketsrH   typing_extensionsrI   rJ   rK   rL   r  rN   rZ   rX   r]   r   r   rj   boolry   r   r   r   r   r   r   rh   r   r   r   r   r   r   r   r  r  r   r,  r0  r<  r   rO  r[   r[   r[   r\   <module>   sv   <l



#
		


Q

 <



 






O

*
2