o
    1 i                     @   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 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)Zpython_multipartrP   ImportErrorAssertionError	multipartZmultipart.multipartrQ   r5   error!multipart_incorrect_install_errorRuntimeErrormultipart_not_installed_error)rP   rQ    rY   f/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/fastapi/dependencies/utils.pyensure_multipart_is_installedb   s(   



r[   dependspathc                 C   sH   t | js	J dg }t| tjr| jr|| j t|| j| j|dS )Nz;A parameter-less dependency must have a callable dependency)r]   callscopesecurity_scopes)	callable
dependency
isinstancer   Securityscopesextendget_dependantr_   )r\   r]   use_security_scopesrY   rY   rZ   get_parameterless_sub_dependant}   s   ri   Fskip_repeatsvisited	dependantrk   rl   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]   rj   )append	cache_keyr2   rn   r   ro   rp   rq   rr   rs   rt   r]   dependenciesget_flat_dependantrf   )rm   rk   rl   flat_dependantsub_dependantZflat_subrY   rY   rZ   rx      s4   

rx   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_extractrY   rY   rZ   _get_flat_fields_from_params   s   
r   c                 C   sD   t | dd}t|j}t|j}t|j}t|j}|| | | S )NT)rk   )rx   r   rn   ro   rp   rq   )rm   ry   rn   ro   rp   rq   rY   rY   rZ   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globalnsrY   rZ   
<listcomp>   s    
z'get_typed_signature.<locals>.<listcomp>)r   	signaturegetattr
parametersvalues	Signature)r^   r   Ztyped_paramsZtyped_signaturerY   r   rZ   get_typed_signature   s   


	r   r   r   c                 C   s2   t | trt| } t| ||} | td u rd S | S N)rc   strr   r   type)r   r   rY   rY   rZ   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   rY   rY   rZ   get_typed_return_annotation   s   

