o
    SDiL                     @   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m	Z	m
Z
mZmZ d dlmZmZmZmZ d dl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 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) d dl*m+Z+m,Z,m-Z-m.Z. ddl/m0Z0m1Z1m2Z2 ddl3m4Z4m5Z5 ddl6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z= ej>dkrd dlm?Z? nd dl@m?Z? eeAZBe	de
e+eCe- f dZDdeDdeDfddZEde,de%ddfdd ZFd!eCe d"eGd#e'deGfd$d%ZHd&e
e9e7e:e8f d'e'd(eIe fd)d*ZJd+edeIeCe  fd,d-ZKd.eCe d/eGdeLfd0d1ZMG d2d3 d3e?ZNG d4d5 d5e?ZOG d6d7 d7eZPG d8d9 d9eZQG d:d; d;eZRG d<d= d=eZSG d>d? d?eZTG d@dA dAeZUG dBdC dCeZVG dDdE dEeZWG dFdG dGeZXG dHdI dIeZYG dJdK dKe?ZZG dLdM dMeZ[G dNdO dOeZ\G dPdQ dQeZ]G dRd deZ^G dSdT dTeZ_G dUdV dVeZ`ee
eXeYe\e]eVeUeRe[eTf	  Zad&e+dWeCe- d'e'd#e'dXeIe dYeIe fdZd[ZbdS )\    N)auto)	getLogger)AnyLiteralTypeVarUnioncastget_args)GenerateJsonSchema
ModelFieldget_compat_model_name_mapget_definitions)REF_TEMPLATE)get_fields_from_routesget_openapi)APIRoute)	BaseModelField	RootModel)GenericAliasUnionArgs)ZIP_STRICT_FALSESentinel)_get_routes)_RootCadwynAPIRouter)SchemaGenerator_change_field_in_modelgenerate_versioned_models)PossibleInstructionsVersionBundleVersionChangeVersionChangeWithSideEffects   )EndpointDidntExistInstructionEndpointExistedInstructionEndpointHadInstruction)EnumDidntHaveMembersInstructionEnumHadMembersInstruction)FieldDidntExistInstructionFieldDidntHaveInstructionFieldExistedAsInstructionFieldHadInstructionSchemaHadInstructionValidatorDidntExistInstructionValidatorExistedInstruction)      )StrEnumT)boundinstruction_or_version_changereturnc                 C   s   t | tttfr
| S d| _| S )NT)
isinstancestaticmethodr,   r-   is_hidden_from_changelog)r3    r8   J/var/www/Datamplify/venv/lib/python3.10/site-packages/cadwyn/changelogs.pyhidden6   s   
r:   versionsrouterCadwynChangelogResourcec                 C   s  t  }t| }t| | jdd  fi tD ]w\}}|j|j j}t|j|j j}t	|jd}||j }	||j }
|j
D ]I}|jrBq<t|jt|td}g |j|j|jD ]'}t|ttfsc|jrdqWt|||	|
|ttt |}|d ur~|jt| qW|j
| q<|j| q|S )Nr!   )value)descriptionside_effects)r=   r   zipr;   r   versioned_routersr>   routesr   CadwynVersionchangesr7   CadwynVersionChanger?   r5   r    alter_endpoint_instructionsalter_enum_instructionsalter_schema_instructionsr,   r-   6_convert_version_change_instruction_to_changelog_entryr   listr   instructionsappendCadwynVersionChangeInstruction)r;   r<   	changelogschema_generatorsversionolder_versionroutes_from_newer_versionschemas_from_older_versionversion_changeloggenerator_from_newer_versiongenerator_from_older_versionversion_changeversion_change_changeloginstructionchangelog_entryr8   r8   r9   _generate_changelog@   sR   $


r\   schemanew_field_namerW   c                 C   s&   | | }dd |j D }|| S )Nc                 S   s   i | ]\}}|j |qS r8   )name_from_newer_version).0old_namefieldr8   r8   r9   
<dictcomp>m   s    z)_get_older_field_name.<locals>.<dictcomp>)_get_wrapper_for_modelfieldsitems)r]   r^   rW   older_model_wrappernewer_names_mappingr8   r8   r9   _get_older_field_namei   s
   
ri   rZ   rV   schemas_from_last_versionc                    s`    j dd |D }g }|D ]	}|t| qfdd|D } fdd|D S )Nc                 S   s   g | ]}|j jqS r8   )
field_info
annotationr`   modelr8   r8   r9   
<listcomp>~   s    z-_get_affected_model_names.<locals>.<listcomp>c                    s   h | ]}  |qS r8   )rd   )r`   rl   )rV   r8   r9   	<setcomp>   s    z,_get_affected_model_names.<locals>.<setcomp>c              	      s`   g | ],} |ks+j |jvr. |jj v rtfd dd  D r|j qS )c                 3   s    | ]	} j |jvV  qd S N)namere   )r`   parentrZ   r8   r9   	<genexpr>   s    z7_get_affected_model_names.<locals>.<listcomp>.<genexpr>N)rr   re   _get_parentsmodel_bundleschemasallindexrm   changed_modelrV   rZ   parentsr8   r9   ro      s    ")rd   r]   extend%_get_all_pydantic_models_from_generic)rZ   rV   rj   annotationsbasemodel_annotationsrl   modelsr8   r{   r9   _get_affected_model_namess   s   
r   rl   c                 C   sP   t | tst | trt| tr| gS g S t| }g }|D ]	}|t| q|S rq   )r5   r   type
issubclassr   r	   r~   r   )rl   sub_annotationsr   sub_annotationr8   r8   r9   r      s   
r   rn   
field_namec                    sb   G  fdddt }t|jd g}ttd}tt|jd dg||dd\}}| j d | S )Nc                       s   e Zd ZU  ed< dS )zQ_get_openapi_representation_of_a_field.<locals>.CadwynDummyModelForRepresentationmy_fieldN)__name__
__module____qualname____annotations__r8   rn   r8   r9   !CadwynDummyModelForRepresentation   s   
 r   r   )ref_templateF)re   schema_generatormodel_name_mapseparate_input_output_schemas
