o
    ûT·jÁD  ã                   @   s†  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 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 d dl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m Z m!Z!m"Z" d dlm#Z# d dlm$Z$ d dlm%Z% d dl&m'Z( d dl)m*Z* d dl+m,Z, d dl-m.Z/ d dl-m0Z0 d dl1m2Z2 d dl1m3Z3 d dl1m4Z4 d dl5m6Z6 e3Z7e3Z8		dldede9e:ef dB de9e:ef dB defdd„Z;G dd„ de/ƒZ.i d d!“d"d“d#d“d$d“d%d“d&d“d'd“d(d“d)d“d*d“d+d“d,d“d-d“d.d“d/d“d0d“d1d“d2dddd3œ¥Z<d4e,de9e:ef fd5d6„Z=eG d7d8„ d8ƒƒZ>d9e>de?fd:d;„Z@d2d<œd9e>d=ed>e9eAe>ed? f e0f d@e?de9e:ef f
dAdB„ZBd2d<œdCee> d=ed@e?deAe9eAe>ed? f e0f e9e:e9e:ef f f fdDdE„ZCd9e>de?fdFdG„ZDd4e,dHede,fdIdJ„ZEd9e>dedee fdKdL„ZFdMeAeGe:B d!f de9e:ef fdNdO„ZHdCee> dPe:deIe fdQdR„ZJdSeIe deKe> fdTdU„ZLedSeIe deKe> fdVdW„ƒZMeIdX eIe	 B ZNeOeN ZPdYe:de:fdZd[„ZQd\ePde9eNe:f fd]d^„ZR	dmdSeIdX d_ePdB dePfd`da„ZSdHed_ePdePfdbdc„ZTd9e>d_ePdePfddde„ZUdCee> d_ePdePfdfdg„ZVdhee dieAe:eGB d!f deKe9e:ef  fdjdk„ZWdS )né    N)ÚSequence)Úcopy)Ú	dataclassÚis_dataclass)ÚEnum)Ú	lru_cache)Ú	AnnotatedÚAnyÚLiteralÚUnionÚcastÚget_argsÚ
get_origin)Úlenient_issubclassÚshared)ÚREF_TEMPLATE)ÚIncExÚModelNameMapÚ	UnionType)Ú	BaseModelÚ
ConfigDictÚFieldÚTypeAdapterÚcreate_model)ÚPydanticSchemaGenerationError)ÚPydanticUndefinedAnnotation)ÚValidationError)Ú_typing_extra)ÚGetJsonSchemaHandler)Ú	FieldInfo)ÚGenerateJsonSchema)ÚJsonSchemaValue)Ú
CoreSchema)ÚPydanticUndefined)ÚUrl)Ú"with_info_plain_validator_functionÚvalueÚglobalnsÚlocalnsÚreturnc                 C   s2   t tdd ƒ}|d ur|| ||ƒd S t | ||¡S )NÚtry_eval_typer   )ÚgetattrÚ_pydantic_typing_extraÚeval_type_lenient)r&   r'   r(   r*   © r.   úU/home/dinkstrade/pdmp-scanner/venv/lib/python3.10/site-packages/fastapi/_compat/v2.pyÚevaluate_forwardref+   s   ÿr0   c                   @   s   e Zd Zdedefdd„ZdS )r    Úschemar)   c                 C   sJ   dddœ}| j dkr| jjn| jj}|dkrd|d< |  ||| jj¡ |S )NÚstringzapplication/octet-stream)ÚtypeÚcontentMediaTypeÚserializationÚbase64ÚcontentEncoding)ÚmodeÚ_configÚser_json_bytesÚval_json_bytesÚupdate_with_validationsÚValidationsMappingÚbytes)Úselfr1   Újson_schemaÚ
bytes_moder.   r.   r/   Úbytes_schema<   s   

ÿýzGenerateJsonSchema.bytes_schemaN)Ú__name__Ú
__module__Ú__qualname__r"   r!   rB   r.   r.   r.   r/   r    9   s    r    Údefault.Údefault_factoryÚaliasÚalias_priorityÚvalidation_aliasÚserialization_aliasÚtitleÚfield_title_generatorÚdescriptionÚexamplesÚexcludeÚ
exclude_ifÚdiscriminatorÚ
deprecatedÚjson_schema_extraÚfrozenÚvalidate_defaultT)ÚreprÚinitÚinit_varÚkw_onlyÚ
field_infoc                 C   s:   i }t D ]}t| |tƒ}|tur|||< q| j| j|dœS )N)Ú
annotationÚmetadataÚ
attributes)Ú_Attrsr+   Ú	Undefinedr\   r]   )r[   r^   Úattrr&   r.   r.   r/   Úasdictd   s   €ýrb   c                   @   sŽ  e Zd ZU eed< eed< dZed ed< dZe	dB ed< e
defd	d
„ƒZe
dedB fdd„ƒZe
dedB 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B df deeeeeef  f fdd„Zdddddddd œdeded! d"edB d#edB d$ed%ed&ed'edefd(d)„Zddddddd*œded"edB d#edB d$ed%ed&ed'edefd+d,„Zdefd-d.„ZdS )0Ú
ModelFieldr[   ÚnameÚ
validation©re   r5   r8   NÚconfigr)   c                 C   s   | j j}|d ur
|S | jS ©N)r[   rH   rd   )r?   Úar.   r.   r/   rH   x   s   zModelField.aliasc                 C   s   | j j}t|tƒr|r|S d S rh   )r[   rJ   Ú
isinstanceÚstr)r?   Úvar.   r.   r/   rJ   }   s   zModelField.validation_aliasc                 C   s   | j j}|pd S rh   )r[   rK   )r?   Úsar.   r.   r/   rK   „   s   zModelField.serialization_aliasc                 C   s   |   ¡ S rh   )Úget_default©r?   r.   r.   r/   rF   ‰   ó   zModelField.defaultc                 C   s–   t  ¡ �= tjdkrddlm} t jd|d� t| jƒ}|d g|d ¢t	d
i |d ¤Ž‘R }t
t| | jd	�| _W d   ƒ d S 1 sDw   Y  d S )N)é   é   r   )Ú UnsupportedFieldAttributeWarningÚignore)Úcategoryr\   r]   r^   )rg   r.   )ÚwarningsÚcatch_warningsr   ÚPYDANTIC_VERSION_MINOR_TUPLEÚpydantic.warningsrs   Úsimplefilterrb   r[   r   r   r   rg   Ú_type_adapter)r?   rs   Ú
field_dictÚannotated_argsr.   r.   r/   Ú__post_init__�   s$   

ÿ
ÿþû
þ"ëzModelField.__post_init__c                 C   s   | j  ¡ rtS | j jdd�S )NT)Úcall_default_factory)r[   Úis_requiredr`   rn   ro   r.   r.   r/   rn   ¨   s   
zModelField.get_defaultr.   )Úlocr&   Úvaluesr�   .c             
   C   sT   z| j j|dd�g 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)r{   Úvalidate_pythonr   Ú_regenerate_error_with_locr†   )r?   r&   r‚   r�   Úexcr.   r.   r/   Úvalidate­   s   þÿ€ÿzModelField.validateÚjsonTF©r8   ÚincluderP   Úby_aliasÚexclude_unsetÚexclude_defaultsÚexclude_none)rŒ   ÚpythonrŽ   rP   r�   r�   r‘   r’   c          	   
   C   s   | j j||||||||d�S )Nr�   )r{   Údump_python)	r?   r&   r8   rŽ   rP   r�   r�   r‘   r’   r.   r.   r/   Ú	serialize¾   s   øzModelField.serialize©rŽ   rP   r�   r�   r‘   r’   c             	   C   s   | j j|||||||d�S )Nr–   )r{   Ú	dump_json)r?   r&   rŽ   rP   r�   r�   r‘   r’   r.   r.   r/   Úserialize_json×   s   ùzModelField.serialize_jsonc                 C   ó   t | ƒS rh   )Úidro   r.   r.   r/   Ú__hash__ñ   s   zModelField.__hash__)r)   N)rC   rD   rE   r   Ú__annotations__rk   r8   r
   rg   r   ÚpropertyrH   rJ   rK   r	   rF   r~   rn   ÚdictÚtupleÚintÚlistr‹   r   Úboolr•   r>   r˜   r›   r.   r.   r.   r/   rc   q   sš   
 
