o
    il                     @   s  d dl Z d dlZd dlZd dlmZmZmZmZmZm	Z	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/m0Z0m1Z1m2Z2 d d	l3m4Z4 d d
l5m6Z6m7Z7 d dl8m9Z9 d dl:m;Z; d dl<m=Z= d dl>m?Z? d dl@mAZA d dlBmCZCmDZD d dlEmFZFmGZG d dlHmIZI d d	lJm4ZK d dlLmMZM d dlNmOZOmPZPmQZQmRZRmSZS d dlTmUZUmVZV d dlWmXZX d dlYmZZZ d dl[m\Z\ dZ]dZ^dddZ_dej`deade9fd d!Zbd"ddd#d$e9d%ecd&edeA dB d'edea dB de9f
d(d)Zed*ede dede fd+d,Zfd$e9dede fd-d.Zgd/ed0ef dejhfd1d2Zid/ed0ef dejhfd3d4Zjd5ed6ekeaef defd7d8Zld/ed0ef defd9d:Zmeeee	e
ehZnd5ededB fd;d<Zodddd=dd>dead/ed0ef d?eadB d@edea dB d'edea dB dAecdBedC dB de9fdDdEZpdFeadGed$e9decdB fdHdIZqeG dJdK dKZrdFead5edLedMecderf
dNdOZsdPed$e9ddfdQdRZtd$e9dSedTekeaef defdUdVZueG dWdX dXZvddddddYdZeVeZB d$e9d[ekeaef eOB dB d\eKdB d]eXdB d^edB d_ekeAef dB d`edaecdevfdbdcZwdPedLeddekeaef deexead0f dexeede f f
dfdgZydPedecfdhdiZz	ddPeddeeaef djeadB defdkdlZ{d*ee dmeeaef eRB ePB dexekeaef ede f fdndoZ|dpedecfdqdrZ}d*ede decfdsdtZ~duede dveOdekeaef fdwdxZduede dvekeaef eOB dB daecdexekeaef edekeaef  f fdydzZd{e9d?eadaecdedB fd|d}ZdPedeafd~dZdS )    N)	AsyncGeneratorAsyncIterableAsyncIteratorCallable	GeneratorIterableIterator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)Zpython_multipartrF   ImportErrorAssertionError	multipartZmultipart.multipartrG   r2   error!multipart_incorrect_install_errorRuntimeErrormultipart_not_installed_error)rF   rG    rO   Q/home/app/Keep/.python/lib/python3.10/site-packages/fastapi/dependencies/utils.pyensure_multipart_is_installed^   s(   



rQ   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)rS   callscopeown_oauth_scopes)	callable
dependency
isinstancer   Securityscopesextendget_dependantrU   )rR   rS   rV   rO   rO   rP   get_parameterless_sub_dependanty   s   r^   Fskip_repeatsvisitedparent_oauth_scopes	dependantr`   ra   rb   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namerT   request_param_namewebsocket_param_namehttp_connection_param_nameresponse_param_namebackground_tasks_param_namesecurity_scopes_param_namerV   rb   	use_cacherS   rU   r_   rO   )append	cache_keyoauth_scopesr0   rd   r   re   rf   rg   rh   ri   rT   rj   rk   rl   rm   rn   ro   rV   rp   rS   rU   dependenciesget_flat_dependantr\   )rc   r`   ra   rb   Zuse_parent_oauth_scopesflat_dependantsub_dependantZflat_subrO   rO   rP   ru      sx   




	

ru   fieldsc                 C   s>   | s| S | d }t | dkrt|jjtrt|jj}|S | S )Nr      )lenr)   
field_info
annotationr7   r"   )rx   first_fieldfields_to_extractrO   rO   rP   _get_flat_fields_from_params   s   r   c                 C   sD   t | dd}t|j}t|j}t|j}t|j}|| | | S )NT)r`   )ru   r   rd   re   rf   rg   )rc   rv   rd   re   rf   rg   rO   rO   rP   get_flat_params   s   



