o
    bi_                     @   s  d dl Z d dlZd dlZd dlmZmZm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 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, d d	l-m.Z. d d
l/m0Z0m1Z1 d dl2m3Z3 d dl4m5Z5 d dl6m7Z7 d dl8m9Z9 d dl:m;Z; d dl<m=Z=m>Z> d dl?m@Z@mAZA d dlBmCZC d d	lDm.ZE d dlFmGZG d dlHmIZImJZJmKZKmLZLmMZM d dlNmOZOmPZP d dlQmRZR d dlSmTZT d dlUmVZV dZWdZXd~ddZYdejZde[de3fd d!Z\d"ddd#d$e3d%e]d&e^e; dB d'e^e[ dB de3f
d(d)Z_d*e^e de^e fd+d,Z`d$e3de^e fd-d.Zad/ed0ef dejbfd1d2Zcd/ed0ef dejbfd3d4Zdd5ed6eee[ef defd7d8Zfd/ed0ef defd9d:Zgdddd;dd<de[d/ed0ef d=e[dB d>e^e[ dB d'e^e[ dB d?e]d@edA dB de3fdBdCZhdDe[dEed$e3de]dB fdFdGZieG dHdI dIZjdDe[d5edJedKe]dejf
dLdMZkdNed$e3ddfdOdPZld$e3dQedReee[ef defdSdTZmeG dUdV dVZnddddddWdXePeTB d$e3dYeee[ef eIB dB dZeEdB d[eRdB d\edB d]eee;ef dB d^ed_e]denfd`daZodNedJedbeee[ef dcepe[d0f depee^e f f
dddeZqdNede]fdfdgZr	ddNedbee[ef dhe[dB defdidjZsd*ee dkee[ef eLB eJB depeee[ef e^e f fdldmZtdnede]fdodpZud*e^e de]fdqdrZvdse^e dteIdeee[ef fdudvZwdse^e dteee[ef eIB dB d_e]depeee[ef e^eee[ef  f fdwdxZxdye3d=e[d_e]dedB fdzd{ZydNede[fd|d}ZzdS )    N)CallableMappingSequence)AsyncExitStackcontextmanager)copydeepcopy)	dataclass)	AnnotatedAny
ForwardRefLiteralUnioncastget_args
get_origin)params)
ModelFieldRequiredParam	Undefinedcopy_field_infocreate_body_modelevaluate_forwardreffield_annotation_is_scalar#field_annotation_is_scalar_sequencefield_annotation_is_sequenceget_cached_model_fieldsget_missing_field_error$is_bytes_or_nonable_bytes_annotationis_bytes_sequence_annotationis_scalar_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)DependencyScopeError)logger)SecurityScopes)DependencyCacheKey)create_model_fieldget_path_param_names)	BaseModelJson)	FieldInfo)run_in_threadpool)FormDataHeadersImmutableMultiDictQueryParams
UploadFile)HTTPConnectionRequest)Response)	WebSocket)is_typealiastypezForm 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_multipartr@   ImportErrorAssertionError	multipartmultipart.multipartrA   r,   error!multipart_incorrect_install_errorRuntimeErrormultipart_not_installed_error)r@   rA    rK   \/sda-disk/www/egybert/egybert_env/lib/python3.10/site-packages/fastapi/dependencies/utils.pyensure_multipart_is_installedT   s(   



rM   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)rO   callscopeown_oauth_scopes)	callable
dependency
isinstancer   Securityscopesextendget_dependantrQ   )rN   rO   rR   rK   rK   rL   get_parameterless_sub_dependanto   s   rZ   Fskip_repeatsvisitedparent_oauth_scopes	dependantr\   r]   r^   c                C   sh  |d u rg }| | j |pg | jpg  }tdi d| j d| j d| j d| j d| j	 d| j
d| jd| jd	| jd
| jd| jd| jd| jd| jd|d| jd| jd| j}| jD ]C}|rx|j|v rxqnt||||jd}|j | |j|j |j|j |j|j |j|j |j	|j	 |j|j qn|S )Npath_paramsquery_paramsheader_paramscookie_paramsbody_paramsnamerP   request_param_namewebsocket_param_namehttp_connection_param_nameresponse_param_namebackground_tasks_param_namesecurity_scopes_param_namerR   r^   	use_cacherO   rQ   r[   rK   )append	cache_keyoauth_scopesr*   r`   r   ra   rb   rc   rd   re   rP   rf   rg   rh   ri   rj   rk   rR   rl   rO   rQ   dependenciesget_flat_dependantrX   )r_   r\   r]   r^   use_parent_oauth_scopesflat_dependantsub_dependantflat_subrK   rK   rL   rq   ~   sx   




	

rq   fieldsc                 C   s>   | s| S | d }t | dkrt|jjtrt|jj}|S | S )Nr      )lenr#   
field_info
annotationr1   r   )rv   first_fieldfields_to_extractrK   rK   rL   _get_flat_fields_from_params   s   r}   c                 C   sD   t | dd}t|j}t|j}t|j}t|j}|| | | S )NT)r\   )rq   r}   r`   ra   rb   rc   )r_   rs   r`   ra   rb   rc   rK   rK   rL   get_flat_params   s   



r~   rP   .c                 C   s`   z
t j| dd}W |S  ty/   tjdkr'ddlm} t j| |jd}Y |S t | }Y |S w )NT)eval_str)      r   )Format)annotation_format)inspect	signature	NameErrorsysversion_infoannotationlibr   
FORWARDREF)rP   r   r   rK   rK   rL   _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 ))re   kinddefaultrz   )r   	Parameterre   r   r   get_typed_annotationrz   ).0paramglobalnsrK   rL   
<listcomp>   s    
z'get_typed_signature.<locals>.<listcomp>)r   r   unwrapgetattr
parametersvalues	Signature)rP   r   	unwrappedtyped_paramstyped_signaturerK   r   rL   get_typed_signature   s   


	r   rz   r   c                 C   s2   t | trt| } t| ||} | td u rd S | S N)rU   strr   r   type)rz   r   rK   rK   rL   r      s   
