U
    RhΏ                     @   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/m0Z0m1Z1m2Z2 d dl3m4Z4 d d	l5m6Z6m7Z7 d d
l8m9Z9m:Z: d dl;m<Z< d dl=m>Z> d dl?m@Z@mAZA d dlBmCZC d dlDmEZEmFZF d dlGmHZH d dlImJZJ d dlKm4ZL d dlMmNZN d dlOmPZPmQZQmRZRmSZSmTZT d dlUmVZVmWZW d dlXmYZY d dlZm[Z[ d dl\m]Z]m^Z^m_Z_ ej`dkrd dl maZa nd dlbmaZa dZcdZdddddZeddefejgefeeef  e9d d!d"Zhejgefe9d#d$d%Ziddd&ejged'e
f efeef eeef  e9d(d)d*Zjeeed'e
f  eefd'f f Zkd+dd,e9eleeek  e9d-d.d/Zmee ee d0d1d2Zne9ee d3d4d5Zoed'e
f e jpd6d7d8Zqe
eefe
f e
d9d:d;Zred'e
f e
d6d<d=Zsddd>d?efed'e
f eef eeef  ele9d@dAdBZtefe
e9eel dCdDdEZueG dFdG dGZvefe
e
elevdHdIdJZwee9ddKdLdMZxed'e
f eld6dNdOZyed'e
f eld6dPdQZzed'e
f eld6dRdSZ{ed'e
f eeefe
f e
dTdUdVZ|eG dWdX dXZ}ddddddYeeWe[f e9eeeefe
f ePf  eeL eeY ee
 eeeed'e
f eef f e
f  eele}dZ
d[d\Z~ee
eefe
f eefd'f ee
ee
 f d]d^d_Zdteeefe
f eefdf e
d`dadbZee eeefe
f eSeQf eeefe
f ee
 f dcdddeZe
eldfdgdhZee eld0didjZee ePeefe
f dkdldmZee eeeefe
f ePf  eleeefe
f eeefe
f  f dndodpZe9efelee dqdrdsZdS )u    N)AsyncExitStackcontextmanager)copydeepcopy)	dataclass)AnyCallable	CoroutineDict
ForwardRefListMappingOptionalSequenceTupleTypeUnioncast)params)PYDANTIC_V2ErrorWrapper
ModelFieldRequiredParam	Undefined_regenerate_error_with_loc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sequence_typesserialize_sequence_valuevalue_is_sequence)BackgroundTasks)asynccontextmanagercontextmanager_in_threadpool)	DependantSecurityRequirement)logger)SecurityBase)OAuth2SecurityScopes)OpenIdConnect)create_model_fieldget_path_param_names)	BaseModel)	FieldInfo)run_in_threadpool)FormDataHeadersImmutableMultiDictQueryParams
UploadFile)HTTPConnectionRequest)Response)	WebSocket)	Annotatedget_args
get_origin)      )iscoroutinefunctionzForm 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tW n ttfk
r   zZddlm}  | sFtzddlm} |s\tW n( tk
r   tt	 t
t	d Y nX W n( tk
r   tt t
td Y nX Y nX d S )Nr   )__version__z0.0.12)parse_options_header)python_multipartrL   AssertionErrorImportError	multipartZmultipart.multipartrM   r2   error!multipart_incorrect_install_errorRuntimeErrormultipart_not_installed_error)rL   rM    rV   ^/var/www/html/timesheet/backend/venv/lib/python3.8/site-packages/fastapi/dependencies/utils.pyensure_multipart_is_installeda   s     

rX   )security_scopes)
param_namedependspathrY   rK   c                 C   s   |j s
tt||j || |dS )N)r[   
dependencyr\   namerY   )r]   rO   get_sub_dependantrZ   r[   r\   rY   rV   rV   rW   get_param_sub_dependant|   s    
ra   )r[   r\   rK   c                 C   s"   t | jstdt| | j|dS )Nz;A parameter-less dependency must have a callable dependency)r[   r]   r\   )callabler]   rO   r_   )r[   r\   rV   rV   rW   get_parameterless_sub_dependant   s    rc   )r^   rY   .)r[   r]   r\   r^   rY   rK   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)security_schemescopes)r\   callr^   rY   	use_cache)
isinstancer   Securityre   extendr3   r4   r6   r1   get_dependantrg   security_requirementsappend)	r[   r]   r\   r^   rY   Zsecurity_requirementZdependency_scopesZ
use_scopessub_dependantrV   rV   rW   r_      s.    

 r_   Fskip_repeatsvisited)	dependantrp   rq   rK   c             
   C   s   |d krg }| | j t| j | j | j | j | j | j	 | j