ýûþ
ýû
úöþüûúùø	÷
ö
õ÷þüûúùø	÷

örc   Úfieldc                 C   s$   | j j di ¡ dg ¡}t|ƒdkS )Nr1   Úcomputed_fieldsr   )r{   Úcore_schemaÚgetÚlen)r£   r¤   r.   r.   r/   Ú_has_computed_fields÷   s   ÿr¨   ©Úseparate_input_output_schemasÚmodel_name_mapÚfield_mappingrf   rª   c                 C   sp   |st | ƒrd nd}| jdkr| jp| jn| jp| j}|| |p!| jf }d|vr6| jjp3| ¡  dd¡|d< |S )Nre   z$refÚ_ú rL   )r¨   r8   rJ   rH   rK   r[   rL   Úreplace)r£   r«   r¬   rª   Úoverride_modeÚfield_aliasr@   r.   r.   r/   Úget_schema_from_model_fieldþ   s"   ÿÿý

ÿ€
ýÿr²   Úfieldsc                    s  t td�}dd„ | D ƒ}dd„ | D ƒ}t|tƒ d�}t|tƒ d�}dd„ |D ƒ}dd„ |D ƒ}	||	 }
dd	„ | D ƒ‰ ‡ fd
d	„|
D ƒ}‡fdd„t| ƒt|ƒ D ƒ}|j|d�\}}tttttt	f f |ƒ 
¡ D ]}d|v rtt|d ƒ d¡d }||d< qi|tttttt	f f |ƒfS )N)Úref_templatec                 S   ó   g | ]	}|j d kr|‘qS ©re   ©r8   ©Ú.0r£   r.   r.   r/   Ú
<listcomp>'  ó    z#get_definitions.<locals>.<listcomp>c                 S   rµ   )r5   r·   r¸   r.   r.   r/   rº   (  r»   ©Úknown_modelsc                 S   ó"   g | ]}t t|d �|jdd�‘qS )©r\   re   ©r[   rd   r8   ©rc   r   rC   ©r¹   Úmodelr.   r.   r/   rº   /  ó    ûýÿc                 S   r¾   )r¿   r5   rÀ   rÁ   rÂ   r.   r.   r/   rº   7  rÄ   c                 S   s   h | ]}|j j’qS r.   ©r[   r\   ©r¹   Úfr.   r.   r/   Ú	<setcomp>@  s    z"get_definitions.<locals>.<setcomp>c                    s   h | ]
}|j jˆ vr|’qS r.   rÅ   rÆ   )Úinput_typesr.   r/   rÈ   A  s    c                    s,   g | ]}|ˆ st |ƒr|jnd |jjf‘qS r¶   )r¨   r8   r{   r¥   r¸   r©   r.   r/   rº   D  s    
øÿÿùÿ)ÚinputsrN   úr   )r    r   Úget_flat_models_from_fieldsÚsetr¡   Úgenerate_definitionsr   rž   rk   r	   r‚   Úsplit)r³   r«   rª   Úschema_generatorÚvalidation_fieldsÚserialization_fieldsÚflat_validation_modelsÚflat_serialization_modelsÚflat_validation_model_fieldsÚflat_serialization_model_fieldsÚflat_model_fieldsÚunique_flat_model_fieldsrÊ   r¬   ÚdefinitionsÚitem_defÚitem_descriptionr.   )rÉ   rª   r/   Úget_definitions  s<   
	ÿÿúú