r   c                 C   s>   t | }t| }|j}|tjju rd S t|di }t||S )Nr   )r   r   r   return_annotationr   emptyr   r   )rP   r   r   rz   r   rK   rK   rL   get_typed_return_annotation   s   

r   T)re   rR   r^   rl   rQ   re   rR   rl   rQ   )functionrequestc              
   C   s  t ||| ||||d}|pg |pg  }t| }	t|}
|
j}| D ]\}}||	v }t||j|j|d}|jd ur|jj	s?J |j
sE|jr_|jdkr_|jjdkr_|jsUJ td|jj dg }t|jtjrr|jjrrt|jj}t| |jj	||||jj|jjd}|j| q"t||j|dr|jd u sJ d	|q"|jd usJ t|jjtjr|j|j q"t |j|d
 q"|S )N)rP   re   rO   rl   rQ   rR   r^   )
param_namerz   valueis_path_paramr   r   zThe dependency "zS" has a scope of "request", it cannot depend on dependencies with scope "function".)rO   rP   re   rR   r^   rl   rQ   r   type_annotationr_   z0Cannot specify multiple FastAPI annotations for )fieldr_   )!r*   r0   r   r   itemsanalyze_paramrz   r   rN   rT   is_gen_callableis_async_gen_callablecomputed_scoperQ   rP   r+   __name__rU   r   rV   rW   listrY   rl   rp   rm   !add_non_field_param_to_dependencyr   r   ry   Bodyrd   add_param_to_fields)rO   rP   re   rR   r^   rl   rQ   r_   current_scopespath_param_namesendpoint_signaturesignature_paramsr   r   r   param_detailssub_own_oauth_scopesrt   rK   rK   rL   rY      s|   
	


	rY   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#   r;   rf   r=   rg   r:   rh   r<   ri   StarletteBackgroundTasksrj   r-   rk   r   rK   rK   rL   r   I  s&   





r   c                   @   s0   e Zd ZU eed< ejdB ed< edB ed< dS )ParamDetailsr   NrN   r   )r   
__module____qualname__r   __annotations__r   Dependsr   rK   rK   rK   rL   r   a  s   
 r   r   r   c                 C   s  d }d }t }t }t|r|j}|tjjur|}|}t|tu rt|}|d }dd |dd  D }	dd |	D }
|
r@|
d }nd }t	|t
rxt||d}|jtksd|jtksdJ d|jj d	| d
|tjjurt|rpJ d||_nt|_nt	|tjr|}t	|tjr|d u sJ d| |d u sJ d| |}nt	|t
r|d u sJ d| |}t	|t
r||_|d ur|jd u rt|}tj||d}|d u rt|ttttttfr|d u sJ d|nE|d u r-|d u r-|tjjur|nt}|rtj|d}n't |st!|rtj"||d}nt#|ds&tj$||d}ntj%||d}d }|d ur|rKt	|tjsJJ d|jj d| nt	|tj&r`t'|dd d u r`tj(j)|_*|}t	|tj+rlt,  |j-s~t'|dd r~| dd}n|j-p| }||_-t.| ||j||d}|rt/|dsJ dn#t	|tj%rt/|st0|j1jst|j1jt2sJ d| dt3|||dS )Nr   c                 S   s    g | ]}t |ttjfr|qS rK   )rU   r3   r   r   r   argrK   rK   rL   r   }  s    z!analyze_param.<locals>.<listcomp>rw   c                 S   s&   g | ]}t |tjtjtjfr|qS rK   )rU   r   Paramr   r   r   rK   rK   rL   r     s    )ry   rz   `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 )rT   z+Cannot specify FastAPI annotation for type )rz   )rz   r   zCannot use `z` for path param in_convert_underscores_-)re   type_r   aliasry   r   z1Path params must be of one of the supported typeszQuery parameter z# must be one of the supported types)r   rN   r   )4r   r>   	__value__r   r   r   r   r
   r   rU   r3   r   r   r   r   	__class__r   r   r   rz   rT   r   dataclassesreplacer#   r;   r=   r:   r<   r   r-   Pathr!   r"   Filer   r   Queryr   r   