| jd}| jD ]v}|rr|j|k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_paramsrl   rg   r\   ro   )rm   	cache_keyr0   rs   r   rt   ru   rv   rw   rl   rg   r\   dependenciesget_flat_dependantrj   )rr   rp   rq   flat_dependantrn   Zflat_subrV   rV   rW   rz      s8    

  rz   )fieldsrK   c                 C   s:   | s| S | d }t | dkr6t|jtr6t|j}|S | S )Nr      )lenr)   type_r9   r    )r|   first_fieldfields_to_extractrV   rV   rW   _get_flat_fields_from_params   s    
r   )rr   rK   c                 C   sD   t | dd}t|j}t|j}t|j}t|j}|| | | S )NT)rp   )rz   r   rs   rt   ru   rv   )rr   r{   rs   rt   ru   rv   rV   rV   rW   get_flat_params   s    



r   )rf   rK   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 ))r^   kinddefault
annotation)inspect	Parameterr^   r   r   get_typed_annotationr   ).0paramglobalnsrV   rW   
<listcomp>   s   
z'get_typed_signature.<locals>.<listcomp>)r   	signaturegetattr
parametersvalues	Signature)rf   r   Ztyped_paramsZtyped_signaturerV   r   rW   get_typed_signature   s    

	
r   )r   r   rK   c                 C   s2   t | tr.t| } t| ||} | td kr.d S | S N)rh   strr   r   type)r   r   rV   rV   rW   r      s    
r   c                 C   s6   t | }|j}|t jjkr d S t| di }t||S )Nr   )r   r   return_annotationr   emptyr   r   )rf   r   r   r   rV   rV   rW   get_typed_return_annotation  s    
r   T)r^   rY   rg   )r\   rf   r^   rY   rg   rK   c                 C   s   t | }t|}|j}t||| ||d}| D ]\}	}
|	|k}t|	|
j|
j|d}|jd k	r~t	|	|j| |d}|j
| q0t|	|j|dr|jd ks0td|	q0|jd k	stt|jjtjr|j|j q0t|j|d q0|S )N)rf   r^   r\   rY   rg   )rZ   r   valueis_path_paramr`   rZ   type_annotationrr   z0Cannot specify multiple FastAPI annotations for )fieldrr   )r8   r   r   r0   itemsanalyze_paramr   r   r[   ra   ry   rm   !add_non_field_param_to_dependencyr   r   rO   rh   
field_infor   Bodyrw   add_param_to_fields)r\   rf   r^   rY   rg   Zpath_param_namesZendpoint_signatureZsignature_paramsrr   rZ   r   r   Zparam_detailsrn   rV   rV   rW   rk     sR    
rk   )rZ   r   rr   rK   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)   rB   request_param_namerD   websocket_param_namerA   http_connection_param_namerC   response_param_nameStarletteBackgroundTasksbackground_tasks_param_namer5   security_scopes_param_namer   rV   rV   rW   r   E  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)	__name__
__module____qualname__r   __annotations__r   r   Dependsr   rV   rV   rV   rW   r   ]  s   
r   )rZ   r   r   r   rK   c                 C   s  d }d }t }t }|tjjk	r$|}|}t|tkrt|}|d }dd |dd  D }	dd |	D }
|
rr|
d }nd }t|trt	||d}|j
tks|j
tkstd|jj d	| d
|tjjk	r|rtd||_
qt|_
nt|tjr|}t|tjr6|d kstd| |d ks0td| |}n4t|trj|d ksZtd| |}trj||_|d k	r|jd krt|}||_t|ttttttfr|d kstd||d ksdtd|n|d krd|d krd|tjjk	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 k	r|rt|tjstd|jj d| n*t|tj$rt%|dd d krtj&j'|_(t)||| }t|tj*rt+  |j,st%|dd r| -dd}n|j,p| }||_,t.| ||j
||j
ttfk|d}|r\t/|dstdnFt|tj#rt/|st0|st|j1t2rt%|dddkstt3|||dS )Nr   c                 S   s    g | ]}t |ttjfr|qS rV   )rh   r:   r   r   r   argrV   rV   rW   r   v  s   z!analyze_param.<locals>.<listcomp>r}   c                 S   s&   g | ]}t |tjtjtjfr|qS rV   )rh   r   Paramr   r   r   rV   rV   rW   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 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   )4r   r   r   r   rG   rE   rF   rh   r:   r   r   r   r   rO   	__class__r   r   r   r   r   r]   r   r)   rB   rD   rA   rC   r   r5   Pathr'   r(   Filer   r   Queryr   r   
ParamTypesqueryr   r   FormrX   r   replacer7   r$   r%   r   r9   r   )rZ   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   rV   rV   rW   r   d  s    

 




r   )r   rr   rK   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|td| j |j|  d S )Nr   z>non-body parameters must be in path, query, header or cookie: )r   r   r   r   r\   rs   rm   r   rt   headerru   cookierO   r^   rv   )r   rr   r   Zfield_info_inrV   rV   rW   r   
  s    
r   c                 C   s4   t | rt| S t | r dS t| dd }t|S )NF__call__)r   	isroutinerJ   isclassr   rf   Zdunder_callrV   rV   rW   is_coroutine_callable  s    

r   c                 C   s$   t | rdS t| dd }t |S NTr   )r   isasyncgenfunctionr   r   rV   rV   rW   is_async_gen_callable#  s    
r   c                 C   s$   t | rdS t| dd }t |S r   )r   isgeneratorfunctionr   r   rV   rV   rW   is_gen_callable*  s    
r   )rf   stack
sub_valuesrK   c                    sB   t | rtt| f |}nt| r2t| f |}||I d H S r   )r   r/   r   r   r.   enter_async_context)rf   r   r   cmrV   rV   rW   solve_generator1  s
    r   c                   @   sb   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def ee f ef ed< dS )SolvedDependencyr   errorsbackground_tasksresponse.dependency_cacheN)r   r   r   r
   r   r   r   r   r   r   rC   r   r   rV   rV   rV   rW   r   ;  s
   
r   )bodyr   r   dependency_overrides_providerr   )
requestrr   r   r   r   r   r   async_exit_stackembed_body_fieldsrK   c        	            s
  i }	g }
|d kr$t  }|jd= d |_|d kr0i }|jD ]f}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 }|j}|jr|
|j q6|jr|j
|kr||j
 }n^t|s*t|rBt|||jdI d H }n2t|r`|f |jI d H }nt|f|jI d H }|jd k	r||	|j< |j
