o
    li2#                     @   sV  U d dl 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 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rid
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$Z/dd%d&ed'e	eee  ee  f  defd(d)Z0de*de*d*e*de*fd+d,Z1d-d.de*fd/d0Z2d1eeef d2eeef ddfd3d4Z3d5eeef d6eeef deeef fd7d8Z4dS )9    N)is_dataclass)	TYPE_CHECKINGAnyDictMutableMappingOptionalSetType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>   Z2XXZ1XXZ4XXZ3XXdefaultZ5XX   >   i0        )int)r   Zcurrent_status_code r&   T/home/app/PaddleOCR-VL/.venv_paddleocr/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   r-   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)r.   Zserializationversion)1r/   c
              	   C   s"  |pi }t j}
|pt  }| ||||||
|d}t|s&t|t js&|	dkrDddlm} z	|jd	i |W S  tyC   t	j
td w trsddlm} |pTt|||d}|| |d}z	|jd	i |W S  tyr   t	j
td w ddlm} z	|jd	i |W S  ty   t	j
td w )
N)r0   r5   r1   r2   r!   r3   r4   r6   r9   r   v1r   v2)
annotationr!   r6   )r7   r0   r5   r&   )r   r   r   r   
isinstancefastapi._compatr;   r   RuntimeErrorfastapi
exceptionsZFastAPIError_invalid_args_messager   _compatr=   r   )r0   r1   r2   r!   r3   r4   r5   r6   r7   r8   Zv1_model_configZv1_field_infoZ	v1_kwargsr;   r=   kwargsr&   r&   r'   create_model_fieldL   sP   
rG   cloned_typesfieldrI   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   r<   r   r:   __pydantic_model__)__base__rH   r9   )r0   r1   r8   c                    s   g | ]}t | d qS )rH   )create_cloned_field).0Z	sub_fieldrH   r&   r'   
<listcomp>   s    
z'create_cloned_field.<locals>.<listcomp>)*r   rE   r=   r?   r   r@   r;   r   r1   r   hasattrrK   r   r   r   r	   getZcreate_model__name__Z
__fields__valuesrM   r0   rG   Z	has_aliasr6   r2   r!   default_factoryr3   r4   r5   
allow_noneZvalidate_alwaysZ
sub_fieldsZ	key_field
validatorsZpre_validatorsZpost_validatorsZ
parse_jsonshapeZpopulate_validators)rJ   rI   r=   r;   Zoriginal_typeZuse_typefZ	new_fieldr&   rH   r'   rM      sb   

rM   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)r0   r)   rY   operation_idr&   r&   r'   generate_operation_id_for_path   s   rd   router   c                 C   sH   | j  | j }tdd|}| jsJ | dt| jd   }|S )Nr\   r]   r   )r0   Zpath_formatr+   ra   methodslistrb   )re   rc   r&   r&   r'   generate_unique_id   s
   
rh   	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)itemsr?   dictdeep_dict_updaterg   )ri   rj   keyvaluer&   r&   r'   rm      s   
rm   
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.
    )r?   r   )rp   rq   rk   itemr&   r&   r'   get_value_or_default   s   

rs   )5r+   r^   dataclassesr   typingr   r   r   r   r   r   r	   r
   r   weakrefr   rB   r@   r   r   r   r   r   r   r   r   r   r   Zfastapi.datastructuresr   r   Zpydanticr   Zpydantic.fieldsr   Ztyping_extensionsr   Zroutingr   r   __annotations__r%   strboolr(   r-   rD   rG   rM   rd   rh   rm   rs   r&   r&   r&   r'   <module>   s   
 ,0
	

>
?
&


