o
    #ch^                     @   s	  U 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	 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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(m)Z)m*Z* e+dd e#,ddd D Z-e-d  dkZ.ee/ee/e/e/ee+e+e+ee0e0e0ee1e1e1eeeeiZ2e+e23 Z4ee e5d< e.r?d dlm6Z6 d dlm7Z7 d dlm8Z8 d dl9m:Z: d dl;m<Z< d dl=m>Z> d dl?m@Z@ d dlAmBZB d dlAmCZC d dlDmEZE d dlDmFZFmGZG d dlDmHZH zd dlImJZJ W n eKy   d d lImLZJ Y nw eFZMeFZNeGZOe<ZPeZQG d!d" d"ZRG d#d$ d$eSZTeG d%d& d&ZUd'ed(e@d)eVd*efd+d,ZWd-ee d*eeeVef  fd.d/ZXd0ee d*dfd1d2ZY	3dd0ed4e(d5 d6ed*efd7d8ZZd0ed*efd9d:Z[d;d<d=eUd>eBd?ed@eeeUe(dA f eCf dBe\d*eeVef fdCdDZ]dEeeU d*efdFdGZ^d;d<dEeeU d>eBd?edBe\d*eeeeUe(dA f eCf eeVeeVef f f f
dHdIZ_d=eUd*e\fdJdKZ`d=eUd*e\fdLdMZad=eUd*e\fdNdOZbd=eUd*e\fdPdQZcd=eUd*e\fdRdSZdd(e@d'ed*e@fdTdUZed=eUdVed*ee fdWdXZfdYeeVdZf d*eeVef fd[d\ZgdEeeU d]eVd*ee fd^d_Zhd0ee d*eeU fd`daZind dbljmkZk d dclmlZH d ddlmRZR d dlm8Z8 d delmmQZQ d dflnmTZT d dglompZp d dhl?mqZqmrZrmsZsmtZtmuZumvZvmwZw d dl?m@Z@ d dil?mUZU exZMee5dj< d dkl?mNZN d dll?mOZO d dmlymzZzm{Z{m|Z|m}Z} d dnlymWZW d dol~mPZP d dlm>Z> eZ:eeVef ZCeZEereteqevesewhZere/ete0eve+ese/ewe/iZeG dpdq dqZBG drds dseSZ6ddddtduedZef dveeVdf dwedxed*ef
dydzZJd{eeee ee f  d?eeee ee f eVf d*eeVef fd|d}Zd=eUd*e\fd~dZd=eUd*e\fddZd-ee d*eeeVef  fdd/ZXd0ee d*dfdd2ZY	3dd0ed4e(d5 d6ed*efdd8ZZd0ed*efdd:Z[d;d<d=eUd>eBd?ed@eeeUe(dA f eCf dBe\d*eeVef fddDZ]dEeeU d*efddGZ^d;d<dEeeU d>eBd?edBe\d*eeeeUe(dA f eCf eeVeeVef f f f
ddIZ_d=eUd*e\fddKZ`d=eUd*e\fddMZad=eUd*e\fddOZbd=eUd*e\fddQZcd=eUd*e\fddSZdd(e@d'ed*e@fddUZed=eUdVed*ee fddXZfdYeeVdZf d*eeVef fdd\ZgdEeeU d]eVd*ee fdd_Zhd0ee d*eeU fddaZid-ee deeeVef dZf d*eeeVef  fddZd'eee df d*e\fddZd'eee df d*e\fddZdVed*e\fddZd'eee df d*e\fddZd'eee df d*e\fddZd'ed*e\fddZd'eee df d*e\fddZd'ed*e\fddZd'ed*e\fddZd'ed*e\fddZd'ed*e\fddZe	d0ee d*eeU fddZdS )    )dequecopy)	dataclassis_dataclass)Enum)	lru_cache)AnyCallableDequeDict	FrozenSetListMappingSequenceSetTupleTypeUnioncast)RequestErrorModel)IncExModelNameMap	UnionType)	BaseModelcreate_model)VERSION)
UploadFile)	AnnotatedLiteralget_args
get_originc                 c       | ]}t |V  qd S N)int).0x r'   M/home/air/goalskill/back/venv/lib/python3.10/site-packages/fastapi/_compat.py	<genexpr>       r)   .N   Url)PydanticSchemaGenerationError)TypeAdapter)ValidationError)GetJsonSchemaHandler)eval_type_lenient)lenient_issubclass)	FieldInfo)GenerateJsonSchema)JsonSchemaValue)
CoreSchema)PydanticUndefinedPydanticUndefinedType)r-   )"with_info_plain_validator_function) general_plain_validator_functionc                   @      e Zd ZdS )
BaseConfigN__name__
__module____qualname__r'   r'   r'   r(   r=   R       r=   c                   @   r<   )ErrorWrapperNr>   r'   r'   r'   r(   rC   U   rB   rC   c                   @   sH  e Zd ZU eed< eed< dZed ed< edefddZ	ede
fd	d
ZedefddZedefddZd+ddZdefddZi fdddedeeef deeeef df deeeeeeef  df f fddZdddddddddeded  d!eedf d"eedf d#e
d$e
d%e
d&e
defd'd(Zdefd)d*ZdS ),
ModelField
field_infoname
validationrG   serializationmodereturnc                 C   s   | j j}|d ur
|S | jS r#   )rE   aliasrF   )selfar'   r'   r(   rL   ^   s   zModelField.aliasc                 C   s
   | j  S r#   )rE   is_requiredrM   r'   r'   r(   requiredc   s   
zModelField.requiredc                 C   s   |   S r#   )get_defaultrP   r'   r'   r(   defaultg      zModelField.defaultc                 C   s   | j jS r#   rE   
annotationrP   r'   r'   r(   type_k   rT   zModelField.type_Nc                 C   s   t t| jj| jf | _d S r#   )r/   r   rE   rV   _type_adapterrP   r'   r'   r(   __post_init__o   s   
zModelField.__post_init__c                 C   s   | j  rtS | j jddS )NT)call_default_factory)rE   rO   	UndefinedrR   rP   r'   r'   r(   rR   t   s   
zModelField.get_defaultr'   locvaluevaluesr]   .c             
   C   sT   z| j j|ddd fW S  ty) } zd t|jdd|dfW  Y d }~S d }~ww )NT)from_attributesFinclude_url)errors
loc_prefix)rX   validate_pythonr0   _regenerate_error_with_locrc   )rM   r^   r_   r]   excr'   r'   r(   validatey   s   zModelField.validatejsonTFrJ   includeexcludeby_aliasexclude_unsetexclude_defaultsexclude_noneri   pythonrk   rl   rm   rn   ro   rp   c          	   
   C   s   | j j||||||||dS )Nrj   )rX   dump_python)	rM   r^   rJ   rk   rl   rm   rn   ro   rp   r'   r'   r(   	serialize   s   zModelField.serializec                 C      t | S r#   )idrP   r'   r'   r(   __hash__   s   zModelField.__hash__)rK   N)r?   r@   rA   r4   __annotations__strrJ   r   propertyrL   boolrQ   r	   rS   rW   rY   rR   r   r   r   r$   r   rh   r   rt   rw   r'   r'   r'   r(   rD   X   sj   
 




	

rD   rV   rE   
field_namerK   c                 C      | S r#   r'   )rV   rE   r|   r'   r'   r(   get_annotation_from_field_info   s   r~   rc   c                 C   r}   r#   r'   )rc   r'   r'   r(   _normalize_errors      r   modelc                 C      |    d S r#   )model_rebuildr   r'   r'   r(   _model_rebuild      r   ri   rJ   rq   kwargsc                 K   s   | j dd|i|S )NrJ   r'   )
model_dumpr   rJ   r   r'   r'   r(   _model_dump   s   r   c                 C      | j S r#   )model_configr   r'   r'   r(   _get_model_config      r   T)separate_input_output_schemasfieldschema_generatormodel_name_mapfield_mappingrH   r   c                 C   sH   |rd nd}|| |p| j f }d|vr"| jjp| j dd|d< |S )NrG   z$ref_ title)rJ   rE   r   rL   replace)r   r   r   r   r   override_modejson_schemar'   r'   r(   get_schema_from_model_field   s   
r   fieldsc                 C      i S r#   r'   )r   r'   r'   r(   get_compat_model_name_map   r   r   c           	         s   |rd nd  fdd| D }|j |d\}}ttttttf f | D ]}d|v r<tt|d dd }||d< q&||fS )NrG   c                    s    g | ]}| p	|j |jjfqS r'   )rJ   rX   core_schema)r%   r   r   r'   r(   
<listcomp>   s    z#get_definitions.<locals>.<listcomp>)inputsdescriptionr   )generate_definitionsr   r   ry   r	   r_   split)	r   r   r   r   r   r   definitionsitem_defitem_descriptionr'   r   r(   get_definitions   s   


"r   c                 C   s(   ddl m} t| jjot| j|j S )Nr   params)fastapir   field_annotation_is_scalarrE   rV   
isinstanceBody)r   r   r'   r'   r(   is_scalar_field   s   r   c                 C      t | jjS r#   )field_annotation_is_sequencerE   rV   r   r'   r'   r(   is_sequence_field   r   r   c                 C   r   r#   )#field_annotation_is_scalar_sequencerE   rV   r   r'   r'   r(   is_scalar_sequence_field   r   r   c                 C   
   t | jS r#   )$is_bytes_or_nonable_bytes_annotationrW   r   r'   r'   r(   is_bytes_field      
r   c                 C   r   r#   )is_bytes_sequence_annotationrW   r   r'   r'   r(   is_bytes_sequence_field  r   r   c                 C   s.   t | }||}t| }|j|_|j|_|S r#   )typefrom_annotationr   metadatarV   )rE   rV   clsmerged_field_infonew_field_infor'   r'   r(   copy_field_info  s   
r   r^   c                 C   s.   t | jjp	| jj}t|tsJ t| |S r#   )r!   rE   rV   
issubclasssequence_typessequence_annotation_to_type)r   r^   origin_typer'   r'   r(   serialize_sequence_value  s   r   r]   .c                 C   s.   t dd| i dgjddd }d |d< |S )NzField requiredmissing)r   r]   inputFra   r   r   )r0   from_exception_datarc   )r]   errorr'   r'   r(   get_missing_field_error  s   r   
model_namec                 C   s"   dd | D }t |fi |}|S )Nc                 S   s   i | ]}|j |jj|jfqS r'   )rF   rE   rV   r%   fr'   r'   r(   
<dictcomp>  s    z%create_body_model.<locals>.<dictcomp>)r   )r   r   field_params	BodyModelr'   r'   r(   create_body_model  s   r   c                 C   s   dd | j  D S )Nc                 S   s   g | ]
\}}t ||d qS ))rE   rF   rD   )r%   rF   rE   r'   r'   r(   r   "  s    
z$get_model_fields.<locals>.<listcomp>)model_fieldsitemsr   r'   r'   r(   get_model_fields!  s   r   )
REF_PREFIX)AnyUrl)r=   )	Validator)rC   )MissingError)SHAPE_FROZENSET
SHAPE_LISTSHAPE_SEQUENCE	SHAPE_SETSHAPE_SINGLETONSHAPE_TUPLESHAPE_TUPLE_ELLIPSISr   RequiredParam)r[   )UndefinedType)field_schemaget_flat_models_from_fieldsget_model_name_mapmodel_process_schema)r~   )evaluate_forwardrefc                   @   s   e Zd ZU eed< dS )r5   ref_templateN)r?   r@   rA   ry   rx   r'   r'   r'   r(   r5   p  s   
 r5   c                   @   r<   )r.   Nr>   r'   r'   r'   r(   r.   t  rB   r.   )refr   rI   functionr   r   rI   c                C   r   r#   r'   )r   r   r   rI   r'   r'   r(   r:   w  s   r:   flat_modelsc                 C   s^   i }| D ](}t ||td\}}}|| || }d|v r(|d dd |d< |||< q|S )Nr   
ref_prefixr   r   r   )r   r   updater   )r   r   r   r   m_schemam_definitionsm_nested_modelsr   r'   r'   r(   get_model_definitions  s   

r   c                 C   sz   ddl m} | j}| jtkr*t| jts*t| jts*t	| js*t
| js*t||jr,dS | jr;tdd | jD s;dS dS )Nr   r   Fc                 s   r"   r#   is_pv1_scalar_fieldr   r'   r'   r(   r)     
    
z&is_pv1_scalar_field.<locals>.<genexpr>T)r   r   rE   shaper   r3   rW   r   dictr   r   r   r   
sub_fieldsall)r   r   rE   r'   r'   r(   r     s(   



r   c                 C   sP   | j tv rt| jts| jd ur| jD ]	}t|s dS qdS t| jr&dS dS )NFT)r   sequence_shapesr3   rW   r   r   r   _annotation_is_sequence)r   	sub_fieldr'   r'   r(   is_pv1_scalar_sequence_field  s   


r   c                 C   s^   g }| D ](}t |trt|gtd }|| qt |tr'|t| q|| q|S )N)rc   r   )	r   rC   r0   r   rc   extendlistr   append)rc   
use_errorsr   
new_errorsr'   r'   r(   r     s   

c                 C   r   r#   )update_forward_refsr   r'   r'   r(   r     r   c                 K   s   | j di |S )Nr'   )r   r   r'   r'   r(   r     s   c                 C   r   r#   )
__config__r   r'   r'   r(   r     r   c                 C   s   t | |tdd S )Nr   r   )r   r   )r   r   r   r   r   r'   r'   r(   r     s
   c                 C   s   t | t d}t|S )Nknown_models)r   setr   )r   modelsr'   r'   r(   r     s   c                 C   s   t | t d}i t||dfS )Nr  )r   r   )r   r
  r   )r   r   r   r   r  r'   r'   r(   r     s   c                 C   ru   r#   r   r   r'   r'   r(   r        c                 C   s   | j tv p	t| jS r#   )r   r   r   rW   r   r'   r'   r(   r     s   c                 C   ru   r#   )r   r   r'   r'   r(   r     r  c                 C   s   t | jtS r#   )r3   rW   bytesr   r'   r'   r(   r     r   c                 C   s   | j tv o
t| jtS r#   )r   r   r3   rW   r  r   r'   r'   r(   r     s   c                 C   ru   r#   r   rU   r'   r'   r(   r     r  c                 C   s   t | j |S r#   )sequence_shape_to_typer   )r   r^   r'   r'   r(   r        c                 C   s&   t t | d}t|gt}| d S )Nr\   r   )rC   r   r0   r   rc   )r]   missing_field_error	new_errorr'   r'   r(   r     s   c                 C   s"   t |}| D ]}||j|j< q|S r#   )r   
__fields__rF   )r   r   r   r   r'   r'   r(   r   
  s   c                 C   s   t | j S r#   )r  r  r_   r   r'   r'   r(   r     r  rd   c                    s    fddt | D }|S )Nc              	      s(   g | ]}i |d  | d d iqS )r]   r'   )get)r%   errrd   r'   r(   r     s    z._regenerate_error_with_loc.<locals>.<listcomp>)r   )rc   rd   updated_loc_errorsr'   r  r(   rf     s   
rf   c                 C   s   t | ttfr	dS t | tS )NF)r3   ry   r  r   rV   r'   r'   r(   r   !  s   
r   c                 C   sL   t | }|tu s|tu rt| D ]	}t|r dS qdS t| p%tt | S NTF)r!   r   r   r    r   r   rV   originargr'   r'   r(   r   '  s   
r   c                 C   s   t | tot | ttf S r#   )r   r   ry   r  )r^   r'   r'   r(   value_is_sequence3  s   r  c                 C   s    t | tttfpt| pt| S r#   )r3   r   r   r   r   r   r  r'   r'   r(   _annotation_is_complex7  s
   r  c                 C   sR   t | }|tu s|tu rtdd t| D S t| p(t|p(t|dp(t|dS )Nc                 s   r"   r#   )field_annotation_is_complex)r%   r  r'   r'   r(   r)   B  r*   z.field_annotation_is_complex.<locals>.<genexpr>__pydantic_core_schema____get_pydantic_core_schema__)r!   r   r   anyr    r  hasattr)rV   r  r'   r'   r(   r  ?  s   r  c                 C   s   | t u pt|  S r#   )Ellipsisr  r  r'   r'   r(   r   L  s   r   c                 C   sh   t | }|tu s|tu r%d}t| D ]}t|rd}qt|s" dS q|S t| o3tdd t| D S )NFTc                 s   r"   r#   )r   r%   sub_annotationr'   r'   r(   r)   \  r   z6field_annotation_is_scalar_sequence.<locals>.<genexpr>)r!   r   r   r    r   r   r   r   )rV   r  at_least_one_scalar_sequencer  r'   r'   r(   r   Q  s   r   c                 C   H   t | trdS t| }|tu s|tu r"t| D ]
}t |tr! dS qdS r  )r3   r  r!   r   r   r    r  r'   r'   r(   r   b     

r   c                 C   r'  r  )r3   r   r!   r   r   r    r  r'   r'   r(   .is_uploadfile_or_nonable_uploadfile_annotationm  r(  r)  c                 C   Z   t | }|tu s|tu rd}t| D ]	}t|rd}qq|S t| o,tdd t| D S )NFTc                 s   r"   r#   )r   r$  r'   r'   r(   r)     r   z/is_bytes_sequence_annotation.<locals>.<genexpr>)r!   r   r   r    r   r   r   rV   r  at_least_oner  r'   r'   r(   r   x     r   c                 C   r*  )NFTc                 s   r"   r#   )r)  r$  r'   r'   r(   r)     r   z4is_uploadfile_sequence_annotation.<locals>.<genexpr>)r!   r   r   r    !is_uploadfile_sequence_annotationr   r   r+  r'   r'   r(   r.    r-  r.  c                 C   ru   r#   )r   r   r'   r'   r(   get_cached_model_fields  rT   r/  )ri   )collectionsr   r   dataclassesr   r   enumr   	functoolsr   typingr	   r
   r   r   r   r   r   r   r   r   r   r   r   fastapi.exceptionsr   fastapi.typesr   r   r   pydanticr   r   pydantic.versionr   PYDANTIC_VERSIONstarlette.datastructuresr   typing_extensionsr   r   r    r!   tupler   PYDANTIC_VERSION_MINOR_TUPLEPYDANTIC_V2r  r
  	frozensetr   keysr   rx   r.   r/   r0   ,pydantic._internal._schema_generation_sharedr1    pydantic._internal._typing_extrar2   pydantic._internal._utilsr3   pydantic.fieldsr4   pydantic.json_schemar5   r6   pydantic_corer7   r8   r9   r-   pydantic_core.core_schemar:   ImportErrorr;   r   r[   r   r   r   r=   	ExceptionrC   rD   ry   r~   r   r   r   r   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   fastapi.openapi.constantsr   r   pydantic.class_validatorspydantic.error_wrapperspydantic.errorsr   r   r   r   r   r   r   r   r#  pydantic.schemar   r   r   r   pydantic.typingpydantic.utilsr   r  r   r   r   r$   rf   r   r   r  r  r  r   r   r   r)  r   r.  r/  r'   r'   r'   r(   <module>   s   < O
"

	

"
$		


	

"

	
	
"

 