U
    &%et                     @   s0  d dl Z d dl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,m-Z- d dl.m/Z/m0Z0m1Z1 d dl2m3Z3m4Z4 d d	l5m6Z6 d d
l7m8Z8 d dl9m:Z:m;Z; d dl<m=Z= d dl>m?Z?m@Z@ d dlAmBZB d dlCmDZD d dlEmFZF d dlGmHZHmIZImJZJmKZK d dlLmMZMmNZN d dlOmPZP d dlQmRZR d dlSmTZTmUZUmVZV dZWdZXeddddZYddeZej[eZeeeZ  e3dddZ\ej[eZe3dd d!Z]ddd"ej[ed#ef eZeeZ eeeZ  e3d$d%d&Z^eeed#ef  eeZd#f f Z_d'dd(e3e`eee_  e3d)d*d+Zae3ee d,d-d.Zbed#ef e jcd/d0d1Zdee	eZef ed2d3d4Zeed#ef ed/d5d6Zfddd7d8eZed#ef eeZ eeeZ  e`e3d9d:d;ZgeZee3ee` d<d=d>ZheZeee`eeeej[ ee f d?d@dAZiee`e`dBdCdDZjee3ddEdFdGZked#ef e`d/dHdIZled#ef e`d/dJdKZmed#ef e`d/dLdMZned#ef e/e	eZef edNdOdPZoddddddQeeNeRf e3eee	eZef eHf  eeD eeP ee ee	eed#ef eeZ f ef  ee	eZef ee eeD ePe	eed#ef eeZ f ef f dRdSdTZpee eeeZef eJeIf ee	eZef ee f dUdVdWZqee eee	eZef eHf  ee	eZef ee	eZef  f dXdYdZZre3eZee d[d\d]ZsdS )^    N)contextmanager)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)AsyncExitStackasynccontextmanagercontextmanager_in_threadpool)	DependantSecurityRequirement)logger)SecurityBase)OAuth2SecurityScopes)OpenIdConnect)create_response_fieldget_path_param_names)	FieldInfo)BackgroundTasks)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rzZddlm} |s(tzddlm} |s>tW n( t	k
rh   t
t ttd Y nX W n( t	k
r   t
t ttd Y nX d S )Nr   )__version__)parse_options_header)
field_info
isinstancer   Form	multipartrE   AssertionErrorZmultipart.multipartrF   ImportErrorr.   error!multipart_incorrect_install_errorRuntimeErrormultipart_not_installed_error)rC   rG   rE   rF    rQ   Y/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/fastapi/dependencies/utils.pycheck_file_fieldR   s    