properties)r   r   model_fieldsr
   r   r   r   r   )rn   r   r   r   r   _definitionsr8   r   r9   &_get_openapi_representation_of_a_field   s   

r   c                   @   s0   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
S )ChangelogEntryTypezendpoint.addedzendpoint.removedzendpoint.changedzenum.members.addedzenum.members.removedzschema.changedzschema.field.removedzschema.field.addedzschema.field.attributes.changedN)r   r   r   endpoint_addedendpoint_removedendpoint_changedenum_members_addedenum_members_removedschema_changedschema_field_removedschema_field_addedschema_field_attributes_changedr8   r8   r8   r9   r      s    r   c                   @   s   e Zd Ze Ze Ze ZdS )CadwynAttributeChangeStatusN)r   r   r   r   addedchangedremovedr8   r8   r8   r9   r      s    
r   c                   @      e Zd ZU eed< eed< dS )CadwynEndpointAttributeChangerr   	new_valueNr   r   r   strr   r   r8   r8   r8   r9   r         
 r   c                   @   s.   e Zd ZU eed< eed< eed< eed< dS )CadwynAttributeChangerr   status	old_valuer   N)r   r   r   r   r   r   r   r8   r8   r8   r9   r      s
   
 r   c                   @   sB   e Zd ZU ejZeej ed< ee	 ed< e	ed< ee
 ed< dS ).CadwynFieldAttributesWereChangedChangelogEntryr   r   rb   attribute_changesN)r   r   r   r   r   r   r   r   rK   r   r   r8   r8   r8   r9   r      s   
 r   c                   @   s   e Zd ZU eedf ed< dS )CadwynModelModifiedAttributesNrr   )r   r   r   r   r   r   r8   r8   r8   r9   r      s   
 r   c                   @   s2   e Zd ZU ejZeej ed< eed< e	ed< dS )$CadwynSchemaWasChangedChangelogEntryr   rn   modified_attributesN)