ÿ

ö"€rÜ   c                 C   s*   ddl m} t | jj¡ot| j|jƒ S )Nr   )Úparams)ÚfastapirÝ   r   Úfield_annotation_is_scalarr[   r\   rj   ÚBody)r£   rÝ   r.   r.   r/   Úis_scalar_field]  s   ÿþrá   r\   c                 C   s.   t | ƒ}| |¡}t| ƒ}|j|_|j|_|S rh   )r3   Úfrom_annotationr   r]   r\   )r[   r\   ÚclsÚmerged_field_infoÚnew_field_infor.   r.   r/   Úcopy_field_infoe  s   
ræ   c                 C   sr   t | jjƒp	| jj}|tu s|tu r*t| jjƒ}|D ]}|td ƒu r#qt |ƒp(|} t|tj	ƒs2J ‚tj
| |ƒS rh   )r   r[   r\   r   r   r   r3   Ú
issubclassr   Úsequence_typesÚsequence_annotation_to_type)r£   r&   Úorigin_typeÚ
union_argsÚ	union_argr.   r.   r/   Úserialize_sequence_valuen  s   rí   r�   c                 C   s.   t  dd| i dœg¡jdd�d }d |d< |S )NzField requiredÚmissing)r3   r�   ÚinputFr„   r   rï   )r   Úfrom_exception_datar†   )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.   )rd   r[   r\   rÆ   r.   r.   r/   Ú
<dictcomp>†  s    z%create_body_model.<locals>.<dictcomp>)r   )r³   ró   Úfield_paramsÚ	BodyModelr.   r.   r/   Úcreate_body_modelƒ  s   r÷   rÃ   c                 C   sX   g }| j  ¡ D ]"\}}|j}t|ttfƒst|ƒrd }n| j}| t	|||d�¡ q|S )N)r[   rd   rg   )
Úmodel_fieldsÚitemsr\   r   r   rž   r   Úmodel_configÚappendrc   )rÃ   rø   rd   r[   Útype_rú   r.   r.   r/   Úget_model_fields‹  s   ýÿrý   c                 C   r™   rh   )rý   )rÃ   r.   r.   r/   Úget_cached_model_fields�  rp   rþ   r   rd   c                 C   s   t  dd| ¡S )Nz[^a-zA-Z0-9.\-_]r­   )ÚreÚsub)rd   r.   r.   r/   Únormalize_name©  s   r  Úunique_modelsc                 C   s2   i }| D ]}t |jƒ}|||< qdd„ | ¡ D ƒS )Nc                 S   s   i | ]\}}||“qS r.   r.   )r¹   ÚkÚvr.   r.   r/   rô   ²  s    z&get_model_name_map.<locals>.<dictcomp>)r  rC   rù   )r  Úname_model_maprÃ   ró   r.   r.   r/   Úget_model_name_map­  s
   

