o
    SDi                     @   s  U d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl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mZmZmZmZ d dlZd dlZd dlZd dlZd dlZd dlZd dlmZ d dl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( d dlm)Z)m*Z*m+Z+m,Z,m-Z-m.Z. d dl/m0Z1 d dl2m3Z3m4Z4 d dlm5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZA d dlBmCZCmDZDmEZEmFZFmGZGmHZHmIZI d dlJmKZKmLZL d dlMmNZN d dlOmPZP d dlQmRZRmSZSmTZT d dlUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^ d dl_m`Z`maZambZb er$d dl_mcZcmdZdmbZb ejedkr1d dlmfZf nd dlmfZf e;de
de5f dZgehZie9ejd< e;dee$ef dZke;dedZle;d e$dZme.ejne*ejoe)ejpe-ejqe,ejre+ejse3ejtiZuevejwZxe$e&fZyzd d!lzm{Z{ g eye{R ZyW n
 e|y   Y nw d"Z}e~d#d$ ee%j D Zd%Ze% Zd&d' e4jD Zejdi eDG d(d) d)Zd*e4fd+d,Zejdi eDG d-d. d.Zejdi eDeCG d/d0 d0Zd1d2d3eej$ d4e5d5eeNef d6e5f
d7d8Zd9eek d6eek fd:d;Zejdi eDeCG d<d= d=Zejdi eDeCG d>d? d?eZd@e
dAe5dBe(jfdCdDZdEehfdFdGZd9eem d6dHfdIdJZedKed6eevei eveh f fdLdMZdNe jd6eehdf fdOdPZe>ejdi eDG dQdR dReem ZdSe
fdTdUZG dVdW dWZG dXdY dYeZG dZd[ d[eZG d\d] d]eZe>G d^d_ d_Zd`e#fdadbZe>G dcdd ddZeddfdgZddhdiZdjed6dfdkdlZdmeeef dneeeVe[f  doehd6dfdpdqZdrdsdteeR doehfdudvZd9edwe[doehfdxdyZd9edzd{dweYdoehfd|d}Zd9edzd{dweeZeXf doehfd~dZd9edweZdoehdeehe5f dedee5df fddZd9edweXdoehdede5d6dfddZd9edehdoehfddZG dd deZe>G dd deel Zde5deehe5f d6e5fddZdS )    N)CallableSequence)date)Enum)cache)TYPE_CHECKING	AnnotatedGenericUnioncast)Response)is_async_gen_callableis_coroutine_callableis_gen_callable)APIRoute)	BaseModelField	RootModel)_decorators)FieldSerializerDecoratorInfoFieldValidatorDecoratorInfoModelSerializerDecoratorInfoModelValidatorDecoratorInfoRootValidatorDecoratorInfoValidatorDecoratorInfo)try_eval_type)ComputedFieldInfo	FieldInfo)AnyDocNewTypeSelf	TypeAliasTypeAliasTypeTypeVar_AnnotatedAliasassert_neverfinalget_args
get_originoverload)DATACLASS_KW_ONLYDATACLASS_SLOTSSentinel	UnionTypefully_unwrap_decorator2get_name_of_function_wrapped_in_pydantic_validatorlenient_issubclass)CadwynError!InvalidGenerationInstructionError)VersionType)ResponseInfo)AlterEnumSubInstructionEnumDidntHaveMembersInstructionEnumHadMembersInstruction)	AlterSchemaSubInstructionFieldDidntExistInstructionFieldDidntHaveInstructionFieldExistedAsInstructionFieldHadInstructionSchemaHadInstructionValidatorDidntExistInstructionValidatorExistedInstruction_get_model_decorators)_CADWYN_REQUEST_PARAM_NAME_CADWYN_RESPONSE_PARAM_NAMEVersionBundle)HeadVersionVersionrD      
   )_BaseGenericAlias_Call.)bound
_FieldName_T_ANY_MODEL_T_ENUM_T_PYDANTIC_MODEL)BaseSettings__validators__c                 C   s*   g | ]\}}|j tjjtjjhv r|qS  )kindinspect_ParameterKindKEYWORD_ONLYPOSITIONAL_OR_KEYWORD).0nameparamrS   rS   Q/var/www/Datamplify/venv/lib/python3.10/site-packages/cadwyn/schema_generation.py
<listcomp>u   s
    r]   json_schema_extrac                 C   s   i | ]}|t t|qS rS   )getattr_empty_field_info)rY   krS   rS   r\   
<dictcomp>       rb   c                   @   s   e Zd ZU dZeje ed< eed< e	ed< ej
ddZee	ef ed< defdd	Zd
e	defddZd
e	ddfddZdddejjfddZdS )PydanticFieldWrapperz(We DO NOT maintain field.metadata at allinit_model_field
annotationname_from_newer_versionFinitpassed_field_attributesc                 C   s   t || _d S N) _extract_passed_field_attributesrj   )selfre   rS   rS   r\   __post_init__      z"PydanticFieldWrapper.__post_init__rZ   valuec                C   s   || j |< d S rk   )rj   )rm   rZ   rp   rS   rS   r\   update_attribute   ro   z%PydanticFieldWrapper.update_attributereturnNc                C   s   | j | d S rk   )rj   pop)rm   rZ   rS   rS   r\   delete_attribute      z%PydanticFieldWrapper.delete_attribute	generatorSchemaGeneratorc                 C   s   t jdi |j| jS )NrS   )pydanticr   annotation_transformerchange_version_of_annotationrj   rm   rv   rS   rS   r\   generate_field_copy   s   z(PydanticFieldWrapper.generate_field_copy)__name__
__module____qualname____doc__dataclassesInitVarr   __annotations__r   strfieldrj   dictrn   rq   rt   rx   fieldsr|   rS   rS   rS   r\   rd      s   
 rd   
field_infoc                    s0    fddt D }|ddd u r|d |S )Nc                    s"   i | ]}| j v r| j | qS rS   )_attributes_set)rY   	attr_namer   rS   r\   rb      s
    

z4_extract_passed_field_attributes.<locals>.<dictcomp>frozen.)_all_field_arg_namesgetrs   )r   
attributesrS   r   r\   rl      s   

rl   c                   @   s6   e Zd ZU eee df ed< eee df ed< dS )_ModelBundle_EnumWrapperenums_PydanticModelWrapperschemasN)r}   r~   r   r   typer   r   r   rS   rS   rS   r\   r      s   
 r   c                   @   sB   e Zd ZU ded< ded< eed< ejddZded	< d
d ZdS )_RuntimeSchemaGenContextrD   version_bundlezUnion[Version, HeadVersion]current_versionmodelsFrh   rF   latest_versionc                 C   s   t | jjdd d| _d S )Nc                 S   s   | j S rk   )rp   )vrS   rS   r\   <lambda>   s    z8_RuntimeSchemaGenContext.__post_init__.<locals>.<lambda>)key)maxr   versionsr   rm   rS   rS   r\   rn      s   z&_RuntimeSchemaGenContext.__post_init__N)	r}   r~   r   r   r   r   r   r   rn   rS   rS   rS   r\   r      s   
 r   r   rD   latest_response_modellatest_bodyversionrr   c                C   sz   t |tr| }| |}|| jvrtd| dttdd|d}| j|||dd}t	| t
| | }||jS )zConvert the data to a specific version

    Apply all version changes from latest until the passed version in reverse order
    and wrap the result in the correct version of latest_response_model
    zVersion z not found in version bundle   )status_code)bodyN)r   head_response_model
head_route)
isinstancer   	isoformat_get_closest_lesser_version_version_values_setr2   r5   r   _migrate_responsegenerate_versioned_modelsr   model_validater   )r   r   r   r   responsemigrated_responseversioned_response_modelrS   rS   r\   migrate_response_body   s    


r   modelc                 C      t | dr| j} t | ds| S )N__cadwyn_original_model__)hasattrr   r   rS   rS   r\   _unwrap_model   s   

r   c                   @   s:   e Zd ZU eeef ed< eed< eed< dZe	ed< dS )_ValidatorWrapperkwargsfunc	decoratorF
is_deletedN)
r}   r~   r   r   r   r   r   r   r   boolrS   rS   rS   r\   r      s
   
 r   c                   @   s&   e Zd ZU ejedZee ed< dS )_PerFieldValidatorWrapper)default_factoryr   N)	r}   r~   r   r   r   listr   r   r   rS   rS   rS   r\   r      s   
 r   r   is_pydantic_v1_style_validatordecorator_infoc                 C   s   t | |} t| r| j} t|}|dd }tt| }|r:|dd}|dk|d< t	|t
r:|jdkr:d|d< |d urHt| t|||dS t| ||dS )	Nr   modeafterpreTskip_on_failure)r   r   r   r   )r   r   r   )r/   rU   ismethod__func__r   asdictrs   (PYDANTIC_DECORATOR_TYPE_TO_DECORATOR_MAPr   r   r   r   r   r   r   )r   r   r   r   decorator_fieldsactual_decoratorr   rS   rS   r\   _wrap_validator   s$   



r   r   c                 C   s   |  do	| dS )N__)
startswithendswithr   rS   rS   r\   
_is_dunder  s   r   z(_PydanticModelWrapper[_T_PYDANTIC_MODEL]c              	      sH  t ur
jdd ttt t}i }|D ]}|jjvr"qt|j	|j
|j}|||j< qdtffdd  fddj D tjdkrOjn!zt\}W n tyc   jY nw fd	d D fd
djD }||B fddj D }|jjjdO }tjj|||dS )NF)raise_errorsrZ   c                    s\    j |  }r)|js|jS tjdkrt|jg|jR S t|jg|jR S  j	|  S )N)rH      )
model_fieldsr   metadatarf   sysversion_infor   __getitem____class_getitem__r   )rZ   r   r   rS   r\   _rebuild_annotated  s   

z0_wrap_pydantic_model.<locals>._rebuild_annotatedc                    s(   i | ]\}}|t |ts|n |qS rS   )r   r   rY   rZ   rp   )r   rS   r\   rb   "  s    z(_wrap_pydantic_model.<locals>.<dictcomp>rG   c                    s(   i | ]\}}|j vs| v r||qS rS   )r   r   )defined_fieldsr   rS   r\   rb   0  s
    c                    s,   i | ]}|v r|t j|  | |qS rS   )rd   r   )rY   
field_name)annotationsr   r   rS   r\   rb   6  s    c                    s.   i | ]\}}| vrt |s|d v s||qS )>   	_abc_implr   model_computed_fields)r   )rY   r   attr_val)main_attributesrS   r\   rb   A  s    )model_configr~   r   )rZ   docr   other_attributes
validatorsr   )r   model_rebuildr   r   rP   rA   cls_var_name__dict__r   r   shiminfor   r   itemsr   r   )_get_field_and_validator_names_from_modelOSErrorr   r   r~   r   r   r}   r   )r   
decoratorsr   decorator_wrapperwrapped_validator_r   r   rS   )r   r   r   r   r   r\   _wrap_pydantic_model  sZ   




r   clsc                    sd   | j  t| }ttjtt|j	d }dd |j	D }dd |D } fdd|j	D |fS )Nr   c                 s   s*    | ]}t |tjr|jrt|V  qd S rk   )r   astFunctionDefdecorator_list_get_validator_info_or_nonerY   noderS   rS   r\   	<genexpr>]  s    

z<_get_field_and_validator_names_from_model.<locals>.<genexpr>c                 S   s   h | ]}|d ur|qS rk   rS   )rY   rZ   rS   rS   r\   	<setcomp>b  rc   z<_get_field_and_validator_names_from_model.<locals>.<setcomp>c                    s:   h | ]}t |tjrt |jtjr|jj v r|jjqS rS   )r   r   	AnnAssigntargetNameidr   r   rS   r\   r   e  s    
)
r   rU   	getsourcer   r   ClassDefparsetextwrapdedentr   )r   sourcecls_astvalidator_namesrS   r  r\   r   X  s   

r   methodc                 C   sZ   | j D ]'}t|tjrt|jds%t|tjtjfr*t|dr*| j	  S qd S )N	validator)
r   r   r   Callunparser   r   r  	AttributerZ   )r  r   rS   rS   r\   r   n  s   

r   c                   @   sr  e Zd ZU ejddZee ed< e	ed< ejddZ
ee	df ed< ejddZeedef edf ed	< ejddZee	eeef f ed
< ejddZee	ef ed< ejddZee	ef ed< ejddddZeee df ed< dd Zdeeef fddZdefddZd#ddZdddee	ef fddZdddee	ef fddZ dd dee fd!d"Z!dS )$r   F)reprr   rZ   Nr   rM   zkFields that belong to this model, not to its parents. I.e. The ones that were either defined or overridden r   r   r   r   )ri   defaultr  _parentsc                 C   s~   t | jdr| jj| _t | jds| j D ]&\}}t|tkr<t|}tt	
|d tdd |dd  D | j|< qd S )Nr   r   c                 s   s    | ]}t |V  qd S rk   )copydeepcopyrY   sub_annrS   rS   r\   r         z6_PydanticModelWrapper.__post_init__.<locals>.<genexpr>   )r   r   r   r   r   r)   r   r(   r%   r  r  tuple)rm   ra   rf   sub_annotationsrS   rS   r\   rn     s   
$
z#_PydanticModelWrapper.__post_init__memoc              
   C   sL   t | j| j| jt| jt| jt| jt| j	d}||t
| < |S )N)rZ   r   r   r   r   r   )r   r   rZ   r   r  r  r   r   r   r   r  rm   r  resultrS   rS   r\   __deepcopy__  s   



	z"_PydanticModelWrapper.__deepcopy__rr   c                 C   s   t t| S rk   )hashr  r   rS   rS   r\   __hash__  s   z_PydanticModelWrapper.__hash__r   dict[type, Self]c                 C   sf   | j d ur| j S g }| j dd  D ]}||v r!|||  qt|tr-|t| q|| _ |S )Nr  )r  r   mroappendr1   r   r   )rm   r   parentsbaserS   rS   r\   _get_parents  s   

z"_PydanticModelWrapper._get_parentsc                 C   ,   i }t | |D ]}||jO }q	|| jB S rk   )reversedr(  r   )rm   r   r   parentrS   rS   r\   _get_defined_fields_through_mro     
z5_PydanticModelWrapper._get_defined_fields_through_mroc                 C   r)  rk   )r*  r(  r   )rm   r   r   r+  rS   rS   r\   $_get_defined_annotations_through_mro  r-  z:_PydanticModelWrapper._get_defined_annotations_through_mrorv   rw   c              	      s   dd | j  D }dd | j  D } fdd| j D }t| j| jt fdd| jjD | j|B |B |B  j	
| j| j| jj| jj| j dB }| j|_|S )Nc                 S   s>   i | ]\}}|j st|tkr||j|ji |j|jqS rS   )r   r   r   r   r   r   r   rY   rZ   r  rS   rS   r\   rb     s    z=_PydanticModelWrapper.generate_model_copy.<locals>.<dictcomp>c                 S   s<   i | ]\}}|j st|tkr||jd i |j|jqS )rS   )r   r   r   r   r   r   r/  rS   rS   r\   rb     s    c                       i | ]
\}}||  qS rS   )r|   )rY   rZ   r   rv   rS   r\   rb     s    c                 3   s"    | ]} t tt | V  qd S rk   )r   r   r   )rY   r'  r1  rS   r\   r     s     z<_PydanticModelWrapper.generate_model_copy.<locals>.<genexpr>)r   r   r   )r   r   r   r   r   rZ   r  	__bases__r   ry   rz   r   r   r   removesuffixr}   r   )rm   rv   per_field_validatorsroot_validatorsr   
model_copyrS   r1  r\   generate_model_copy  s2   z)_PydanticModelWrapper.generate_model_copy)r   r#  )"r}   r~   r   r   r   r   r   rP   r   r   r   r
   r   r   r   rd   r   r   r   r   r   r   r   r  r   r!   rn   intr   r"  r(  r,  r.  r7  rS   rS   rS   r\   r   }  s.   
 

$$
r   callc                 C   s   t | tjtjfS rk   )r   typesFunctionType
MethodTyper9  rS   rS   r\   is_regular_function  s   r>  c                       s^   e Zd Zdeddf fddZedd Zded	efd
dZdd Z	de
defddZ  ZS )_CallableWrapperoriginal_callablerr   Nc                    s.   t    || _t|s|j}t| | d S rk   )super__init___original_callabler>  __call__	functoolsupdate_wrapper)rm   r@  	__class__rS   r\   rB    s
   
z_CallableWrapper.__init__c                 C   s   | j jS rk   )rC  __globals__r   rS   rS   r\   rI    s   z_CallableWrapper.__globals__argsr   c                 O   s   | j |i |S rk   rC  rm   rJ  r   rS   rS   r\   rD    ru   z_CallableWrapper.__call__c                 C   s
   t | jS rk   )r!  rC  r   rS   rS   r\   r"       
z_CallableWrapper.__hash__rp   c                 C   s
   | j |kS rk   rK  )rm   rp   rS   rS   r\   __eq__  rM  z_CallableWrapper.__eq__)r}   r~   r   r   rB  propertyrI  r   rD  r"  objectr   rN  __classcell__rS   rS   rG  r\   r?    s    
r?  c                   @      e Zd ZdedefddZdS )_AsyncCallableWrapperrJ  r   c                    s   | j |i |I d H S rk   rK  rL  rS   rS   r\   rD  	  s   z_AsyncCallableWrapper.__call__Nr}   r~   r   r   rD  rS   rS   rS   r\   rS        rS  c                   @   rR  )_GeneratorCallableWrapperrJ  r   c                 o   s    | j |i |E d H  d S rk   rK  rL  rS   rS   r\   rD    s   z"_GeneratorCallableWrapper.__call__NrT  rS   rS   rS   r\   rV    rU  rV  c                   @   rR  )_AsyncGeneratorCallableWrapperrJ  r   c                 O  s,   | j |i |2 z	3 d H W }|V  q	6 d S rk   rK  )rm   rJ  r   rp   rS   rS   r\   rD    s   z'_AsyncGeneratorCallableWrapper.__call__NrT  rS   rS   rS   r\   rW    rU  rW  c                   @   sD  e Zd Zd+ddZdedefdd	Zd
ejjfddZ	dddejj
defddZdedefddZdefddZedejj
fddZedd dd fdedeeeef geeef f deeedf geedf f d eegef def
d!d"Zed#ed$ejeejf fd%d&Zedefd'd(Zededefd)d*ZdS ),_AnnotationTransformerrv   rw   rr   Nc                 C   s   || _ t| j| _d S rk   )rv   rE  r   -_change_version_of_a_non_container_annotation-change_versions_of_a_non_container_annotationr{   rS   rS   r\   rB    s   
z_AnnotationTransformer.__init__rf   c                    sR   t |tr fdd| D S t |ttfr$t| fdd|D S  |S )aE  Recursively go through all annotations and change them to annotations corresponding to the version passed.

        So if we had a annotation "UserResponse" from "head" version, and we passed version of "2022-11-16", it would
        replace "UserResponse" with the the same class but from the "2022-11-16" version.

        c                    s"   i | ]\}}  |  |qS rS   rz   )rY   r   rp   r   rS   r\   rb   ,  s    zG_AnnotationTransformer.change_version_of_annotation.<locals>.<dictcomp>c                 3       | ]}  |V  qd S rk   r[  )rY   r   r   rS   r\   r   2  r  zF_AnnotationTransformer.change_version_of_annotation.<locals>.<genexpr>)r   r   r   r   r  r   rZ  rm   rf   rS   r   r\   rz   $  s   


z3_AnnotationTransformer.change_version_of_annotationrouterc                 C   s*   |j D ]}t|tjjsq| | qd S rk   )routesr   fastapiroutingr   migrate_route_to_version)rm   r^  routerS   rS   r\   migrate_router_to_version6  s
   
z0_AnnotationTransformer.migrate_router_to_versionFignore_response_modelrc  rf  c                C   s   |j d ur$|s$| |j |_ tjjd|j |j dd|_tj|j|_| |j	|_	| |j
|_
|jp6g D ]}t|tjjsAq7| j||d q7| | d S )N	Response_serialization)rZ   type_r   re  )response_modelrz   r`  utilscreate_model_field	unique_idresponse_fieldcreate_cloned_fieldsecure_cloned_response_fielddependenciesendpoint	callbacksr   ra  r   rb  _remake_endpoint_dependencies)rm   rc  rf  callbackrS   rS   r\   rb  <  s   z/_AnnotationTransformer.migrate_route_to_versionc                    s  t |ttjfrt|t fddt|D  S t |tr@|jd ur)|j	ds.|j
tv r0|S t|j
 |j |jdS t |tjjrVtjj |j|j|jdS t |tjjrjtjj |j|jdS t |trtjj}|t fddt|D S |tju s|tju st |tr|S t |tr |S t|rt|j	dst |tj j!j"r|S d	tf fd
d} j#||| j$dS |S )Nc                 3   r\  rk   r[  )rY   argr   rS   r\   r   O  r  zW_AnnotationTransformer._change_version_of_a_non_container_annotation.<locals>.<genexpr>	pydantic.)rZ   rp   type_params)scopes	use_cache)rz  c                 3   r\  rk   r[  )rY   ar   rS   r\   r   i  r  )zfastapi.rw  zpydantic_core.z
starlette.rf   c                    s
     | S rk   r[  )rf   r   rS   r\   modifieru  rM  zV_AnnotationTransformer._change_version_of_a_non_container_annotation.<locals>.modifier)$annotation_modifying_wrapper_factory)%r   rJ   r:  GenericAliasr)   r  r(   r#   r~   r   r}   _PYDANTIC_ALL_EXPORTED_NAMESrz   	__value____type_params__r`  paramsSecurity
dependencyry  rz  Dependsr.   typingr
   r   r   typing_extensionsr    r   _change_version_of_typecallablesecurityr'  SecurityBase_modify_callable_annotations*_copy_function_through_class_based_wrapper)rm   rf   getitemr|  rS   r   r\   rY  M  s\   "









zD_AnnotationTransformer._change_version_of_a_non_container_annotationc                 C   s   t |ttfr| j| S |S rk   )r1   r   r   rv   r]  rS   rS   r\   r    s   
z._AnnotationTransformer._change_version_of_typec                 C   s4   t jj|j|j|jd}|j|_|j|_t| d S )N)rq  )	r`  ra  r   pathrr  rq  	dependant
body_field _add_request_and_response_params)r   rc  
route_copyrS   rS   r\   rt    s   z4_AnnotationTransformer._remake_endpoint_dependenciesc                 C      | S rk   rS   r{  rS   rS   r\   r         z_AnnotationTransformer.<lambda>c                 C   r  rk   rS   r  rS   rS   r\   r     r  r9  modify_annotationsmodify_defaults.r}  c                   sh   | }t  j}|j} fdd| D }|||_|tdd | D |_| |||_	|S )Nc                    s.   i | ]\}}|t |tur|nt| jqS rS   )r   r   _try_eval_typerI  rY   ra   r   r=  rS   r\   rb     s    "zG_AnnotationTransformer._modify_callable_annotations.<locals>.<dictcomp>c                 s   s$    | ]}|j tjjur|j V  qd S rk   )r  rU   	Signatureempty)rY   prS   rS   r\   r     s   " zF_AnnotationTransformer._modify_callable_annotations.<locals>.<genexpr>)
rU   	signature
parametersr   r   r  values__defaults___generate_signature__signature__)r   r9  r  r  r}  annotation_modifying_wrapper
old_paramscallable_annotationsrS   r=  r\   r    s   	

z3_AnnotationTransformer._modify_callable_annotationsnew_callabler  c                 C   s   g }d}|  D ]6}|jtjjur$| jd usJ d| j| }|d7 }ntjj}|tj|j|j	|| j
|jtjjd qtj|| j
dtjjdS )Nr   zoDefaults cannot be None here. If it is, you have found a bug in Cadwyn. Please, report it in our issue tracker.r  )r  rf   rr   )r  return_annotation)r  r  rU   r  r  r  r%  	ParameterrZ   rT   r   r   )r  r  r  default_counterr[   r  rS   rS   r\   r    s8   

z*_AnnotationTransformer._generate_signaturec                 C   sV   |  |}t|s|j}n|}t|rt|S t|rt|S t|r't|S t	|S )zhSeparate from copy_endpoint because endpoints MUST be functions in FastAPI, they cannot be cls instances)
_unwrap_callabler>  rD  r   rW  r   rS  r   rV  r?  )r   r9  actual_callrS   rS   r\   r    s   
zA_AnnotationTransformer._copy_function_through_class_based_wrapperc                 C   r   )NrC  )r   rC  r=  rS   rS   r\   r    s   

z'_AnnotationTransformer._unwrap_callable)rv   rw   rr   N) r}   r~   r   rB  r   rz   r`  ra  	APIRouterrd  r   r   rb  rY  r   r  classmethodrt  rK   r   r   r   r  r  staticmethodr:  MappingProxyTyperU   r  r  r  r  rS   rS   rS   r\   rX    sB    