ParamTypesqueryr   FormrM   r   r/   r    r   ry   r1   r   )r   rz   r   r   ry   rN   r   use_annotationannotated_argsfastapi_annotationsfastapi_specific_annotationsfastapi_annotationdefault_valuer   use_annotation_from_field_infor   rK   rK   rL   r   h  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: )ry   r   r   r   rO   r`   rm   r   ra   headerrb   cookiere   rc   )r   r_   ry   field_info_inrK   rK   rL   r     s   
r   stack
sub_valuesc                    sV   | j sJ | jrt| j di |}n| jr#tt| j di |}||I d H S )NrK   )rP   r   r(   r   r)   r   enter_async_context)r_   r   r   cmrK   rK   rL   _solve_generator!  s   
r   c                   @   sN   e Zd ZU eeef ed< ee ed< edB ed< e	ed< ee
ef ed< dS )SolvedDependencyr   errorsNbackground_tasksresponsedependency_cache)r   r   r   dictr   r   r   r   r   r<   r.   rK   rK   rK   rL   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)rO   rP   re   r^   rQ   )	r   r_   r   r   r   r   r   r   r   r   )r_   r   r   )body_fieldsreceived_bodyr   )rW   )r   r   r   r   r   rK   )2rQ   getrU   r   r<   headersstatus_coderp   r   r   r   rP   r   r   rO   rY   re   ro   solve_dependenciesr   r   rX   rl   rn   r   r   r   r   is_coroutine_callabler4   request_params_to_argsr`   ra   rb   rc   cookiesupdaterd   request_body_to_argsrh   rf   r;   rg   r=   rj   r'   ri   rk   r-   r   )r   r_   r   r   r   r   r   r   r   request_astackfunction_astackr   r   rt   rP   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_errorsrK   rK   rL   r   5  s   

















r   r   locc                 C   s@   |d u r| j  rd t|dgfS t| jg fS | j|||dS )N)r  )ry   is_requiredr   r   r   validater   r   r   r  rK   rK   rL    _validate_value_with_model_field  s
   
r  c                 C   s   t dd | jjD S )Nc                 s   s    | ]	}t |tu V  qd S r   )r   r2   )r   itemrK   rK   rL   	<genexpr>  s    z!_is_json_field.<locals>.<genexpr>)anyry   metadatar   rK   rK   rL   _is_json_field  s   r  r   c                 C   s   |pt | }t| st| jjrt|ttfr||}n|	|d }|d u sCt| jt
jr7t|tr7|dksCt| jjrOt|dkrO| j rJd S t| jS |S )N r   )get_validation_aliasr  r   ry   rz   rU   r7   r6   getlistr   r   r   r   rx   r  r   r   )r   r   r   r   rK   rK   rL   _get_multidict_value  s,   



r  received_paramsc                 C   s
  i }g }| s
||fS | d }| }d}d}t | dkr0t|jjtr0t|jj}d}t|jdd}i }t }	|D ];}
d }t|t	rXt|
jd|}|rXt
|
}||
jkrX|dd}t|
||d}|d uri||t
|
< |	|ppt
|
 q7| D ].}||	vrt|d	r||}t|trt |dkr|d ||< qw|||< qw||||< qw|r|j}t|tjsJ d
|jjf}t||||d\}}|j|i|fS | D ]3}
t|
|}|
j}t|tjsJ d
|jjt
|
f}t|
|||d\}}|r|| q|||
j< q||fS )Nr   FTrw   r   r   r   )r   r  z"Params must be subclasses of Paramr  )rx   r#   ry   rz   r1   r   r   setrU   r6   r  re   r   r  addkeyshasattrr  r   r   r   r   r   r   r  rX   )rv   r   r   r   r{   r|   single_not_embedded_fielddefault_convert_underscoresparams_to_processprocessed_keysr   r   r   r   keyry   r  v_errors_rK   rK   rL   r     s   








