a
    dl                     @   s  d dl Z 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 d dlmZmZ d dlmZ d d	l m!Z! d d
l"m#Z#m$Z$ d dl%m&Z& d dl'm(Z(m)Z) d dl*m+Z+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z< d dl=m>Z> d dl?m@Z@ d dlAmBZB d dlCmDZD d dlEmFZF d dlGmHZHmIZImJZJmKZK d dlLmMZMmNZN d dlOmPZP d dlQmRZR e3e5e2e7e4e8hZSeTeUeVfZWe3eTe5eUe7eVe4eTe8eTiZXdZYdZZe:ddddZ[ddej\e]eee]  ed d!d"Z^ej_e]ed#d$d%Z`ddd&ej_ed'ef e]ee] eee]  ed(d)d*Zaeeed'ef  ee]d'f f Zbd+dd,eeceeeb  ed-d.d/Zdeee: d0d1d2Zee:ecdd3d4Zfe:ecdd5d6Zged'ef ejhd7d8d9Ziee
e]ef ed:d;d<Zjed'ef ed7d=d>Zkddd?d@e]ed'ef ee] eee]  ecedAdBdCZlej\eeec dDdEdFZmejndd+dGej\e]eejn eejo ece:dHdIdJZpe:eddKdLdMZqed'ef ecd7dNdOZred'ef ecd7dPdQZsed'ef ecd7dRdSZted'ef ee
e]ef edTdUdVZuddddddWeeNeRf eeee
e]ef eHf  eeD eeP ee ee
eed'ef ee] f ef  ee
e]ef ee. eeD ePe
eed'ef ee] f ef f dXdYdZZvee: eee]ef eJeIf ee
e]ef ee. f d[d\d]Zwee: eee
e]ef eHf  ee
e]ef ee. f d^d_d`Zxee]d'f e.dadbdcZyee]ee: dddedfZzdS )g    N)contextmanager)deepcopy)AnyCallable	CoroutineDict
ForwardRefListMappingOptionalSequenceTupleTypeUnioncast)params)AsyncExitStackasynccontextmanagercontextmanager_in_threadpool)	DependantSecurityRequirement)logger)SecurityBase)OAuth2SecurityScopes)OpenIdConnect)create_response_fieldget_path_param_names)	BaseModelcreate_model)ErrorWrapper)MissingError)SHAPE_FROZENSET
SHAPE_LISTSHAPE_SEQUENCE	SHAPE_SETSHAPE_SINGLETONSHAPE_TUPLESHAPE_TUPLE_ELLIPSIS	FieldInfo
ModelFieldRequired	Undefined)get_annotation_from_field_info)evaluate_forwardref)lenient_issubclass)BackgroundTasks)run_in_threadpool)FormDataHeadersQueryParams
UploadFile)HTTPConnectionRequest)Response)	WebSocketzForm 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	multipartr<   Zmultipart.multipartr=   ImportErrorr   error!multipart_incorrect_install_errorRuntimeErrormultipart_not_installed_error)r:   r>   r<   r=    rG   c/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/fastapi/dependencies/utils.pycheck_file_field]   s    

rI   )security_scopes)parampathrJ   r;   c                 C   s.   | j }|jr|j}n| j}t|||| j|dS )N)depends
dependencyrL   namerJ   )defaultrN   
annotationget_sub_dependantrO   )rK   rL   rJ   rM   rN   rG   rG   rH   get_param_sub_dependantr   s    rS   )rM   rL   r;   c                 C   s"   t | jsJ dt| | j|dS )Nz;A parameter-less dependency must have a callable dependency)rM   rN   rL   )callablerN   rR   )rM   rL   rG   rG   rH   get_parameterless_sub_dependant   s    rU   )rO   rJ   .)rM   rN   rL   rO   rJ   r;   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)rL   callrO   rJ   	use_cache)r?   r   ZSecurityrV   extendr   r   r   r   get_dependantrX   security_requirementsappend)	rM   rN   rL   rO   rJ   Zsecurity_requirementZdependency_scopesZ
use_scopessub_dependantrG   rG   rH   rR      s,    

rR   Fskip_repeatsvisited)	dependantr_   r`   r;   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_schemesrX   rL   r^   )r\   	cache_keyr   rb   copyrc   rd   re   rf   r[   rX   rL   dependenciesget_flat_dependantrY   )ra   r_   r`   flat_dependantr]   Zflat_subrG   rG   rH   rj      s4    

rj   )ra   r;   c                 C   s$   t | dd}|j|j |j |j S )NT)r_   )rj   rb   rc   rd   re   )ra   rk   rG   rG   rH   get_flat_params   s    rl   c                 C   sl   | j }| jtkrFt| jtsFt| jttf sFt	| jsFt
|tjrJdS | jrhtdd | jD shdS dS )NFc                 s   s   | ]}t |V  qd S N)is_scalar_field.0frG   rG   rH   	<genexpr>       z"is_scalar_field.<locals>.<genexpr>T)r>   shaper&   r/   type_r   sequence_typesdictdataclassesZis_dataclassr?   r   Body
sub_fieldsall)r:   r>   rG   rG   rH   rn      s     


rn   c                 C   sR   | j tv r>t| jts>| jd ur:| jD ]}t|s& dS q&dS t| jtrNdS dS )NFT)rt   sequence_shapesr/   ru   r   rz   rn   rv   )r:   Z	sub_fieldrG   rG   rH   is_scalar_sequence_field   s    

r}   )rW   r;   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 ))rO   kindrP   rQ   )inspect	ParameterrO   r   rP   get_typed_annotationrQ   rp   rK   globalnsrG   rH   
<listcomp>   s   
z'get_typed_signature.<locals>.<listcomp>)r   	signaturegetattr
parametersvalues	Signature)rW   r   Ztyped_paramsZtyped_signaturerG   r   rH   get_typed_signature   s    

	
r   )rQ   r   r;   c                 C   s"   t | trt| } t| ||} | S rm   )r?   strr   r.   )rQ   r   rG   rG   rH   r     s    
r   c                 C   s6   t | }|j}|t jju r d S t| di }t||S )Nr~   )r   r   return_annotationr   emptyr   r   )rW   r   rQ   r   rG   rG   rH   get_typed_return_annotation  s    
r   T)rO   rJ   rX   )rL   rW   rO   rJ   rX   r;   c                 C   sP  t | }t|}|j}t||| ||d}| D ]\}	}
t|
jtjrdt	|
| |d}|j
| q0t|
|drrq0t|
tj|	d}|	|v rt|dsJ dt|
jtj }t|
|	tjtjj|d}t||d q0t|drt||d q0t|
jtjtjfrt|rt||d q0|j}t|tjs>J d	|j d
|j| q0|S )N)rW   rO   rL   rJ   rX   )rK   rL   rJ   rK   ra   )rK   default_field_info
param_namer:   z1Path params must be of one of the supported types)rK   r   r   
force_typeignore_default)r:   ra   zParam: z) can only be a request body, using Body())r   r   r   r   itemsr?   rP   r   DependsrS   ri   r\   !add_non_field_param_to_dependencyget_param_fieldZQueryrn   Path
ParamTypesrL   add_param_to_fieldsHeaderr}   r>   ry   rO   rf   )rL   rW   rO   rJ   rX   Zpath_param_namesZendpoint_signatureZsignature_paramsra   r   rK   r]   Zparam_fieldr   r>   rG   rG   rH   rZ     sj    
rZ   )rK   ra   r;   c                 C   s   t | jtr| j|_dS t | jtr0| j|_dS t | jtrH| j|_dS t | jt	r`| j|_
dS t | jtrx| j|_dS t | jtr| j|_dS d S )NT)r/   rQ   r7   rO   request_param_namer9   websocket_param_namer6   http_connection_param_namer8   response_param_namer0   background_tasks_param_namer   security_scopes_param_namer   rG   rG   rH   r   T  s&    r   )r   r   r   )rK   r   r   r   r   r;   c                 C   sF  t }d}| j| jks"|du r"| j}t|trjd}|}|j}t|tjr^t|dd d u r^|j|_|rt||_n
||d}d}|t	u s|rd}d }n|t urd}t
}	| j| jks| j}	t|	||}	|jst|dd r| jdd}
n|jp| j}
t| j|	||
||d}|s t|d	s t|j|_|sBt|jtrBt|j|_|S )
NFTin_)rP   Zconvert_underscores_-)rO   ru   rP   aliasrequiredr>   r   )r,   rP   r   r?   r)   r   Paramr   r   r+   r   rQ   r-   r   rO   replacer   rn   ry   r>   r/   ru   r5   File)rK   r   r   r   r   default_valueZ
had_schemar>   r   rQ   r   r:   rG   rG   rH   r   l  sT    


