a
    g	g!v                     @   sB  d dl Z d dlmZmZ d dlmZ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-m.Z. d dl/m0Z0 d dl1m2Z2m3Z3 d d	l4m5Z5m6Z6 d d
l7m8Z8 d dl9m:Z: d dl;m<Z<m=Z= d dl>m?Z? d dl@mAZAmBZB d dlCmDZD d dlEm0ZF d dlGmHZH d dlImJZJmKZKmLZLmMZM d dlNmOZOmPZP d dlQmRZR d dlSmTZT d dlUmVZVmWZWmXZX dZYdZZeddddZ[dde\ej]e\eee\  e5dddZ^ej]e\e5dd d!Z_ddd"ej]ed#ef e\ee\ eee\  e5d$d%d&Z`eeed#ef  ee\d#f f Zad'dd(e5ebeeea  e5d)d*d+Zce5ee d,d-d.Zded#ef e jed/d0d1Zfee
e\ef ed2d3d4Zged#ef ed/d5d6Zhddd7d8e\ed#ef ee\ eee\  ebe5d9d:d;Zie\ee5eeb d<d=d>Zje\eeebeeeej] ee f d?d@dAZkeebebdBdCdDZlee5ddEdFdGZmed#ef ebd/dHdIZned#ef ebd/dJdKZoed#ef ebd/dLdMZped#ef ee
e\ef edNdOdPZqddddddQeePeTf e5eee
e\ef eJf  eeF eeR ee ee
eed#ef ee\ f ef  eee
e\ef ee eeF eRe
eed#ef ee\ f ef f dR	dSdTZree eee\ef eLeKf ee
e\ef ee f dUdVdWZsee eee
e\ef eJf  ee
e\ef ee
e\ef  f dXdYdZZte5e\ee d[d\d]ZudS )^    N)AsyncExitStackcontextmanager)copydeepcopy)AnyCallable	CoroutineDict
ForwardRefListMappingOptionalSequenceTupleTypeUnioncast)params)PYDANTIC_V2ErrorWrapper
ModelFieldRequired	Undefined_regenerate_error_with_loccopy_field_infocreate_body_modelevaluate_forwardreffield_annotation_is_scalarget_annotation_from_field_info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sequence_typesserialize_sequence_valuevalue_is_sequence)BackgroundTasks)asynccontextmanagercontextmanager_in_threadpool)	DependantSecurityRequirement)logger)SecurityBase)OAuth2SecurityScopes)OpenIdConnect)create_response_fieldget_path_param_names)	FieldInfo)run_in_threadpool)FormDataHeadersQueryParams
UploadFile)HTTPConnectionRequest)Response)	WebSocket)	Annotatedget_args
get_originzForm 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rzXddlm} |s(J zddlm} |s>J W n& tyf   t	
t ttd Y n0 W n& ty   t	
t ttd Y n0 d S )Nr   )__version__)parse_options_header)
field_info
isinstancer   Form	multipartrF   Zmultipart.multipartrG   ImportErrorr0   error!multipart_incorrect_install_errorRuntimeErrormultipart_not_installed_error)rD   rH   rF   rG    rQ   ]/var/www/html/llm_bihealth/app/venv/lib/python3.9/site-packages/fastapi/dependencies/utils.pycheck_file_fieldR   s    

rS   )security_scopes)
param_namedependspathrT   rE   c                 C   s   |j s
J t||j || |dS )N)rV   
dependencyrW   namerT   )rX   get_sub_dependantrU   rV   rW   rT   rQ   rQ   rR   get_param_sub_dependantg   s    
r\   )rV   rW   rE   c                 C   s"   t | jsJ dt| | j|dS )Nz;A parameter-less dependency must have a callable dependency)rV   rX   rW   )callablerX   rZ   )rV   rW   rQ   rQ   rR   get_parameterless_sub_dependantx   s    r^   )rY   rT   .)rV   rX   rW   rY   rT   rE   c           	      C   s|   d }|p
g }t | tjr(| j}|| t |trTg }t |ttfrH|}t||d}t	||||| j
d}|rx|j| |S )N)Zsecurity_schemescopes)rW   callrY   rT   	use_cache)rI   r   ZSecurityr_   extendr1   r2   r4   r/   get_dependantra   security_requirementsappend)	rV   rX   rW   rY   rT   Zsecurity_requirementZdependency_scopesZ
use_scopessub_dependantrQ   rQ   rR   rZ      s,    