4#rX  rc  c                 C   s(   | j jst| j _| j jst| j _d S d S rk   )r  request_param_namerB   response_param_namerC   )rc  rS   rS   r\   r    s
   r  c                   @   s   e Zd ZdZdeddfddZdee dee fdd	Ze	dee
 dd
fddZe	dee ddfddZdeee
ef  ddfddZdS )rw   )ry   concrete_modelsmodel_bundler  rr   Nc                    s>   t   _| _i  _ fdd jj jjB  D  _d S )Nc                    r0  rS   )r7  )rY   ra   wrapperr   rS   r\   rb     s    
z,SchemaGenerator.__init__.<locals>.<dictcomp>)rX  ry   r  r  r   r   r   )rm   r  rS   r   r\   rB    s   

zSchemaGenerator.__init__r   c                C   sl   t |trt|ttfr|tv r|S t|}|| jv r | j| S | |}|	| }|| j|< t
tt |S rk   )r   r   r1   r   r   _DEFAULT_PYDANTIC_CLASSESr   r  _get_wrapper_for_modelr7  r   rN   )rm   r   r  r6  rS   rS   r\   r     s   




zSchemaGenerator.__getitem__z _PydanticModelWrapper[BaseModel]c                 C      d S rk   rS   rm   r   rS   rS   r\   r       z&SchemaGenerator._get_wrapper_for_modelz_EnumWrapper[Enum]c                 C   r  rk   rS   r  rS   rS   r\   r    r  z;Union[_PydanticModelWrapper[BaseModel], _EnumWrapper[Enum]]c                 C   s   t |}|| jjv r| jj| S || jjv r| jj| S t|tr-t|}|| jj|< |S t|tr>t|}|| jj|< |S t	| |S rk   )
r   r  r   r   r1   r   r   r   r   r&   )rm   r   r  rS   rS   r\   r    s   

)r}   r~   r   	__slots__r   rB  r   rN   r   r*   r   r  r   r
   rS   rS   rS   r\   rw     s    	rw   dict[str, SchemaGenerator]c                 C   sb   t | }i }t| j|| d}t| | jD ]}t||| d}tt||t|j	< t| q|S )N)r   r   r   )