rS   )security_scopes)
param_namedependspathrT   rD   c                 C   s   |j s
tt||j || |dS )N)rV   
dependencyrW   namerT   )rX   rK   get_sub_dependantrU   rV   rW   rT   rQ   rQ   rR   get_param_sub_dependantg   s    
r\   )rV   rW   rD   c                 C   s"   t | jstdt| | j|dS )Nz;A parameter-less dependency must have a callable dependency)rV   rX   rW   )callablerX   rK   rZ   )rV   rW   rQ   rQ   rR   get_parameterless_sub_dependantx   s    r^   )rY   rT   .)rV   rX   rW   rY   rT   rD   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)rH   r   ZSecurityr_   extendr/   r0   r2   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   rD   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_paramsZsecurity_schemesra   rW   rg   )re   	cache_keyr,   rk   copyrl   rm   rn   ro   rd   ra   rW   dependenciesget_flat_dependantrb   )rj   rh   ri   flat_dependantrf   Zflat_subrQ   rQ   rR   rs      s8    

  rs   )rj   rD   c                 C   s$   t | dd}|j|j |j |j S )NT)rh   )rs   rk   rl   rm   rn   )rj   rt   rQ   rQ   rR   get_flat_params   s    ru   )r`   rD   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   rw   rx   get_typed_annotationry   .0paramglobalnsrQ   rR   
<listcomp>   s   
z'get_typed_signature.<locals>.<listcomp>)rz   	signaturegetattr
parametersvalues	Signature)r`   r   Ztyped_paramsZtyped_signaturerQ   r   rR   get_typed_signature   s    

	
r   )ry   r   rD   c                 C   s"   t | trt| } t| ||} | S N)rH   strr   r   )ry   r   rQ   rQ   rR   r|      s    
r|   c                 C   s6   t | }|j}|t jjkr d S t| di }t||S )Nrv   )rz   r   return_annotationr   emptyr   r|   )r`   r   ry   r   rQ   rQ   rR   get_typed_return_annotation   s    
r   T)rY   rT   ra   )rW   r`   rY   rT   ra   rD   c                 C   s   t | }t|}|j}t||| ||d}| D ]\}	}
|	|k}t|	|
j|
j|d\}}}|d k	rt|	|| |d}|j	
| q0t|	||dr|d ks0td|	q0|d k	stt||dr|j
| q0t||d q0|S )N)r`   rY   rW   rT   ra   )rU   ry   valueis_path_paramr[   rU   type_annotationrj   z0Cannot specify multiple FastAPI annotations for param_fieldr   )rC   rj   )r4   r   r   r,   itemsanalyze_paramry   rx   r\   rr   re   !add_non_field_param_to_dependencyrK   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   rD   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_namer6   background_tasks_param_namer1   security_scopes_param_namer   rQ   rQ   rR   r   %  s&    





r   )rU   ry   r   r   rD   c                 C   s>  d }d }t }|tjjk	rt|tkrt|}|d }dd |dd  D }t|dksdtd| t	t
|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|	}n|tjjk	r|}t|tjrF|d ks(td| |d ks@td| |}n4t|trz|d ksjtd| |}trz||_|d k	r|jd kr||_t|ttttttfr|d kstd||d ksltd|n|d krl|d krl|tjjk	r|nt}
|rtj|d}nNt |s2t!|rBtj"||
d}n*t#|ds^tj$||
d}ntj%||
d}d }|d k	r4|rt|tjstd|jj d| n*t|tj&rt'|dd d krtj(j)|_*t+||| }|j,st'|dd r| -dd}n|j,p| }||_,t.| ||j||jttfk|d}|||fS )Nr   c                 S   s    g | ]}t |ttjfr|qS rQ   )rH   r5   r   Depends)r~   argrQ   rQ   rR   r   M  s   z!analyze_param.<locals>.<listcomp>   z:Cannot specify multiple `Annotated` FastAPI arguments for )rG   ry   `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 )ry   )ry   rx   zCannot use `z` for path param in_Zconvert_underscores_-)rY   type_rx   aliasrequiredrG   )/r   rz   r   r   rB   r@   rA   lenrK   nextiterrH   r5   r   rx   r   r   	__class____name__r   r   r   ry   rX   r%   r=   r?   r<   r>   r6   r1   Pathr#   r$   Filer   BodyQueryParamr   
ParamTypesqueryr   r   r   replacer3   )rU   ry   r   r   rG   rV   r   Zannotated_argsZfastapi_annotationsZfastapi_annotationdefault_valuerC   Zuse_annotationr   rQ   rQ   rR   r   =  s    




 


	r   )r   r   rD   c                 C   sp   |rt | dstddS t | dr(dS t| jtjtjfrHt| rHdS t| jtjshtd| j	 ddS d S )N)rC   z1Path params must be of one of the supported typesFzParam: z) can only be a request body, using Body()T)
r    rK   rH   rG   r   r   Headerr!   r   rY   r   rQ   rQ   rR   r     s.    
 
 r   )rC   rj   rD   c                 C   s   t tj| j}|jtjjkr*|j|  nb|jtjj	krF|j