r   r   r   r   r   r   r   r   r   r   r8   r8   r8   r9   r      s   
 r   c                   @   sF   e Zd ZU ejZeej ed< ee	 ed< e	ed< e
e	ef ed< dS )'CadwynSchemaFieldWasAddedChangelogEntryr   r   rb   rk   N)r   r   r   r   r   r   r   r   rK   r   dictr   r8   r8   r8   r9   r      s
   
 r   c                   @   s6   e Zd ZU ejZeej ed< ee	 ed< e	ed< dS ))CadwynSchemaFieldWasRemovedChangelogEntryr   r   rb   N)
r   r   r   r   r   r   r   r   rK   r   r8   r8   r8   r9   r      s   
 r   c                   @   r   )CadwynEnumMemberrr   r>   Nr   r8   r8   r8   r9   r      r   r   c                   @   6   e Zd ZU ejZeej ed< eed< e	e
 ed< dS )(CadwynEnumMembersWereAddedChangelogEntryr   enummembersN)r   r   r   r   r   r   r   r   r   rK   r   r8   r8   r8   r9   r         
 r   c                   @   r   )*CadwynEnumMembersWereChangedChangelogEntryr   r   member_changesN)r   r   r   r   r   r   r   r   r   rK   r   r8   r8   r8   r9   r      r   r   c                   @   s,   e Zd ZdZdZdZdZdZdZdZ	dZ
d	S )

HTTPMethodGETPUTPOSTDELETEOPTIONSHEADPATCHTRACEN)r   r   r   r   r   r   r   r   r   r   r   r8   r8   r8   r9   r      s    r   c                   @   sB   e Zd ZU ejZeej ed< eed< e	e
 ed< e	e ed< dS )CadwynEndpointHadChangelogEntryr   pathmethodsrE   N)r   r   r   r   r   r   r   r   r   rK   r   r   r8   r8   r8   r9   r     s
   
 r   c                   @   r   )$CadwynEndpointWasAddedChangelogEntryr   r   r   N)r   r   r   r   r   r   r   r   r   rK   r   r8   r8   r8   r9   r     r   r   c                   @   r   )&CadwynEndpointWasRemovedChangelogEntryr   r   r   N)r   r   r   r   r   r   r   r   r   rK   r   r8   r8   r8   r9   r     r   r   c                   @   s    e Zd ZU eedZded< dS )r=   default_factoryzlist[CadwynVersion]r;   N)r   r   r   r   rK   r;   r   r8   r8   r8   r9   r=     s   
 c                   @   s(   e Zd ZU eed< eedZded< dS )rD   r>   r   zlist[CadwynVersionChange]rE   N)r   r   r   r   r   r   rK   rE   r8   r8   r8   r9   rD     s   
 rD   c                   @   s0   e Zd ZU eed< eed< eedZded< dS )rF   r?   r@   r   z$list[CadwynVersionChangeInstruction]rL   N)	r   r   r   r   r   boolr   rK   rL   r8   r8   r8   r9   rF   $  s   
 rF   rX   rT   rS   c                    s  t  trt jtt jdS t  tr t jtt jdS t  t	rƈ j