r   T)r   r`   rt   r_   r   r`   rt   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]   r`   rt   r_   )Zsecurity_schemere   )
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   r`   rt   r_   r   type_annotationrm   z0Cannot specify multiple FastAPI annotations for )fieldrm   )'r2   r<   r   r   rc   r6   r7   r9   r3   rs   ru   itemsanalyze_paramr   r   r\   rb   is_gen_callableis_async_gen_callableZcomputed_scoper_   r^   r4   __name__r   rd   re   rf   rg   rt   rw   !add_non_field_param_to_dependencyr   r   
field_infoBodyrN   rr   add_param_to_fields)r]   r^   r   r`   rt   r_   rm   Zpath_param_namesZendpoint_signatureZsignature_paramsZ
use_scopesZsecurity_requirementr   r   r   Zparam_detailsrh   rz   rY   rY   rZ   rg      s   	



rg   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   rY   rY   rZ   r   7  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   rY   rY   rY   rZ   r   O  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j||d}t|ttttttfr|d u sJ d||d u sJ d|nS|d u rI|d u rI|tjjur	|nt}|rtj|d}n4t |st!|r'tj"||d}n"t#|dsBt$|r:t%j&||d}ntj&||d}ntj'||d}d }|d ur|rjt|tjt%jfsiJ d|jj d| nt|tj(t%j(frt)|dd d u rtj*j+|_,t-||| }t|tj.t%j.frt/  |j0st)|dd r| dd}n|j0p| }||_0t1| ||j||jtt	jtfv |d}|rt2|dsJ dn%t|tj't%j'frt2|st3|st4|j5rt)|dddksJ t6|||dS )Nr   c                 S   s$   g | ]}t |ttjtjfr|qS rY   )rc   r>   r*   r   r   r   argrY   rY   rZ   r   h  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 rY   )rc   r   ParamrN   r   r   r   rY   rY   rZ   r   m  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 )rb   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   )7r   r   r   r   rL   rI   rK   rc   r>   r*   r   r   r   r   	__class__r   r   r   r   r   rb   r   dataclassesreplacer)   rF   rH   rE   rG   r   r8   Pathr'   r(   Filer   r.   rN   r   ZQueryr   r   
ParamTypesqueryr   r   Formr[   r   r;   r$   r%   r   r~   r   )r   r   r   r   r   r\   r   Zuse_annotationZannotated_argsZfastapi_annotationsZfastapi_specific_annotationsZfastapi_annotationdefault_valuer   Zuse_annotation_from_field_infor   rY   rY   rZ   r   V  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]   rn   ru   r   ro   headerrp   cookier   rq   )r   rm   r   Zfield_info_inrY   rY   rZ   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 )NrY   )r^   r   r1   r   r   r0   enter_async_context)rm   r   r   cmrY   rY   rZ   _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:   rY   rY   rY   rZ   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 )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)r]   r^   r   r`   r_   )	r   rm   r   r   r   r   r   r   r   r   )rm   r   r   )body_fieldsreceived_bodyr   )re   )r   r   r   r   r   rY   )2r_   getrc   r   rG   headersstatus_coderw   r   r   r   r^   r   r   r]   rg   r   r`   solve_dependenciesr   r   rf   rt   rv   r   r   r   r   Zis_coroutine_callabler?   request_params_to_argsrn   ro   rp   rq   cookiesupdaterr   request_body_to_argsr   r   rF   r   rH   r   r/   r   r   r8   r   )r   rm   r   r   r   r   r   r   r   Zrequest_astackZfunction_astackr   r   rz   r^   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_errorsrY   rY   rZ   r   5  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   rY   )r   Z
loc_prefix)
r   r!   r   r   validater   rc   listr*   Z_regenerate_error_with_loc)r   r   r   r   v_errors_Z
new_errorsrY   rY   rZ    _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&   rc   rB   rA   getlistr   r   r   r   rN   r   r}   r   r   r   )r   r   r   r   rY   rY   rZ   _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   setrc   rA   r   r   r   r   addr   r   r   rN   r   r   r   rf   )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   rY   rY   rZ   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   originZ
union_argsr   rY   rY   rZ   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r6t|js6t	|js6dS dS )NFc                 S   s   h | ]}|j qS rY   )r   )r   r   rY   rY   rZ   	<setcomp>R  s    z,_should_embed_body_fields.<locals>.<setcomp>r|   Tr   Zembed)
r}   r   r   rc   r   r   rN   r   r~   r   )r{   Zbody_param_names_setr   rY   rY   rZ   _should_embed_body_fieldsM  s    r   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   )ru   )r   resultresultsrY   rZ   
process_fn}  s   z&_extract_form_body.<locals>.process_fn)r   r   )r   r   rc   r   r   rN   r"   rD   readr#   r-   r+   r   r	   r   anyioZcreate_task_groupZ
start_soonr,   r   r   )
r   r   r   r   r   r   r  tgZ	sub_valuer   rY   r  rZ   _extract_form_bodye  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~   rc   r@   r    r  r   r   r   r   AttributeErrorru   r!   rf   )r   r   r   r   r   r   r   Zbody_to_processr   r   r   r   r   r   rY   rY   rZ   r     sP   




r   ry   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   ZBody_)r{   
model_namec                 s   s    | ]}|j rd V  qdS )TN)r   r   frY   rY   rZ   	<genexpr>  s    z!get_body_field.<locals>.<genexpr>r   )r   r   r   c                 s       | ]
}t |jtjV  qd S r   )rc   r   r   r   r  rY   rY   rZ   r        c                 s   r  r   )rc   r   rN   r   r  rY   rY   rZ   r    
    
c                 s   r  r   )rc   r   r   r   r  rY   rY   rZ   r    r  c                 s   r  r   )rc   r   rN   r   r  rY   rY   rZ   r    r  c                 S   s(   g | ]}t |jtjtjfr|jjqS rY   )rc   r   r   r   rN   
media_typer  rY   rY   rZ   r     s    z"get_body_field.<locals>.<listcomp>r|   r  )r   r~   r   r   r   rY   )rr   r   anyr   r   rN   r   r.   r   r}   r   r;   )ry   r   r   Zfirst_paramr
  Z	BodyModelr   ZBodyFieldInfo_kwargsZBodyFieldInfoZbody_param_media_typesZfinal_fieldrY   rY   rZ   get_body_field  sV   
r  )rO   Nr   )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   r3   Zfastapi.exceptionsr4   Zfastapi.loggerr5   Zfastapi.security.baser6   Zfastapi.security.oauth2r7   r8   Z$fastapi.security.open_id_connect_urlr9   r   r:   Zfastapi.utilsr;   r<   Zpydanticr=   Zpydantic.fieldsr>   Zstarlette.backgroundr   Zstarlette.concurrencyr?   Zstarlette.datastructuresr@   rA   rB   rC   rD   Zstarlette.requestsrE   rF   Zstarlette.responsesrG   Zstarlette.websocketsrH   Ztyping_extensionsrI   rJ   rK   rL   r   rN   rX   rV   r[   r   r   ri   boolrx   r   r   r   r   r   r   rg   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r  rY   rY   rY   rZ   <module>   sx   <l

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