|  nF|jtjjkrb|j|  n*|jtjjkstd| j |j|  d S )Nz>non-body parameters must be in path, query, header or cookie: )r   r   r   rG   r   r   rW   rk   re   r   rl   headerrm   cookierK   rY   rn   )rC   rj   rG   rQ   rQ   rR   r     s    
r   c                 C   s8   t | rt | S t | r"dS t| dd }t |S )NF__call__)rz   	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   )rz   isasyncgenfunctionr   r   rQ   rQ   rR   is_async_gen_callable  s    
r   c                 C   s$   t | rdS t| dd }t |S r   )rz   isgeneratorfunctionr   r   rQ   rQ   rR   is_gen_callable  s    
r   )r`   stack
sub_valuesrD   c                    sB   t | rtt| f |}nt| r2t| f |}||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   rD   c              
      s   i }g }|d kr$t  }|jd= d |_|p*i }|jD ]}	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
|kr||	j
 }ntt|
s0t|
rb| jd}t|tsLtt|
||dI d H }n.t|
r~|
f |I d H }nt|
f|I d H }|	jd k	r|||	j< |	j
|kr2|||	j
< q2t|j | j \}}t|j!| j!\}}t|j"| j\}}t|j#| j$\}}|| || || || ||| | | 7 }|j%rtt&|j%|dI d H \}}|| || |j'r| ||j'< |j(rt| t)r| ||j(< n|j*rt| t+r| ||j*< |j,r|d krt- }|||j,< |j.r|||j.< |j/rt0|jd	||j/< |||||fS )
Nzcontent-length.dependency_overrides)rW   r`   rY   rT   )r   rj   r   r   r   r   r   Zfastapi_astack)r`   r   r   )required_paramsreceived_body)r_   )1r>   headersstatus_coderr   r   r   r   r`   r   r   rp   r   r   getrW   rc   rY   rT   solve_dependenciesupdaterb   ra   r   r   scoperH   r)   rK   r   r   r7   request_params_to_argsrk   rl   rm   rn   cookiesro   request_body_to_argsr   r   r=   r   r?   r   r6   r   r   r1   )r   rj   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solvedr   Z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_paramsrD   c                 C   s   i }g }| D ]}t |r:t|ttfr:||jp6|j}n||j}|j}t|t	j
s`td|jj|jf}|d k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!   rH   r:   r9   getlistr   rx   r   rG   r   r   rK   r   r   r   re   r   r   rY   validater   listr   rb   )r   r   r   r   rC   r   rG   r   v_errors_Z
new_errorsrQ   rQ   rR   r   |  s<    
  

r   )r   r   rD   c                    sd  i }g }| r\| d }|j }t|dd }t| dko8| }|rH|j|i}| D ]}|r\d}n
d|jf}d }	|d k	rt|rt|tr||j}	n8z||j}	W n& t	k
r   |
t| Y qLY nX |	d kst|tjr|	dkst|tjr:t|r:t|	dkr:|jr(|
t| qLt|j||j< qLt|tjrnt|rnt|	trn|	 I d H }	nt|rt|tjrt|	rt|	tst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
}	|j!|	||d\}}t|t"r>|#| qL|rP|
| qL|||j< qL||fS )Nr   embedr   )r   r    )fnrD   c                    s   |  I d H }  | d S r   )re   )r   resultresultsrQ   rR   
process_fn  s    z(request_body_to_args.<locals>.process_fn)rC   r   r   )$rG   r   r   r   r"   rH   r8   r   r   AttributeErrorre   r   r   rI   r   r   rx   rY   r   r   r;   readr   r(   r&   rK   r   r   r   anyioZcreate_task_groupZ
start_soonr'   r   r   rb   )r   r   r   r   rC   rG   r   Zfield_alias_omittedr   r   r   tgZ	sub_valuer   r   rQ   r   rR   r     s    






	

"r   )rj   rY   rD   c                 C   sD  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 |d}t| |S )Nr   r   c                 S   s   h | ]
}|j qS rQ   )rY   r}   rQ   rQ   rR   	<setcomp>  s     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>  s      z!get_body_field.<locals>.<genexpr>r   )ry   r   rx   c                 s   s   | ]}t |jtjV  qd S r   )rH   rG   r   r   r   rQ   rQ   rR   r     s     c                 s   s   | ]}t |jtjV  qd S r   )rH   rG   r   rI   r   rQ   rQ   rR   r     s     c                 S   s"   g | ]}t |jtjr|jjqS rQ   )rH   rG   r   r   
media_typer   rQ   rQ   rR   r     s   z"get_body_field.<locals>.<listcomp>r   )rY   r   r   r   rG   )rs   ro   rG   r   r   rS   setattrr   anyr   r   rI   r   setr3   )rj   rY   rt   Zfirst_paramrG   r   Zbody_param_names_setr   r   Z	BodyModelr   ZBodyFieldInfo_kwargsZBodyFieldInfoZbody_param_media_typesZfinal_fieldrQ   rQ   rR   get_body_field  sT    

 r   )trz   
contextlibr   rq   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.concurrencyr)   r*   r+   Zfastapi.dependencies.modelsr,   r-   Zfastapi.loggerr.   Zfastapi.security.baser/   Zfastapi.security.oauth2r0   r1   Z$fastapi.security.open_id_connect_urlr2   Zfastapi.utilsr3   r4   Zpydantic.fieldsr5   Zstarlette.backgroundr6   Zstarlette.concurrencyr7   Zstarlette.datastructuresr8   r9   r:   r;   Zstarlette.requestsr<   r=   Zstarlette.responsesr>   Zstarlette.websocketsr?   Ztyping_extensionsr@   rA   rB   rP   rN   rS   r   r   r\   r^   rZ   ZCacheKeyboolrs   ru   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