o
    ci                     @   sx  d dl Z d dlZd dlmZmZmZ d dlZd dlmZm	Z	m
Z
m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 erFdd	lmZ d
eeB dB defddZdedee fddZdZe
dddfdedededB dedB dedB ded defddZdedededefddZ dd defd!d"Z!d#e"eef d$e"eef ddfd%d&Z#d'eeB d(eeB deeB fd)d*Z$dS )+    N)TYPE_CHECKINGAnyLiteral)
ModelFieldPydanticSchemaGenerationError	Undefinedannotation_is_pydantic_v1)DefaultPlaceholderDefaultType)FastAPIDeprecationWarningPydanticV1NotSupportedError)	FieldInfo   )v2)APIRoute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   O/sda-disk/www/egybert/egybert_env/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nametype_r   
field_infoaliasmode)r'   serializationc                 C   sb   t |rtd|d|pt|||d}z	tj|| |dW S  ty0   tjt	j
|dd w )NzXpydantic.v1 models are no longer supported by FastAPI. Please update the response model .)
annotationr   r+   )r,   r(   r*   )r)   )r   r   r   r   r   r   fastapi
exceptionsFastAPIError_invalid_args_messageformat)r(   r)   r   r*   r+   r,   r   r   r    create_model_field:   s    
r5   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   )messagecategory
stacklevel\W_)warningswarnr   r$   sublower)r(   r"   r6   operation_idr   r   r    generate_operation_id_for_pathP   s   rB   router   c                 C   sH   | j  | j }tdd|}| jsJ | dt| jd   }|S )Nr;   r<   r   )r(   path_formatr$   r?   methodslistr@   )rC   rA   r   r   r    generate_unique_id_   s
   
rG   	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)items
isinstancedictdeep_dict_updaterF   )rH   rI   keyvaluer   r   r    rM   g   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.
    )rK   r	   )rP   rQ   rJ   itemr   r   r    get_value_or_defaulty   s   

rS   )%r$   r=   typingr   r   r   r0   fastapi._compatr   r   r   r   fastapi.datastructuresr	   r
   fastapi.exceptionsr   r   pydantic.fieldsr   _compatr   routingr   r   strboolr!   r#   r&   r3   r5   rB   rG   rL   rM   rS   r   r   r   r    <module>   sh    

&