_create_model_bundler   head_version_migrate_classesr   rw   r  r  r   rp   )r   r   version_to_context_mapcontextr   rS   rS   r\   r   )  s   

r   c                 C   s,   t dd | j D dd | j D dS )Nc                 S      i | ]}|t |qS rS   )r   )rY   enumrS   rS   r\   rb   <      z(_create_model_bundle.<locals>.<dictcomp>c                 S   r  rS   )r   )rY   schemarS   rS   r\   rb   =  r  )r   r   )r   versioned_enumsr  versioned_schemas)r   rS   rS   r\   r  :  s   r  r  c                 C   s:   | j jD ]}t| jj|j|j t| jj|j	|j qd S rk   )
r   changes _apply_alter_schema_instructionsr   r   alter_schema_instructionsr}   _apply_alter_enum_instructionsr   alter_enum_instructions)r  version_changerS   rS   r\   r  A  s   r  modified_schemasr  version_change_namec              	   C   s@  |D ]}| |j  }t|trt|| || qt|ttfr%t|| || qt|tr2t||j	| qt|t
rSt|j}ttjjj|j}t|j|j|jd|j|< qt|tr|j	|jvrntd|j	 d|j	 d| d|j|j	 jrtd|j	 d|j	 d| dd|j|j	 _qt|trt||| qt| qd S )N)r   r   z!You tried to delete a validator "" from "" in "z'" but it doesn't have such a validator.z" but it is already deleted.T)r  r   r<   _add_field_to_modelr=   r;   _change_field_in_modelr:   _delete_field_from_modelrZ   r@   r0   r  r   rx   	_internalr   PydanticDescriptorProxyr   wrappedr   r   r   r?   r3   r   r>   _change_modelr&   )r  r  r  alter_schema_instructionschema_infovalidator_nameraw_validatorrS   rS   r\   r  O  sR   