r   )r:   ra   r;   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sJ d| j |j|  d S )Nz>non-body parameters must be in path, query, header or cookie: )r   r   r   r>   r   r   rL   rb   r\   queryrc   headerrd   cookierO   re   )r:   ra   r>   rG   rG   rH   r     s    
r   c                 C   s8   t | rt | S t | r"dS t| dd }t |S )NF__call__)r   	isroutineiscoroutinefunctionisclassr   rW   Zdunder_callrG   rG   rH   is_coroutine_callable  s    


r   c                 C   s$   t | rdS t| dd }t |S NTr   )r   isasyncgenfunctionr   r   rG   rG   rH   is_async_gen_callable  s    
r   c                 C   s$   t | rdS t| dd }t |S r   )r   isgeneratorfunctionr   r   rG   rG   rH   is_gen_callable  s    
r   )rW   stack
sub_valuesr;   c                    sJ   t | r tt| f i |}nt| r:t| f i |}||I d H S rm   )r   r   r   r   r   enter_async_context)rW   r   r   cmrG   rG   rH   solve_generator  s
    r   )bodybackground_tasksresponsedependency_overrides_providerdependency_cache)requestra   r   r   r   r   r   r;   c              
      s(  i }g }|d u 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
|v r||	j
 }n|t|
s0t|
rb| jd}t|tsLJ t|
||dI d H }n6t|
r|
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$r|t%|j$|dI d H \}}|| || |j&r| ||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)rL   rW   rO   rJ   )r   ra   r   r   r   r   r   Zfastapi_astack)rW   r   r   )required_paramsreceived_body)rV   )0r8   headersstatus_coderi   r   r   r   rW   r   r   rg   r   r   getrL   rZ   rO   rJ   solve_dependenciesupdaterY   rX   r   r   Zscoper?   r   r   r   r1   request_params_to_argsrb   rc   rd   re   cookiesrf   request_body_to_argsr   r   r7   r   r9   r   r0   r   r   r   )r   ra   r   r   r   r   r   r   errorsr]   rW   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_errorsrG   rG   rH   r     s    
