|kr6|||j
< q6t|j| j\}}t|j| j\}}t|j | j\}}t|j!| j"\}}|	#| |	#| |	#| |	#| |
|| | | 7 }
|j$rZt%|j$||dI d H \}}|	#| |
| |j&rl| |	|j&< |j'rt(| t)r| |	|j'< n|j*rt(| t+r| |	|j*< |j,r|d krt- }||	|j,< |j.r||	|j.< |j/rt0|jd|	|j/< t1|	|
|||d	S )
Nzcontent-length.dependency_overrides)r\   rf   r^   rY   )	r   rr   r   r   r   r   r   r   r   )rf   r   r   )body_fieldsreceived_bodyr   )re   )r   r   r   r   r   )2rC   headersstatus_codery   r   r   r   rf   r   r   rx   r   r   getr\   rk   r^   rY   solve_dependenciesr   r   rj   rg   r   r   r   r   r   r;   request_params_to_argsrs   rt   ru   rv   cookiesupdaterw   request_body_to_argsr   r   rh   rB   r   rD   r   r-   r   r   r5   r   )r   rr   r   r   r   r   r   r   r   r   r   rn   rf   Zuse_sub_dependantZoriginal_callZuse_pathsolved_resultZsolvedZpath_valuesZpath_errorsZquery_valuesZquery_errorsZheader_valuesZheader_errorsZcookie_valuesZcookie_errorsZbody_valuesZbody_errorsrV   rV   rW   r   D  s          


    











r   )r   r   r   locrK   c                 C   s~   |d kr,| j rd t|dgfS t| jg fS | j|||d\}}t|trTd |gfS t|trrt|dd}d |fS |g fS d S )N)r   rV   )r   
loc_prefix)	r   r!   r   r   validaterh   r   listr   )r   r   r   r   v_errors_Z
new_errorsrV   rV   rW    _validate_value_with_model_field  s    


r   )r   r   r   rK   c                 C   s   |p| j }t| r,t|ttfr,||}n||d }|d kstt| jtj	r`t|t
r`|dkstt| rt|dkr| jr~d S t| jS |S )N r   )r   r&   rh   r>   r=   getlistr   r   r   r   r   r~   r   r   r   )r   r   r   r   rV   rV   rW   _get_multidict_value  s(    

	
r   )r|   received_paramsrK   c                 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	rt|
jd|}|r|
j
|
jkr|
j
n|
jdd}t|
||d}|d k	r|||
j< |	|p|
j
 |	|