r  r   zdict[type, _EnumWrapper]r  c              
   C   s   |D ]c}| |j  }t|tr0|jD ]}||jvr(td| d|jj d| d|j| qqt|tra|j	 D ]%\}}||jv rZ|j| |krZtd| d|jj d| d||j|< q:qt
| qd S )NzYou tried to delete a member "r  r  z$" but it doesn't have such a member.zYou tried to add a member "" to "z9" but there is already a member with that name and value.)r  r   r7   membersr3   r   r}   rs   r8   r   r&   )r   r  r  alter_enum_instructionr  membermember_valuerS   rS   r\   r  }  s0   





r  r  c                 C   s0   |j | j krtd| j  d| d|j | _ d S )Nz!You tried to change the name of "r  z2" but it already has the name you tried to assign.)rZ   r3   )r   r  r  rS   rS   r\   r    s
   r  r   z!dict[type, _PydanticModelWrapper]c                 C   sh   |  |}|j|v rtd|j d| j d| dt|j|jj|j}|| j|j< |jj| j|j< d S )NzYou tried to add a field "r  r  z." but there is already a field with that name.)r,  rZ   r3   rd   r   rf   r   r   )r   r   r  r  r   r   rS   rS   r\   r    s   

r  c                 C   s   |  |}| |}|j|vrtd|j d| j d| d||j }|| j|j< ||j | j|j< t|trGt| ||||| j|j  d S t	| |||| j|j  d S )NzYou tried to change the field "r  r  #" but it doesn't have such a field.)
r.  r,  rZ   r3   r   r   r   r=   _change_field_delete_field_attributes)r   r   r  r  defined_annotationsr   r   rS   rS   r\   r    s:   






	
r  r  r   rf   c                 C   s8  |j tur.|j|j kr#td|j d|j  d| j d| d|j d|j |_|j | j|j< |jturc|j|jkrItd|j d| j d| d| j|j| j|j< | j|j||j | j|j< |j	j
D ]2}t|j	|}|tur|j|t|krtd	| d
|j d| j d|d| d|j||d qgd S )Nz'You tried to change the type of field "r  r  r  z" but it already has type ""z'You tried to change the name of field "z" but it already has that name.z#You tried to change the attribute "" of field "z" to z in "z " but it already has that value.rZ   rp   )r   r-   rf   r3   rZ   r   new_namer   rs   field_changes__dataclass_fields__r_   rj   r   rq   )r   r  r  r  r   rf   r   
attr_valuerS   rS   r\   r    s^   