r   
field_typec                 C   sN   ddl m} t| }|tur||urdS t| }|D ]
}t|ts$ dS qdS )zJCheck if field type is a Union where all members are BaseModel subclasses.r   )	UnionTypeFT)fastapi.typesr-  r   r   r   r#   r1   )r,  r-  origin
union_argsr   rK   rK   rL   is_union_of_base_modelsD  s   
r1  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r6t|jjts6t	|jjs6dS dS )NFc                 S   s   h | ]}|j qS rK   )re   r   r   rK   rK   rL   	<setcomp>\  s    z,_should_embed_body_fields.<locals>.<setcomp>rw   Tr   embed)
rx   r   ry   rU   r   r   r#   rz   r1   r1  )rv   body_param_names_setr{   rK   rK   rL   _should_embed_body_fieldsW  s    
r6  r   r   c                    s  i }| D ][}t ||}|j}t|tjr(t|jjr(t|tr(| I d H }n.t	|jjrVt|tjrVt
|rVt|ts?J g }|D ]}|| I d H  qCt||d}|d ur`||t|< qdd | D }| D ]}	|	|vr||	}
t|
dkr|
d ||	< ql|
||	< ql|S )N)r   r   c                 S   s   h | ]}t |qS rK   )r  r2  rK   rK   rL   r3    s    z%_extract_form_body.<locals>.<setcomp>rw   r   )r  ry   rU   r   r   r   rz   r9   readr   r&   r$   rm   r%   r  r#  r  rx   )r   r   r   r   r   ry   results	sub_valuefield_aliasesr)  param_valuesrK   rK   rL   _extract_form_bodyo  sF   





r<  c              	      s0  i }g }| sJ dt | dko| }| d }|}| }|r0t|jjtr0t|tr0t|jj}t|tr=t||I d H }|rRd}	t	||||	d\}
}|j
|
i|fS | D ]?}dt|f}	d }|d ur|z	|t|}W n ty{   |t|	 Y qTw t	||||	d\}
}|r|| qT|
||j
< qT||fS )Nz3request_body_to_args() should be called with fieldsrw   r   )r   r  r   )rx   r#   ry   rz   r1   rU   r5   r   r<  r  re   r  r   AttributeErrorrm   r   rX   )r   r   r   r   r   r%  r{   body_to_processr|   r  r*  r+  r   r   rK   rK   rL   r     sP   


r   rs   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}n'tdd | j D rJtj}ntj}dd | j D }	tt|	dkrc|	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_)rv   
model_namec                 s   s    | ]
}|j  rd V  qdS )TN)ry   r  r   frK   rK   rL   r    s    

z!get_body_field.<locals>.<genexpr>r   )rz   r   r   c                 s       | ]
}t |jtjV  qd S r   )rU   ry   r   r   rA  rK   rK   rL   r        c                 s   rC  r   )rU   ry   r   r   rA  rK   rK   rL   r    rD  c                 S   s"   g | ]}t |jtjr|jjqS rK   )rU   ry   r   r   
media_typerA  rK   rK   rL   r     s    z"get_body_field.<locals>.<listcomp>rw   rE  )re   r   r   ry   rK   )
rd   r   r  r   r   r   r   rx   r!  r/   )rs   re   r   first_paramr@  	BodyModelrequiredBodyFieldInfo_kwargsBodyFieldInfobody_param_media_typesfinal_fieldrK   rK   rL   get_body_field  sD   
rM  c                 C   s   t | dd }|p
| jS )Nvalidation_alias)r   r   )r   varK   rK   rL   r    s   
r  )r?   Nr   ){r   r   r   collections.abcr   r   r   
contextlibr   r   r   r   r	   typingr
   r   r   r   r   r   r   r   fastapir   fastapi._compatr   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   fastapi.backgroundr'   fastapi.concurrencyr(   r)   fastapi.dependencies.modelsr*   fastapi.exceptionsr+   fastapi.loggerr,   fastapi.security.oauth2r-   r.  r.   fastapi.utilsr/   r0   pydanticr1   r2   pydantic.fieldsr3   starlette.backgroundr   starlette.concurrencyr4   starlette.datastructuresr5   r6   r7   r8   r9   starlette.requestsr:   r;   starlette.responsesr<   starlette.websocketsr=    typing_inspection.typing_objectsr>   rJ   rH   rM   r   r   rZ   boolr   rq   r}   r~   r   r   r   r   r   r   rY   r   r   r   r   r   r   r   tupler  r  r  r   r1  r6  r<  r   rM  r  rK   rK   rK   rL   <module>   s   (X




6		



	
K

 *


 





U

'
2
6