rZ   Fskip_repeatsvisited)	dependantrh   ri   rE   c             
   C   s   |d u rg }| | j t| j | j | j | j | j | j	 | j
| jd}| jD ]v}|rr|j|v rrq^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_paramsZsecurity_schemesra   rW   rg   )re   	cache_keyr.   rk   r   rl   rm   rn   ro   rd   ra   rW   dependenciesget_flat_dependantrb   )rj   rh   ri   flat_dependantrf   Zflat_subrQ   rQ   rR   rr      s4    

rr   )rj   rE   c                 C   s$   t | dd}|j|j |j |j S )NT)rh   )rr   rk   rl   rm   rn   )rj   rs   rQ   rQ   rR   get_flat_params   s    rt   )r`   rE   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 ))rY   kinddefault
annotation)inspect	ParameterrY   rv   rw   get_typed_annotationrx   .0paramglobalnsrQ   rR   
<listcomp>   s   
z'get_typed_signature.<locals>.<listcomp>)ry   	signaturegetattr
parametersvalues	Signature)r`   r   Ztyped_paramsZtyped_signaturerQ   r   rR   get_typed_signature   s    

	
r   )rx   r   rE   c                 C   s"   t | trt| } t| ||} | S N)rI   strr
   r   )rx   r   rQ   rQ   rR   r{      s    
r{   c                 C   s6   t | }|j}|t jju r d S t| di }t||S )Nru   )ry   r   return_annotationr   emptyr   r{   )r`   r   rx   r   rQ   rQ   rR   get_typed_return_annotation   s    
r   T)rY   rT   ra   )rW   r`   rY   rT   ra   rE   c                 C   s   t | }t|}|j}t||| ||d}| D ]\}	}
|	|v }t|	|
j|
j|d\}}}|d urt|	|| |d}|j	
| q0t|	||dr|d u s0J d|	q0|d usJ t||dr|j
| q0t||d q0|S )N)r`   rY   rW   rT   ra   )rU   rx   valueis_path_paramr[   rU   type_annotationrj   z0Cannot specify multiple FastAPI annotations for param_fieldr   )rD   rj   )r6   r   r   r.   itemsanalyze_paramrx   rw   r\   rq   re   !add_non_field_param_to_dependencyis_body_paramro   add_param_to_fields)rW   r`   rY   rT   ra   Zpath_param_namesZendpoint_signatureZsignature_paramsrj   rU   r~   r   r   rV   r   rf   rQ   rQ   rR   rc      sT    rc   )rU   r   rj   rE   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'   r>   request_param_namer@   websocket_param_namer=   http_connection_param_namer?   response_param_nameStarletteBackgroundTasksbackground_tasks_param_namer3   security_scopes_param_namer   rQ   rQ   rR   r   %  s&    





r   )rU   rx   r   r   rE   c                 C   s6  d }d }t }t }|tjjur$|}|}t|tu rt|}|d }dd |dd  D }	dd |	D }
|
rr|
d }nd }t|trt	||d}|j
tu s|j
tu sJ d|jj d	| d
|tjjur|rJ d||_
qt|_
nt|tjr|}t|tjr6|d u sJ d| |d u s0J d| |}n4t|trj|d u sZJ d| |}trj||_|d ur|jd u rt|}||_t|ttttttfr|d u sJ d||d u sdJ d|n|d u rd|d u rd|tjjur|nt}|rtj|d}nNt|s*t|r:tj||d}n*t |dsVtj!||d}ntj"||d}d }|d ur,|rt|tjsJ d|jj d| n*t|tj#rt$|dd d u rtj%j&|_'t(||| }|j)st$|dd r| *dd}n|j)p| }||_)t+| ||j
||j
ttfv |d}|||fS )Nr   c                 S   s    g | ]}t |ttjfr|qS rQ   )rI   r7   r   Dependsr}   argrQ   rQ   rR   r   N  s   z!analyze_param.<locals>.<listcomp>   c                 S   s&   g | ]}t |tjtjtjfr|qS rQ   )rI   r   ParamBodyr   r   rQ   rQ   rR   r   S  s   )rH   rx   `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 )rx   )rx   rw   zCannot use `z` for path param in_Zconvert_underscores_-)rY   type_rw   aliasrequiredrH   ),r   ry   r   r   rC   rA   rB   rI   r7   r   rw   r   r   	__class____name__r   r   r   rx   rX   r   r'   r>   r@   r=   r?   r   r3   Pathr%   r&   Filer   r   Queryr   r   
ParamTypesqueryr   r   r   replacer5   )rU   rx   r   r   rH   rV   r   Zuse_annotationZannotated_argsZfastapi_annotationsZfastapi_specific_annotationsZfastapi_annotationdefault_valuerD   Zuse_annotation_from_field_infor   rQ   rQ   rR   r   =  s    




	r   )r   r   rE   c                 C   sp   |rt | dsJ ddS t | dr(dS t| jtjtjfrHt| rHdS t| jtjshJ d| j ddS d S )N)rD   z1Path params must be of one of the supported typesFzParam: z) can only be a request body, using Body()T)	r"   rI   rH   r   r   Headerr#   r   rY   r   rQ   rQ   rR   r     s*    
r   )rD   rj   rE   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|J d| j |j|  d S )Nr   z>non-body parameters must be in path, query, header or cookie: )rH   r   r   r   rW   rk   re   r   rl   headerrm   cookierY   rn   )rD   rj   rH   Zfield_info_inrQ   rQ   rR   r     s    

r   c                 C   s8   t | rt | S t | r"dS t| dd }t |S )NF__call__)ry   	isroutineiscoroutinefunctionisclassr   r`   Zdunder_callrQ   rQ   rR   is_coroutine_callable  s    