r   rT   .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)Zannotation_format)inspect	signature	NameErrorsysversion_infoZannotationlibr   Z
FORWARDREF)rT   r   r   rO   rO   rP   _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 ))ri   kinddefaultr|   )r   	Parameterri   r   r   get_typed_annotationr|   ).0paramglobalnsrO   rP   
<listcomp>   s    
z'get_typed_signature.<locals>.<listcomp>)r   r   unwrapgetattr
parametersvalues	Signature)rT   r   	unwrappedZtyped_paramsZtyped_signaturerO   r   rP   get_typed_signature   s   


	r   r|   r   c                 C   s2   t | trt| } t| ||} | td u rd S | S N)rY   strr   r   type)r|   r   rO   rO   rP   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   )rT   r   r   r|   r   rO   rO   rP   get_typed_return_annotation   s   

r   c                 C   s4   t | }|d ur|tv rt| }|r|d S tS d S )Nr   )r   _STREAM_ORIGINSr   r   )r|   originZ	type_argsrO   rO   rP   get_stream_item_type  s   r   T)ri   rV   rb   rp   rU   ri   rV   rp   rU   )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)rT   ri   rS   rp   rU   rV   rb   )
param_namer|   valueis_path_paramr   r   zThe dependency "zS" has a scope of "request", it cannot depend on dependencies with scope "function".)rS   rT   ri   rV   rb   rp   rU   r   type_annotationrc   z0Cannot specify multiple FastAPI annotations for )fieldrc   )!r0   r6   r   r   itemsanalyze_paramr|   r   rR   rX   is_gen_callableis_async_gen_callableZcomputed_scoperU   rT   r1   __name__rY   r   rZ   r[   listr]   rp   rt   rq   !add_non_field_param_to_dependencyr   r   r{   Bodyrh   add_param_to_fields)rS   rT   ri   rV   rb   rp   rU   rc   Zcurrent_scopesZpath_param_namesZendpoint_signatureZsignature_paramsr   r   r   Zparam_detailsZsub_own_oauth_scopesrw   rO   rO   rP   r]     s|   
	


	r]   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)   rA   rj   rC   rk   r@   rl   rB   rm   StarletteBackgroundTasksrn   r3   ro   r   rO   rO   rP   r   g  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   NrR   r   )r   