r  c                    s   |j D ]G  |jv r|j d qt|tkr8t fddt|D r8t|D ]}t| r6t	| d  q(qt
d  d|j d| j d| d	d S )	N)rZ   c                 3   s    | ]}t | V  qd S rk   )r   r  r   rS   r\   r     s    

z+_delete_field_attributes.<locals>.<genexpr>z#You tried to delete the attribute "r  r  r  z-" but it already doesn't have that attribute.)r   rj   rt   r)   r   anyr(   r   rP  __setattr__r3   rZ   )r   r  r  r   rf   r  rS   r   r\   r    s&   


r  r   c                 C   s   || j vrtd| d| j d| d| j | | j| | j  D ]\}}t|t	rD||j v rD|j 
| |j sDd| j| _q'd S )NzYou tried to delete a field "r  r  r  T)r   r3   rZ   rs   r   r   r  r   r   r   remover   )r   r   r  r  r  rS   rS   r\   r  $  s   
r  c                   @   s   e Zd ZdS )
_DummyEnumN)r}   r~   r   rS   rS   rS   r\   r  4  s    r  c                   @   s\   e Zd ZdZdee fddZdefddZdd	d
ee fddZ	e
dee fddZdS )r   )r   r  rZ   r   c                 C   s&   t || _|j| _dd |D | _d S )Nc                 S   s   i | ]}|j |jqS rS   r  )rY   r  rS   rS   r\   rb   ?  r  z)_EnumWrapper.__init__.<locals>.<dictcomp>)r   r   r}   rZ   r  )rm   r   rS   rS   r\   rB  <  s   
z_EnumWrapper.__init__r  c                 C   s&   t | j}| j |_||t| < |S rk   )r   r   r  r  r  r  rS   rS   r\   r   A  s   
z_EnumWrapper.__deepcopy__rv   rw   rr   c                 C   s   t | j| jj}dd | j D }| | j|B }| D ]\}}|||< q| jj|d< t	t
t t
| j| jj|}| j|_|S )Nc                 S   s&   i | ]\}}|t |tr|jn|qS rS   )r   r   rp   r  rS   rS   r\   rb   J  s   & z4_EnumWrapper.generate_model_copy.<locals>.<dictcomp>r   )r   __prepare__rZ   r   r2  r  r   &_get_initialization_namespace_for_enumr   r   r   rO   r   )rm   rv   	enum_dictraw_member_mapinitialization_namespacer   attrr6  rS   rS   r\   r7  G  s   
z _EnumWrapper.generate_model_copyenum_clsc                    sH      dd  }i t|D ]}|j q fdd j D S )Nr  c                    s>   i | ]\}}| j vr|tjvr|vs| |ur||qS rS   )_member_names_r  r   r  r  mro_dictrS   r\   rb   [  s    

zG_EnumWrapper._get_initialization_namespace_for_enum.<locals>.<dictcomp>)r$  r*  updater   r   )r  mro_without_the_class_itselfr   rS   r  r\   r  S  s   z3_EnumWrapper._get_initialization_namespace_for_enumN)r}   r~   r   r  r   rO   rB  r   r   r7  r  r   r  rS   rS   rS   r\   r   8  s    r   rp   globalsc                 C   s   t | |\}}|r|S | S rk   )pydantic_try_eval_type)rp   r  	new_valuesuccessrS   rS   r\   r  d  s   r  rS   )r   rD   rr   r  )r   rD   )r   r  r   rE  rU   r   r  r:  r  collections.abcr   r   datetimer   r  r   r   r   r   r	   r
   r   fastapi.paramsr`  fastapi.security.basefastapi.utilsrx   pydantic._internal._decoratorsr  r   fastapi.dependencies.utilsr   r   r   fastapi.routingr   r   r   r   pydantic._internalr   r   r   r   r   r   r    pydantic._internal._typing_extrar   r  pydantic.fieldsr   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   cadwyn._utilsr+   r,   r-   r.   r/   r0   r1   cadwyn.exceptionsr2   r3   cadwyn.structure.commonr4   cadwyn.structure.datar5   cadwyn.structure.enumsr6   r7   r8   cadwyn.structure.schemasr9   r:   r;   r<   r=   r>   r?   r@   rA   cadwyn.structure.versionsrB   rC   rD   rE   rF   r   rJ   rK   r   rM   r   rN   rO   rP   r  field_validatorfield_serializerroot_validatormodel_validatormodel_serializercomputed_fieldr   set__all__r  r  pydantic_settingsrQ   ImportErrorVALIDATOR_CONFIG_KEYsortedr  r  r   r   EXTRA_FIELD_NAMEr`   r  dict_of_empty_field_info	dataclassrd   rl   r   r   r   r   r   r   r   DecoratorInfor   r   r   r  r   r   r   r   r>  r?  rS  rV  rW  rX  r  rw   r   r  r  r   r  r  r  r  r  r  r  r  r  r   r  rS   rS   rS   r\   <module>   s|  
  <$	,
	


Q$g P9


.




&


,
"+