r   c                 C   s$   t | rdS t| dd }t |S NTr   )ry   isasyncgenfunctionr   r   rQ   rQ   rR   is_async_gen_callable  s    
r   c                 C   s$   t | rdS t| dd }t |S r   )ry   isgeneratorfunctionr   r   rQ   rQ   rR   is_gen_callable  s    
r   )r`   stack
sub_valuesrE   c                    sJ   t | r tt| f i |}nt| r:t| f i |}||I d H S r   )r   r-   r   r   r,   enter_async_context)r`   r   r   cmrQ   rQ   rR   solve_generator  s
    r   )bodybackground_tasksresponsedependency_overrides_providerdependency_cache)	requestrj   r   r   r   r   r   async_exit_stackrE   c                    s  i }g }	|d u r$t  }|jd= d |_|p*i }|jD ]t}
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|	| q2|
jr|
j
|v r||
j
 }n`t|s2t|rHt|||dI d H }n6t|rh|f i |I d H }nt|fi |I d H }|
jd ur|||
j< |
j
|vr2|||
j
< q2t|j| j\}}t|j| j\}}t|j| j\}}t|j| j \}}|| || || || |	|| | | 7 }	|j!rbt"|j!|dI d H \}}|| |	| |j#rt| ||j#< |j$rt%| t&r| ||j$< n|j'rt%| t(r| ||j'< |j)r|d u rt* }|||j)< |j+r|||j+< |j,r t-|jd||j,< ||	|||fS )	Nzcontent-length.dependency_overrides)rW   r`   rY   rT   )r   rj   r   r   r   r   r   r   )r`   r   r   )required_paramsreceived_body)r_   ).r?   headersstatus_coderq   r   r   r   r`   r   r   rp   r   r   getrW   rc   rY   rT   solve_dependenciesupdaterb   ra   r   r   r   r   r8   request_params_to_argsrk   rl   rm   rn   cookiesro   request_body_to_argsr   r   rI   r>   r   r@   r   r+   r   r   r3   )r   rj   r   r   r   r   r   r   r   errorsrf   r`   Zuse_sub_dependantZoriginal_callZuse_pathZsolved_resultr   Z
sub_errorsr   Zsub_dependency_cacheZsolvedZpath_valuesZpath_errorsZquery_valuesZquery_errorsheader_valuesZheader_errorsZcookie_valuesZcookie_errorsZbody_valuesZbody_errorsrQ   rQ   rR   r     s    
















r   )r   received_paramsrE   c                 C   s   i }g }| D ]}t |r:t|ttfr:||jp6|j}n||j}|j}t|t	j
s`J d|jj|jf}|d u r|jr|t|d qt|j||j< q|j|||d\}}	t|	tr||	 qt|	trt|	dd}
||
 q|||j< q||fS )Nz"Params must be subclasses of ParamlocrQ   )r   Z
