o
    LDi#                     @   sR  U 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 d dlm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mZ d dlmZmZ d dlmZ d d	lm Z  d d
l!m"Z" ergddl#m$Z$ e Z%ee&e e&e f e'd< de
e(e)df de*fddZ+de)de,e) fddZ-dZ.deedddddfde)dede	e/e)ef  de	e de
e*ef de
e&e df de	e  de	e) d e"d! d"e"d# defd$d%Z0dd&d'ed(e	ee&e e&e f  defd)d*Z1de)de)d+e)de)fd,d-Z2d.d/de)fd0d1Z3d2e/eef d3e/eef ddfd4d5Z4d6e
eef d7e
eef de
eef fd8d9Z5dS ):    N)MutableMapping)is_dataclass)TYPE_CHECKINGAnyOptionalUnioncast)WeakKeyDictionary)
PYDANTIC_V2
BaseConfig
ModelFieldPydanticSchemaGenerationError	UndefinedUndefinedType	Validatorannotation_is_pydantic_v1lenient_issubclassmay_v1)DefaultPlaceholderDefaultType)	BaseModel)	FieldInfo)Literal   )APIRoute_CLONED_TYPES_CACHEstatus_codereturnc                 C   s2   | d u rdS | dv rdS t | }|dk p|dv  S )NT>   1XX2XX3XX4XX5XXdefault   >   0        )int)r   current_status_code r*   Y/var/www/www-root/data/www/77.83.87.30/venv/lib/python3.10/site-packages/fastapi/utils.pyis_body_allowed_for_status_code)   s   r,   pathc                 C   s   t td| S )Nz{(.*?)})setrefindall)r-   r*   r*   r+   get_path_param_names:   s   r1   a  Invalid args for response field! Hint: check that {type_} is a valid Pydantic field type. If you are using a return type annotation that is not a valid Pydantic field (e.g. Union[Response, dict, None]) you can disable generating the response model from the type annotation with the path operation decorator parameter response_model=None. Read more: https://fastapi.tiangolo.com/tutorial/response-model/
validationautonametype_class_validatorsr#   requiredmodel_config
field_infoaliasmode)r2   serializationversion)1r3   c
              	   C   s:  |pi }t j}
|pt  }| ||||||
|d}t|s&t|t js&|	dkrHddlm} z	|jd
i |W S  tyG   t	j
tj|dd w tr{ddlm} |pXt|||d}|| |d	}z	|jd
i |W S  tyz   t	j
tj|dd w ddlm} z	|jd
i |W S  ty   t	j
tj|dd w )N)r4   r9   r5   r6   r#   r7   r8   r:   r>   r   v1)r5   r   v2)
annotationr#   r:   )r;   r4   r9   r*   )r   r   r   r   
isinstancefastapi._compatr@   r   RuntimeErrorfastapi
exceptionsFastAPIError_invalid_args_messageformatr
   _compatrB   r   )r4   r5   r6   r#   r7   r8   r9   r:   r;   r=   v1_model_configv1_field_info	v1_kwargsr@   rB   kwargsr*   r*   r+   create_model_fieldI   sh   



rQ   cloned_typesfieldrS   c                   s  t rddlm} t| |jr| S ddlm}  d u rt | j}t	|r+t
|dr+|j}|}t||jrbtt|j |} |}|d u rb|j|j|d}| |< |j D ]}t| d|j|j< qUt| j|dd	}| j|_| j|_| j|_| j|_| j|_| j|_| j|_| j|_| j |_ | j!|_!| j"r fd
d| j"D |_"| j#rt| j# d|_#| j$|_$| j%|_%| j&|_&| j'|_'| j(|_(|)  |S )Nr   rA   r   r?   __pydantic_model__)__base__rR   r>   )r4   r5   r=   c                    s   g | ]}t | d qS )rR   )create_cloned_field).0	sub_fieldrR   r*   r+   
<listcomp>   s    
z'create_cloned_field.<locals>.<listcomp>)*r
   rL   rB   rD   r   rE   r@   r   r5   r   hasattrrU   r   r   r   typegetcreate_model__name__
__fields__valuesrW   r4   rQ   	has_aliasr:   r6   r#   default_factoryr7   r8   r9   
allow_nonevalidate_always
sub_fields	key_field
validatorspre_validatorspost_validators
parse_jsonshapepopulate_validators)rT   rS   rB   r@   original_typeuse_typef	new_fieldr*   rR   r+   rW      sb   

rW   methodc                 C   s@   t jdtdd |  | }tdd|}| d|  }|S )Nzrfastapi.utils.generate_operation_id_for_path() was deprecated, it is not used internally, and will be removed soon   )
stacklevel\W_)warningswarnDeprecationWarningr/   sublower)r4   r-   rr   operation_idr*   r*   r+   generate_operation_id_for_path   s   r}   router   c                 C   sH   | j  | j }tdd|}| jsJ | dt| jd   }|S )Nru   rv   r   )r4   path_formatr/   rz   methodslistr{   )r~   r|   r*   r*   r+   generate_unique_id   s
   
r   	main_dictupdate_dictc                 C   s   |  D ]=\}}|| v r t| | tr t|tr t| | | q|| v r=t| | tr=t|| tr=| | ||  | |< q|| |< qd S )N)itemsrD   dictdeep_dict_updater   )r   r   keyvaluer*   r*   r+   r      s   
r   
first_itemextra_itemsc                 G   s*   | f| }|D ]}t |ts|  S q| S )z
    Pass items or `DefaultPlaceholder`s by descending priority.

    The first one to _not_ be a `DefaultPlaceholder` will be returned.

    Otherwise, the first item (a `DefaultPlaceholder`) will be returned.
    )rD   r   )r   r   r   itemr*   r*   r+   get_value_or_default   s   

r   )6r/   rw   collections.abcr   dataclassesr   typingr   r   r   r   r   weakrefr	   rG   rE   r
   r   r   r   r   r   r   r   r   r   fastapi.datastructuresr   r   pydanticr   pydantic.fieldsr   typing_extensionsr   routingr   r   r\   __annotations__r(   strboolr,   r.   r1   rJ   r   rQ   rW   r}   r   r   r   r*   r*   r*   r+   <module>   s   
 0
	

D
?
&