__module____qualname__r   __annotations__r   Dependsr   rO   rO   rO   rP   r     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 rO   )rY   r9   r   r   r   argrO   rO   rP   r     s    z!analyze_param.<locals>.<listcomp>ry   c                 S   s&   g | ]}t |tjtjtjfr|qS rO   )rY   r   Paramr   r   r   rO   rO   rP   r     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 )rX   z+Cannot specify FastAPI annotation for type )r|   )r|   r   zCannot use `z` for path param in_convert_underscores_-)ri   type_r   aliasr{   r   z1Path params must be of one of the supported typeszQuery parameter z# must be one of the supported types)r   rR   r   )4r   rD   Z	__value__r   r   r   r   r   r   rY   r9   r   r   r   r   	__class__r   r   r   r|   rX   r   dataclassesreplacer)   rA   rC   r@   rB   r   r3   Pathr'   r(   Filer   r   ZQueryr   r   
ParamTypesqueryr   FormrQ   r   r5   r&   r    r{   r7   r   )r   r|   r   r   r{   rR   r   Zuse_annotationZannotated_argsZfastapi_annotationsZfastapi_specific_annotationsZfastapi_annotationdefault_valuer   Zuse_annotation_from_field_infor   rO   rO   rP   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   rS   rd   rq   r   re   headerrf   cookieri   rg   )r   rc   r{   Zfield_info_inrO   rO   rP   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 )NrO   )rT   r   r.   r   r/   r   enter_async_context)rc   r   r   cmrO   rO   rP   _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   rB   r4   rO   rO   rO   rP   r   J  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)rS   rT   ri   rb   rU   )	r   rc   r   r   r   r   r   r   r   r   )rc   r   r   )body_fieldsreceived_bodyr   )r[   )r   r   r   r   r   rO   )2rU   getrY   r   rB   headersstatus_codert   r   r   r   rT   r   r   rS   r]   ri   rs   solve_dependenciesr   r   r\   rp   rr   r   r   r   r   Zis_coroutine_callabler:   request_params_to_argsrd   re   rf   rg   cookiesupdaterh   request_body_to_argsrl   rj   rA   rk   rC   rn   r-   rm   ro   r3   r   )r   rc   r   r   r   r   r   r   r   Zrequest_astackZfunction_astackr   r   rw   rT   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_errorsrO   rO   rP   r   S  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   )r{   is_requiredr#   r   r   validater   r   r   r   rO   rO   rP    _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   r8   )r   itemrO   rO   rP   	<genexpr>  s    z!_is_json_field.<locals>.<genexpr>)anyr{   metadatar   rO   rO   rP   _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!   r{   r|   rY   r=   r<   getlistr   r   r   r   rz   r   r   r   )r   r   r   r   rO   rO   rP   _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   FTry   r   r   r   )r   r   z"Params must be subclasses of Paramr   )rz   r)   r{   r|   r7   r"   r   setrY   r<   r   ri   r   r   addkeyshasattrr   r   r   r   r   r   r   r   r\   )rx   r   r   r   r}   r~   single_not_embedded_fieldZdefault_convert_underscoresZparams_to_processZprocessed_keysr   r   r   r   keyr{   r   v_errors_rO   rO   rP   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)   r7   )r  r  r   Z
union_argsr   rO   rO   rP   is_union_of_base_modelsb  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r6t|jjts6t	|jjs6dS dS )NFc                 S   s   h | ]}|j qS rO   )ri   r   r   rO   rO   rP   	<setcomp>z  s    z,_should_embed_body_fields.<locals>.<setcomp>ry   Tr   Zembed)
rz   r   r{   rY   r   r   r)   r|   r7   r  )rx   Zbody_param_names_setr}   rO   rO   rP   _should_embed_body_fieldsu  s    
r  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 rO   )r   r	  rO   rO   rP   r
    s    z%_extract_form_body.<locals>.<setcomp>ry   r   )r   r{   rY   r   r   r$   r|   r?   readr%   r,   r*   rq   r+   r   r   r   rz   )r   r   r   r   r   r{   resultsZ	sub_valueZfield_aliasesr  Zparam_valuesrO   rO   rP   _extract_form_body  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 fieldsry   r   )r   r   r   )rz   r)   r{   r|   r7   rY   r;   r"   r  r   ri   r   r   AttributeErrorrq   r#   r\   )r   r   r   r   r   r  r}   Zbody_to_processr~   r   r  r  r   r   rO   rO   rP   r     sP   


r   rv   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   ZBody_)rx   
model_namec                 s   s    | ]
}|j  rd V  qdS )TN)r{   r   r   frO   rO   rP   r     s    

z!get_body_field.<locals>.<genexpr>r   )r|   r   r   c                 s       | ]
}t |jtjV  qd S r   )rY   r{   r   r   r  rO   rO   rP   r         c                 s   r  r   )rY   r{   r   r   r  rO   rO   rP   r     r  c                 S   s"   g | ]}t |jtjr|jjqS rO   )rY   r{   r   r   
media_typer  rO   rO   rP   r     s    z"get_body_field.<locals>.<listcomp>ry   r  )ri   r   r   r{   rO   )
rh   r   r   r   r   r   r   rz   r   r5   )rv   ri   r   Zfirst_paramr  Z	BodyModelrequiredZBodyFieldInfo_kwargsZBodyFieldInfoZbody_param_media_typesZfinal_fieldrO   rO   rP   get_body_field  sD   
r  c                 C   s   t | dd }|p
| jS )NZvalidation_alias)r   r   )r   varO   rO   rP   r     s   
r   )rE   Nr   )r   r   r   collections.abcr   r   r   r   r   r   r   r	   r
   
contextlibr   r   r   r   r   typingr   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,   Zfastapi.backgroundr-   Zfastapi.concurrencyr.   r/   Zfastapi.dependencies.modelsr0   Zfastapi.exceptionsr1   Zfastapi.loggerr2   Zfastapi.security.oauth2r3   r  r4   Zfastapi.utilsr5   r6   Zpydanticr7   r8   Zpydantic.fieldsr9   Zstarlette.backgroundr   Zstarlette.concurrencyr:   Zstarlette.datastructuresr;   r<   r=   r>   r?   Zstarlette.requestsr@   rA   Zstarlette.responsesrB   Zstarlette.websocketsrC   Z typing_inspection.typing_objectsrD   rN   rL   rQ   r   r   r^   boolr   ru   r   r   r   r   r   r   r   r   r   r   r]   r   r   r   r   r   r   r   tupler   r   r   r   r  r  r  r   r  r   rO   rO   rO   rP   <module>   s   ,(X

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