loc_prefix)r#   rI   r;   r:   getlistr   rw   r   rH   r   r   r   r   r   re   r   r   rY   validater   listr   rb   )r   r   r   r   rD   r   rH   r   v_errors_Z
new_errorsrQ   rQ   rR   r     s8    


r   )r   r   rE   c              
      s  i }g }| rx| d }|j }t|dd }t| dko8| }|rH|j|i}| D ](}|r\d}n
d|jf}d }	|d urt|rt|tr||j}	n6z||j}	W n$ t	y   |
t| Y qLY n0 |	d u st|tjr|	dkst|tjr8t|r8t|	dkr8|jr&|
t| qLt|j||j< qLt|tjrlt|rlt|	trl|	 I d H }	nt|r.t|tjr.t|	r.t|	tsJ g  tg ttttf f d d fdd	}
t 4 I d H 2}|	D ]}||
|j qW d   I d H  q"1 I d H s0    Y  t| d
}	|j |	||d\}}t|t!rZ|"| qL|rl|
| qL|||j< qL||fS )Nr   embedr   )r   r    )fnrE   c                    s   |  I d H }  | d S r   )re   )r   resultresultsrQ   rR   
process_fn  s    z(request_body_to_args.<locals>.process_fn)rD   r   r   )#rH   r   lenr   r$   rI   r9   r   r   AttributeErrorre   r   r   rJ   r   r   rw   rY   r   r    r<   readr!   r*   r(   r   r   r   anyioZcreate_task_groupZ
start_soonr)   r   r   rb   )r   r   r   r   rD   rH   r   Zfield_alias_omittedr   r   r   tgZ	sub_valuer   r   rQ   r   rR   r     s    






	

@r   )rj   rY   rE   c              	   C   sH  t | }|jsd S |jd }|j}t|dd }dd |jD }t|dkrZ|sZt| |S |jD ]}t|jdd q`d| }t|j|d}	td	d
 |jD }
|	dd}|
sd |d< tdd
 |jD rt	j
}nPtdd
 |jD rt	j}n4t	j}dd |jD }tt|dkr |d |d< td|	|
d|f i |d}t| |S )Nr   r   c                 S   s   h | ]
}|j qS rQ   )rY   r|   rQ   rQ   rR   	<setcomp>      z!get_body_field.<locals>.<setcomp>r   TZBody_)fields
model_namec                 s   s   | ]}|j rd V  qdS )TN)r   r}   frQ   rQ   rR   	<genexpr>  r   z!get_body_field.<locals>.<genexpr>r   )rx   r   rw   c                 s   s   | ]}t |jtjV  qd S r   )rI   rH   r   r   r   rQ   rQ   rR   r     r   c                 s   s   | ]}t |jtjV  qd S r   )rI   rH   r   rJ   r   rQ   rQ   rR   r     r   c                 S   s"   g | ]}t |jtjr|jjqS rQ   )rI   rH   r   r   
media_typer   rQ   rQ   rR   r   #  s   z"get_body_field.<locals>.<listcomp>r   )rY   r   r   r   rH   )rr   ro   rH   r   r   rS   setattrr   anyr   r   rJ   r   setr5   )rj   rY   rs   Zfirst_paramrH   r   Zbody_param_names_setr~   r   Z	BodyModelr   ZBodyFieldInfo_kwargsZBodyFieldInfoZbody_param_media_typesZfinal_fieldrQ   rQ   rR   get_body_field  sR    

r   )vry   
contextlibr   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*   Zfastapi.backgroundr+   Zfastapi.concurrencyr,   r-   Zfastapi.dependencies.modelsr.   r/   Zfastapi.loggerr0   Zfastapi.security.baser1   Zfastapi.security.oauth2r2   r3   Z$fastapi.security.open_id_connect_urlr4   Zfastapi.utilsr5   r6   Zpydantic.fieldsr7   Zstarlette.backgroundr   Zstarlette.concurrencyr8   Zstarlette.datastructuresr9   r:   r;   r<   Zstarlette.requestsr=   r>   Zstarlette.responsesr?   Zstarlette.websocketsr@   Ztyping_extensionsrA   rB   rC   rP   rN   rS   r   r   r\   r^   rZ   ZCacheKeyboolrr   rt   r   r   r{   r   rc   r   r   r   r   r   r   r   r   r   r   r   r   rQ   rQ   rQ   rR   <module>   s   <d



  
#


5 	
"
 $R