
    \Ii"                     x   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	 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 d dlmZmZ d dlmZ d dlmZ d d	lmZ d
dl m!Z! erd
dl"m#Z#  e       Z$ee%e   e%e   f   e&d<   dee'e(df   de)fdZ*de(de+e(   f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"Z/dd#d$ed%eee%e   e%e   f      defd&Z0de(de(d'e(de(fd(Z1d)d*de(fd+Z2d,e.eef   d-e.eef   ddfd.Z3d/eeef   d0eeef   deeef   fd1Z4y)2    N)MutableMapping)TYPE_CHECKINGAnyOptionalUnioncast)WeakKeyDictionary)	
BaseConfig
ModelFieldPydanticSchemaGenerationError	UndefinedUndefinedType	Validatorannotation_is_pydantic_v1lenient_issubclassmay_v1)DefaultPlaceholderDefaultType)	BaseModel)	FieldInfo)Literal   )v2)APIRoute_CLONED_TYPES_CACHEstatus_codereturnc                 @    | y| dv ryt        |       }|dk  xs |dv  S )NT>   1XX2XX3XX4XX5XXdefault   >   0        )int)r   current_status_codes     O/home/mario/Escritorio/furbo/venv/lib/python3.12/site-packages/fastapi/utils.pyis_body_allowed_for_status_coder,   )   sA       k*#c)S-@O-STT    pathc                 @    t        t        j                  d|             S )Nz{(.*?)})setrefindall)r.   s    r+   get_path_param_namesr3   :   s    rzz)T*++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)r4   serializationversion)1r5   c
           	      Z   |xs i }t         j                  }
|xs t        j                         }| ||||||
|d}t        |      st	        |t         j                        s|	dk(  rddlm} 	  |j                  di |S |xs t        |||      }|| |d}	 t        j                  di |S # t        $ r5 t        j                  j                  t        j                  |            d w xY w# t        $ r5 t        j                  j                  t        j                  |            d w xY w)	N)r6   r;   r7   r8   r$   r9   r:   r<   r@   r   v1)r7   )
annotationr$   r<   )r=   r6   r;    )r   r
   r   r   
isinstancefastapi._compatrC   r   RuntimeErrorfastapi
exceptionsFastAPIError_invalid_args_messageformatr   r   )r6   r7   r8   r$   r9   r:   r;   r<   r=   r?   v1_model_configv1_field_info	v1_kwargsrC   kwargss                  r+   create_model_fieldrR   I   sC    (-2''O4&"2"2"4M#,'	I 	"%(j&"2"23c>&	 2==-9--   
9gU$

 JG	==*6**  	$$11%,,5,9	 - 	$$11%,,5,9	s   +B+ C, +>C),>D*cloned_typesfieldrT   c                   t        | t        j                        r| S ddlm} |t
        }| j                  }|}t        ||j                        rt        t        |j                     |      }|j                  |      }|e|j                  |j                  |      }|||<   |j                  j                         D ]&  }t!        ||      |j                  |j"                  <   ( t%        | j"                  |d      }| j&                  |_        | j(                  |_        | j*                  |_        | j,                  |_        | j.                  |_        | j0                  |_        | j2                  |_        | j4                  |_        | j6                  |_        | j8                  |_        | j:                  r*| j:                  D cg c]  }t!        ||       c}|_        | j<                  rt!        | j<                  |      |_        | j>                  |_        | j@                  |_         | jB                  |_!        | jD                  |_"        | jF                  |_#        |jI                          |S c c}w )Nr   rB   )__base__rS   r@   )r6   r7   r?   )%rF   r   r   rG   rC   r   r7   r   r   r   typegetcreate_model__name__
__fields__valuescreate_cloned_fieldr6   rR   	has_aliasr<   r8   r$   default_factoryr9   r:   r;   
allow_nonevalidate_always
sub_fields	key_field
validatorspre_validatorspost_validators
parse_jsonshapepopulate_validators)rU   rT   rC   original_typeuse_typef	new_field	sub_fields           r+   r^   r^      s   
 %'" *KKMH-6T",,/?##M2}'='=VH*2L'"--446 .A!-/##AFF+
 #

(CPI//IkkIO!&!7!7II % 5 5II"//I ++I ++I % 5 5I #-- 
  	E 
	 1OO%
	 !++I$33I % 5 5I ++IkkIO!!# 
s    I+methodc                     t        j                  dt        d       |  | }t        j                  dd|      }| d|j                          }|S )Nzrfastapi.utils.generate_operation_id_for_path() was deprecated, it is not used internally, and will be removed soon   )
stacklevel\W_)warningswarnDeprecationWarningr1   sublower)r6   r.   rp   operation_ids       r+   generate_operation_id_for_pathr|      sY     MM	>	 VD6?L66%l3L"^1V\\^$45Lr-   router   c                     | j                    | j                   }t        j                  dd|      }| j                  sJ | dt        | j                        d   j                          }|S )Nrt   ru   r   )r6   path_formatr1   ry   methodslistrz   )r}   r{   s     r+   generate_unique_idr      sg    jj\%"3"3!45L66%l3L==="^1T%--%8%;%A%A%C$DELr-   	main_dictupdate_dictc                    |j                         D ]z  \  }}|| v r3t        | |   t              r t        |t              rt        | |   |       =|| v r5t        | |   t              r"t        ||   t              r| |   ||   z   | |<   v|| |<   | y )N)itemsrF   dictdeep_dict_updater   )r   r   keyvalues       r+   r   r      s    !'') #
U99S>405$'Ys^U399S>40;s+T2&s^k#.>>IcN"IcN#r-   
first_itemextra_itemsc                 H    | f|z   }|D ]  }t        |t              r|c S  | 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.
    )rF   r   )r   r   r   items       r+   get_value_or_defaultr      s7     MK'E $ 23K r-   )5r1   rv   collections.abcr   typingr   r   r   r   r   weakrefr	   rI   rG   r
   r   r   r   r   r   r   r   r   fastapi.datastructuresr   r   pydanticr   pydantic.fieldsr   typing_extensionsr   _compatr   routingr   r   rX   __annotations__r)   strboolr,   r0   r3   rL   r   rR   r^   r|   r   r   r   rE   r-   r+   <module>r      s[   	  *  & 
 
 
 C  % % !  ^DOT)_$DE 
UsC~1F U4 U",s ,s3x ,
<  8<&+426&*3?$*<
<< tCN34< c]	<
 D-'(< Z($./< #< C=< /
0< [!< <D PT77 >$y/4	?*JKL7 	7t%(j S #S#X #T#s(^ #PT #$(+56*K78 {*+r-   