jtur6t jtt jdS ddi}g }dD ]}t j
|}	|	turW|t||||	d q> j
jturo j
jtu ro|td j
jd t fddd	D r{	 td
d  j
j j
j j
j j
jfD rt| j j jdd}
tdd|
d}dd |d  j  D }|td|d t jtt j|dS t  ttfrDt j  j|}t  tr j!tur j!}t"dt#j$| jdg}n j}g }|% j }t&'|}t(||j)j* |j+d |,|}|,|}t-| jt-|||fdd D 7 }|fdd D 7 }t.t/ ||||dS t  t0r_|% j1}t2|jdd |j3 D dS t  t4r| j1 | j1 t5j+fdd j3D dS t  t6r|% j }t7 jt8|jdd S t  t9rt/ ||}t:| jd!S t  t;r| j  }t/ ||}t<| jt-| jd"S t=>d#  d S )$N)r   r   operation_idoperationId)r   r   summaryr?   tags
deprecatedr   )rr   r   r   c                 3   s     | ]}t  j|tuV  qd S rq   )getattr
attributesr   r`   attrrt   r8   r9   ru   a  s
    
zI_convert_version_change_instruction_to_changelog_entry.<locals>.<genexpr>)r   r   r   r?   r   r   c                 s   s    | ]}|t uV  qd S rq   )r   r   r8   r8   r9   ru   f  s
    
F)
is_deleted )titlerQ   rC   c                 S   s   i | ]	\}}||d  qS )	responsesr8   )r`   methodroute_openapir8   r8   r9   rc   w  s    zJ_convert_version_change_instruction_to_changelog_entry.<locals>.<dictcomp>pathsr   )r   r   rE   rr   rr   r   r   r   )alter_schema_instructionversion_change_namec              	      sD   g | ]\}}|  |krt|| v rtjntj|  |d qS )r   )getr   r   r   r   )r`   keyr   )newer_field_openapir8   r9   ro     s    		zJ_convert_version_change_instruction_to_changelog_entry.<locals>.<listcomp>c                    s*   g | ]\}}| vrt |tjd |dqS )Nr   )r   r   r   )r`   r   r   )older_field_openapir8   r9   ro     s    )r   rb   r   c                 S   s   g | ]
\}}t ||d qS ))rr   r>   )r   )r`   rr   r>   r8   r8   r9   ro     s    )r   r   c                    s>   g | ]}t |j| j|| jv rtjntjd qS ))rr   r   r   r   )r   __members__r   r   r   r   )r`   rr   )new_enumold_enumr8   r9   ro     s    	


)r   r   )rr   )rn   r   )r   rb   )r   rb   rk   zEncountered an unknown instruction. This should not have happened. Please, contact the author and show him this message and your version bundle: %s.)?r5   r"   r   endpoint_pathr   r   endpoint_methodsr#   r   r$   r   include_in_schemar   r   rM   r   r   rr   r   anyresponse_modelresponse_classr   status_coder   endpoint_func_namer   rf   r   r*   r(   ri   r]   new_namer   r   r   rd   copydeepcopyr   rw   rx   r   generate_model_copyr   r   r   r%   r   r   r   r&   r   r+   r   r   r)   r   r'   r   _loggerwarning)rZ   rX   rV   rW   rT   rS   renaming_mapr   r   
attr_valuenewer_routesnewer_openapichanged_responsesold_field_name$old_field_name_from_this_instructionnewer_model_wrapper'newer_model_wrapper_with_migrated_fieldolder_modelnewer_modelr   rn   affected_model_namesr8   )rZ   r   r   r   r   r9   rJ   9  s
  





	
	



	


	

rJ   )cr   sysr   r   loggingr   typingr   r   r   r   r   r	   fastapi._compatr
   r   r   r   fastapi.openapi.constantsr   fastapi.openapi.utilsr   r   fastapi.routingr   pydanticr   r   r   cadwyn._astsr   cadwyn._utilsr   r   cadwyn.route_generationr   cadwyn.routingr   cadwyn.schema_generationr   r   r   cadwyn.structure.versionsr   r   r   r    structure.endpointsr"   r#   r$   structure.enumsr%   r&   structure.schemasr'   r(   r)   r*   r+   r,   r-   version_infor0   backports.strenumr   r   r   r1   r:   r\   r   ri   rK   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r=   rD   rF   rN   rJ   r8   r8   r8   r9   <module>   s     $


)


	