r  r½   c                 C   s"   |pt ƒ }t| ƒ}t||d� |S ©Nr¼   )rÍ   rý   rÌ   )rÃ   r½   r³   r.   r.   r/   Úget_flat_models_from_modelµ  s   
r  c                 C   sf   t | ƒ}|d ur1t| ƒD ]$}t|ttfƒr*||vr)| |¡ t|tƒr)t||d� qt||d� q|S r  )r   r   r   r   r   Úaddr  Úget_flat_models_from_annotation)r\   r½   ÚoriginÚargr.   r.   r/   r
  ¾  s   

€r
  c                 C   s`   | j j}t|tƒr||v r|S | |¡ t||d� |S t|tƒr(| |¡ |S t||d� |S r  )r[   r\   r   r   r	  r  r   r
  )r£   r½   Ú
field_typer.   r.   r/   Úget_flat_models_from_fieldÎ  s   


ü
ÿr  c                 C   s   | D ]}t ||d� q|S r  )r  )r³   r½   r£   r.   r.   r/   rÌ   Þ  s   rÌ   r†   r‡   c                    s   ‡ fdd„| D ƒ}|S )Nc              	      s(   g | ]}i |¥d ˆ |  d d¡ i¥‘qS )r�   r.   )r¦   )r¹   Úerr©r‡   r.   r/   rº   é  s    ÿz._regenerate_error_with_loc.<locals>.<listcomp>r.   )r†   r‡   Úupdated_loc_errorsr.   r  r/   r‰   æ  s   
ÿr‰   )NNrh   )Xrÿ   rv   Úcollections.abcr   r   Údataclassesr   r   Úenumr   Ú	functoolsr   Útypingr   r	   r
   r   r   r   r   Úfastapi._compatr   r   Úfastapi.openapi.constantsr   Úfastapi.typesr   r   r   Úpydanticr   r   r   r   r   r   r   r   Úpydantic._internalr   r,   Ú,pydantic._internal._schema_generation_sharedr   Úpydantic.fieldsr   Úpydantic.json_schemar    Ú_GenerateJsonSchemar!   Úpydantic_corer"   r#   r$   Úpydantic_core.core_schemar%   ÚRequiredParamr`   rž   rk   r0   r_   rb   rc   r¢   r¨   rŸ   r²   rÜ   rá   ræ   rí   r    rò   r3   r÷   r¡   rý   rþ   ÚTypeModelOrEnumrÍ   ÚTypeModelSetr  r  r  r
  r  rÌ   r‰   r.   r.   r.   r/   Ú<module>   sJ   $
ýÿþý
üÿþýüûúùø	÷
öõôóòñðïë ùþýÿüù

ø#üþýüÿÿ
û@	&ÿÿ
þ	ÿÿÿ
þ	ÿÿ
þÿÿ
þÿÿ
þÿÿþ