j qj| D ]\}}||	kr|||< q|r\|j}t|tjs0td	|jjf}t||||d
\}}|j|i|fS | D ]j}
t|
|}|
j}t|tjstd	|jj|
j
f}t|
|||d
\}}|r|| n
|||
j< q`||fS )Nr   FTr}   r   r   r   )r   z"Params must be subclasses of Paramr   r   r   r   )r~   r)   r   r9   r    r   r   setrh   r=   r   r^   r   r   addr   r   r   rO   r   r   r   rj   )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   rV   rV   rW   r     s    
  
  



   

   
r   )
field_typerK   c                 C   sN   ddl m} t| }|tk	r(||k	r(dS t| }|D ]}t|ts4 dS q4dS )zJCheck if field type is a Union where all members are BaseModel subclasses.r   )	UnionTypeFT)fastapi.typesr  rG   r   rF   r)   r9   )r   r  originZ
union_argsr   rV   rV   rW   is_union_of_base_models;  s    
r  c                 C   sl   | sdS dd | D }t |dkr&dS | d }t|jdd r@dS t|jtjrht|jtsht	|jshdS dS )NFc                 S   s   h | ]
}|j qS rV   )r^   )r   r   rV   rV   rW   	<setcomp>S  s     z,_should_embed_body_fields.<locals>.<setcomp>r}   Tr   embed)
r~   r   r   rh   r   r   r)   r   r9   r  )r|   Zbody_param_names_setr   rV   rV   rW   _should_embed_body_fieldsN  s     
r  )r   r   rK   c           
         s"  i }| D ]}t ||}|j}t|tjrJt|rJt|trJ| I d H }nt|rt|tjrt	|rt|t
sttg  tg ttttf f d d fdd}t 4 I d H }|D ]}|||j qW 5 Q I d H R X t| d}|d k	r|||j< q| D ]\}	}|	|kr |||	< q |S )N)fnrK   c                    s   |  I d H }  | d S r   )rm   )r  resultresultsrV   rW   
process_fn~  s    z&_extract_form_body.<locals>.process_fn)r   r   )r   r   rh   r   r   r"   r@   readr#   r,   r*   rO   r   r	   r   anyiocreate_task_group
start_soonr+   r   r   )
r   r   r   r   r   r   r  tgZ	sub_valuer   rV   r
  rW   _extract_form_bodyf  s@    


 
r  )r   r   r   rK   c              	      s.  i }g }| st dt| dko$| }| d }|}| }|rZt|jtrZt|trZt|j}t|trtt||I d H }|rd}	t	||||	d\}
}|j
|
i|fS | D ]}d|jf}	d }|d k	rz||j}W n& tk
r   |t|	 Y qY nX t	||||	d\}
}|r|| q|
||j
< q||fS )Nz3request_body_to_args() should be called with fieldsr}   r   )r   r   r   )rO   r~   r)   r   r9   rh   r<   r    r  r   r^   r   r   AttributeErrorrm   r!   rj   )r   r   r   r   r   r   r   Zbody_to_processr   r   r   r   r   r   rV   rV   rW   r     sX    


   


   
r   )r{   r^   r   rK   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 rxtj}nNtdd | j D rtj}n2tj}dd | j D }	tt|	dkr|	d |d< t	d||d|f |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   frV   rV   rW   	<genexpr>  s      z!get_body_field.<locals>.<genexpr>r   )r   r   r   c                 s   s   | ]}t |jtjV  qd S r   )rh   r   r   r   r  rV   rV   rW   r    s     c                 s   s   | ]}t |jtjV  qd S r   )rh   r   r   r   r  rV   rV   rW   r    s     c                 S   s"   g | ]}t |jtjr|jjqS rV   )rh   r   r   r   
media_typer  rV   rV   rW   r     s   z"get_body_field.<locals>.<listcomp>r}   r  )r^   r   r   r   r   )
rw   r   anyr   r   r   r   r~   r   r7   )r{   r^   r   Zfirst_paramr  	BodyModelr   ZBodyFieldInfo_kwargsZBodyFieldInfoZbody_param_media_typesZfinal_fieldrV   rV   rW   get_body_field  sD    
 r  )N)r   sys
contextlibr   r   r   r   dataclassesr   typingr   r   r	   r
   r   r   r   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(   r)   r*   r+   r,   Zfastapi.backgroundr-   Zfastapi.concurrencyr.   r/   fastapi.dependencies.modelsr0   r1   fastapi.loggerr2   fastapi.security.baser3   Zfastapi.security.oauth2r4   r5   Z$fastapi.security.open_id_connect_urlr6   fastapi.utilsr7   r8   pydanticr9   pydantic.fieldsr:   Zstarlette.backgroundr   starlette.concurrencyr;   starlette.datastructuresr<   r=   r>   r?   r@   starlette.requestsrA   rB   starlette.responsesrC   starlette.websocketsrD   typing_extensionsrE   rF   rG   version_inforJ   asynciorU   rS   rX   r   r   ra   rc   r_   ZCacheKeyboolrz   r   r   r   r   r   r   rk   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r   r  rV   rV   rV   rW   <module>   s0  <h
 


  
#
		

5   '	
  


"  
 
  
 
O
+3  