r   )r   received_paramsr;   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|d u r|jr|tt |jj|jfd qt|j||j< q|j|||jj|jfd\}}t|tr|| qt|tr|| q|||j< q||fS )Nz"Params must be subclasses of Paramloc)r}   r?   r4   r3   getlistr   rP   r   r>   r   r   r   r\   r    r!   r   valuer   rO   validatelistrY   )	r   r   r   r   r:   r   r>   v_errors_rG   rG   rH   r   S  s@    



r   )r   r   r;   c              
      s  i }g }| r| d }|j }t|dd }t| dko8| }|rH|j|i}| D ]D}|r\d}n
d|jf}d }	|d ur|jtv s|jtv 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rF|jtv rFt|	dkrF|jr4|t| qLt|j||j< qLt|tjr~t|jtr~t|	tr~|	 I d H }	n|jtv rDt|tjrDt|jtrDt|	trDg  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  q61 I d H s,0    Y  t |j  }	|j!|	||d
\}}t|t"rp|| qLt|t#r|$| qL|||j< qL||fS )Nr   embed   )r   r    )fnr;   c                    s   |  I d H }  | d S rm   )r\   )r   resultresultsrG   rH   
process_fn  s    z(request_body_to_args.<locals>.process_fnr   )%r>   r   lenr   rt   r|   ru   rv   r?   r2   r   r   AttributeErrorr\   get_missing_field_errorr   r@   r   r   rP   rO   r   r/   bytesr5   readr   r   r   anyioZcreate_task_groupZ
start_soonsequence_shape_to_typer   r    r   rY   )r   r   r   r   r:   r>   r   Zfield_alias_omittedr   r   r   tgZ	sub_valuer   r   rG   r   rH   r   z  s    






	



@r   )r   r;   c                 C   s   t t | d}|S )Nr   )r    r!   )r   Zmissing_field_errorrG   rG   rH   r     s    r   )ra   rO   r;   c              	   C   sL  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 ]}
|
|	j|
j	< qt
dd	 |jD }d
d i}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 rG   )rO   r   rG   rG   rH   	<setcomp>  rs   z!get_body_field.<locals>.<setcomp>r   TZBody_c                 s   s   | ]}|j rd V  qdS )TN)r   ro   rG   rG   rH   rr     rs   z!get_body_field.<locals>.<genexpr>rP   c                 s   s   | ]}t |jtjV  qd S rm   )r?   r>   r   r   ro   rG   rG   rH   rr     rs   c                 s   s   | ]}t |jtjV  qd S rm   )r?   r>   r   r@   ro   rG   rG   rH   rr     rs   c                 S   s"   g | ]}t |jtjr|jjqS rG   )r?   r>   r   ry   
media_typero   rG   rG   rH   r     s   z"get_body_field.<locals>.<listcomp>r   r   )rO   ru   r   r   r>   )rj   rf   r>   r   r   rI   setattrr   Z
__fields__rO   anyr   r   r@   ry   setr   )ra   rO   rk   Zfirst_paramr>   r   Zbody_param_names_setrK   Z
model_nameZ	BodyModelrq   r   ZBodyFieldInfo_kwargsZBodyFieldInfoZbody_param_media_typesZfinal_fieldrG   rG   rH   get_body_field  sJ    


r   ){rx   r   
contextlibr   rh   r   typingr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   Zfastapir   Zfastapi.concurrencyr   r   r   Zfastapi.dependencies.modelsr   r   Zfastapi.loggerr   Zfastapi.security.baser   Zfastapi.security.oauth2r   r   Z$fastapi.security.open_id_connect_urlr   Zfastapi.utilsr   r   Zpydanticr   r   Zpydantic.error_wrappersr    Zpydantic.errorsr!   Zpydantic.fieldsr"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   Zpydantic.schemar-   Zpydantic.typingr.   Zpydantic.utilsr/   Zstarlette.backgroundr0   Zstarlette.concurrencyr1   Zstarlette.datastructuresr2   r3   r4   r5   Zstarlette.requestsr6   r7   Zstarlette.responsesr8   Zstarlette.websocketsr9   r|   r   r   tuplerv   r   rF   rD   rI   r   r   rS   r   rU   rR   ZCacheKeyboolrj   rl   rn   r}   r   r   r   r   rZ   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rG   rG   rG   rH   <module>   s  <4




  
#


;7	
"
 (S