� M�g 2� ���UdZddlmZddlmZmZmZmZmZm Z m Z m Z m Z m Z mZddlZddlmZddlmZerddlmZdd lmZmZd Zd ed <d ezZd ed<dddddddd�Zd ed<dZd ed<dOd�Z dPd�Z!dQd�Z"ej#d�ej$d�ej%e ej&e!ej'e"iZ(d ed!<Gd"�d#e��ZdRd(�Z) dSd)d*�dTd0�Z*dUd3�Z+dUd4�Z,dUd5�Z-dVd8�Z.dVd9�Z/d:d;�dWd>�Z0dXdB�Z1dYdE�Z2dZdH�Z3d[dK�Z4d\dL�Z5d]dN�Z6dS)^z Automatically create migrations.�)� annotations) � TYPE_CHECKING�Any�Callable�Dict�Final�Iterable�List�Optional�Type�Union�castN)� postgres_ext)�Column�)�Migrator)� TModelType�TParamsz r�INDENT� �NEWLINE�pw_pext)� ArrayField�BinaryJSONField�DateTimeTZField� HStoreField� IntervalField� JSONField� TSVectorField�FIELD_MODULES_MAP)zplayhouse.postgres_extzplayhouse.fields�peewee� PW_MODULES�field�pw.ForeignKeyField�returnrc�^�i}|j�d|j�d�|d<|j�d|j�d�|d<|S)zGet params from the given fk.N�'� on_delete� on_update)r(r)�r#�paramss �c/home/asafur/pinokio/api/open-webui.git/app/env/lib/python3.11/site-packages/peewee_migrate/auto.py� fk_to_paramsr-(sJ�� �F� ��"�4�%�/�4�4�4��{�� ��"�4�%�/�4�4�4��{�� �M��pw.DateTimeFieldc�R�i}t|jt��s |j|d<|S)z)Get params from the given datetime field.�formats)� isinstancer1�listr*s r,� dtf_to_paramsr44s,�� �F� �e�m�T� *� *�*�!�M��y�� �Mr.�f�postgres_ext.ArrayFieldc���|j}t�|jjd��}|�d|jj��t t |�������|j|j d�S)N�pw�.)� field_class� field_kwargs� dimensions�convert_values) �_ArrayField__fieldr �get� __class__�__name__�reprr�get_field_parametersr<r=)r5� inner_field�modules r,�arrayf_to_paramsrF=su�� !� 4� �"�&�&�{�'<�'E�t�L�L��$�G�G�{�'<�'E�G�G� �� �!4�!4�!I�!I�!K�!K�L�L��,��.�  � � r.c��d|jiS)N� max_length)rH�r5s r,�<lambda>rJIs ��\�1�<�8�r.c�8�|j|j|j|jd�S)N�� auto_round�decimal_places� max_digits�roundingrLrIs r,rJrJJs#���l��*��l��J�  � �r.z.Dict[Type[pw.Field], Callable[[Any], TParams]]�FIELD_TO_PARAMSc�P��eZdZUdZded<d�fd� Zdd�fd � Zd d �d�fd�Z�xZS)rz!Get field's migration parameters.�Type[pw.Field]r:r#�pw.Fieldc �0��tt|��j|jt |��|j|jf|j|j|j |j d�|��||_ |j tvr@|j�i|_|j�t|j |����d|_d|_t%|t&j��r>|jj|_|j|jkrdnd|jjjz|_dSdS)N)� primary_key� column_name�index�uniquez'self'zmigrator.orm['%s'])�superr�__init__�name�find_field_type� field_type�nullrVrWrXrYr#r:rQ�extra_parameters�update� rel_model�to_fieldr2r8�ForeignKeyField� rel_field�model�_meta� table_name)�selfr#�kwargsr@s �r,r[zColumn.__init__[s&���$��f�d���$� �J� �E� "� "� � � �J� � �)��)��+��<� � �� � � ��� � � �� .� .��$�,�(*��%� � !� (� (���9I�)J�5�)Q�)Q� R� R� R������ � �e�R�/� 0� 0� �!�O�0�D�M��?�e�k�1�1���)�E�O�,A�,L�L� �N�N�N� � r.� �space�strr%c���tt|�����}t�|jjd��}d�|�d��D��\}}}d�||||���S)z.Generate the field definition for this column.r8c�:�g|]}|o|�����S�)�strip)�.0�ss r,� <listcomp>z$Column.get_field.<locals>.<listcomp>~s$��H�H�H�a�!�/���� � �H�H�Hr.�=z%{name}{space}={space}{module}.{field})r\r#rlrE) rZr� get_fieldr r?r:rA� partition�format)rirlr#rEr\�_r@s �r,rvzColumn.get_fieldzs�����f�d�#�#�-�-�/�/��"�&�&�t�'7�'@�$�G�G��H�H�5�?�?�3�3G�3G�H�H�H���a��6�=�=��U�%��>� � � r.F��changerc���tt|�����}|�dd��|r�t |�dd����|d<t |�dd����p|d|d<|�dd��|�dd��|j|d<|jj��t|jj��sh|j� |jj��}t|tj ��rt|j��|d <nt|��|d <|S) z#Generate parameters for self field.�backrefNrYFrXr(r)r_�default)rZrrC�pop�bool�nullabler#r~�callable�db_valuer2r8� WrappedNoderm�noderB)rir{r+�valuer@s �r,rCzColumn.get_field_parameters�s+����v�t�$�$�9�9�;�;��� � �9�d�#�#�#� � +�#�F�J�J�x��$?�$?�@�@�F�8� �"�6�:�:�g�u�#=�#=�>�>�R�&��BR�F�7�O� �J�J�{�D� )� )� )� �J�J�{�D� )� )� )�!�]�F�6�N� �:� � )�(�4�:�;M�2N�2N� )��J�'�'�� �(:�;�;�E��%���0�0� 0�$'�� �O�O��y�!�!�$(��K�K��y�!�� r.)r#rT)rk)rlrmr%rm)r%r) rA� __module__� __qualname__�__doc__�__annotations__r[rvrC� __classcell__)r@s@r,rrVs���������+�+�����������> � � � � � � �.3������������r.r�model1r�model2� List[str]c �����g}�j|j}}|j�|j}t���t|��z }|r1�fd�|D��}|�t �g|�Ri|����t|��t���z } | r |�t �g| �R���g} g} g} t���|z | z D]�} �| || }}t ||��}|�dd��}|�dd��}|�dd��}|r| �||f��|�| �| |f��|�|�| �| ||f����| r |�t�g| �R���| D]*\} }|�t�| |������+| D]�\} }}|dus|durc|| j s || j r#|�t�| ����|�t�| |������q|�t�| ������|j}|j}t|��t|��z }|��fd �|D����t|��t|��z }|��fd �|D����|S) z,Find difference between given peewee models.c� ��g|] }�|�� Srprp)rrr\� field_names1s �r,rtzdiff_one.<locals>.<listcomp>�s���8�8�8��,�t�$�8�8�8r.r_NrXrY)r_T)rYc3��K�|]V}t|dttf��r2t|d��dk�=t �|d���V��WdS)rr)r\N)r2r3�tuple�len� drop_index�rrrXr�s �r,� <genexpr>zdiff_one.<locals>.<genexpr>�sq������� � �e�A�h��u� � .� .��47�u�Q�x�=�=�1�3D�3D� �6��a��)�)�)�3D�3D�3D�3D��r.c3���K�|]]}t|dttf��r9t|d��dk�=t �|d|d���V��^dS)rr)r\rYN)r2r3r�r�� add_indexr�s �r,r�zdiff_one.<locals>.<genexpr>�sw������� � �e�A�h��u� � .� .��47�u�Q�x�=�=�1�3D�3D� �&�u�Q�x��a��9�9�9�3D�3D�3D�3D��r.)rg�fields�set�append� create_fields� drop_fields�compare_fieldsr� change_fields�change_not_nullrYrXr�r��indexes�extend)r�r�rj�changes�meta1�meta2� field_names2�names1r��names2�fields_to_change� fields_nulls�fields_indexesr\�field1�field2�diffr_rXrY�indexes1�indexes2�indexes_to_drop�indexes_to_addr�s` @r,�diff_oner��s������G��<���5�E��<�L��<�L��� � ��\�!2�!2� 2�F� �A�8�8�8�8��8�8�8�����}�V�?�f�?�?�?��?�?�@�@�@��� � ��\�!2�!2� 2�F� �5����{�6�3�F�3�3�3�4�4�4����L��N��L�!�!�F�*�V�3�9�9��%�d�+�\�$�-?����f�f�-�-���x�x���%�%������$�'�'�����(�D�)�)�� � 4� � #� #�V�T�N� 3� 3� 3� � � � � ��t� � -� -� -� � �6�#5� � !� !�4���"7� 8� 8� 8���A����}�V�?�.>�?�?�?�@�@�@�"�A�A� ��d�����v�t�$�?�?�?�@�@�@�@�-�5�5���e�V� �T�M�M�v��~�~��D�!�(� 9�L��,>�,D� 9����z�&�$�7�7�8�8�8� �N�N�9�V�T�&�A�A�A� B� B� B� B� �N�N�:�f�d�3�3� 4� 4� 4� 4��}�H��}�H��(�m�m�c�(�m�m�3�O� �N�N�����$���������]�]�S��]�]�2�N� �N�N�����#������� �Nr.F)�reverse�models1�List[TModelType]�models2�migrator�Optional[Migrator]c�����ttdtj|����}ttdtj|����}|r8t t |����}t t |����}d�|D���d�|D���g}����D]5\}}|�vr� |�t|�|�������6|���fd��fd��D��D����|��fd��fd��D��D����|S) z9Calculate changes for migrations from models2 to models1.rc�N�i|]"}tt|jj��|��#Srp�rrmrgrh�rr�ms r,� <dictcomp>zdiff_many.<locals>.<dictcomp>��)��E�E�E��4��Q�W�/�0�0�!�E�E�Er.c�N�i|]"}tt|jj��|��#Srpr�r�s r,r�zdiff_many.<locals>.<dictcomp>�r�r.�r�c3�F�K�|]}t�|����V��dS)r�N)� create_model)rrr\r�� models_map1s ��r,r�zdiff_many.<locals>.<genexpr>�sI������� � �[��&��:�:�:������r.c���g|]}|�v�|�� Srprp)rrr�� models_map2s �r,rtzdiff_many.<locals>.<listcomp>s#���D�D�D�1�q� �/C�/C�Q�/C�/C�/Cr.c3�B�K�|]}t�|��V��dS�N)� remove_model)rrr\r�s �r,r�zdiff_many.<locals>.<genexpr>sA�������,0� �[��&�'�'������r.c���g|]}|�v�|�� Srprp)rrr�r�s �r,rtzdiff_many.<locals>.<listcomp>s$���4d�4d�4d�1�q�Xc�Oc�Oc�Q�Oc�Oc�Ocr.) rr r8� sort_modelsr3�reversed�itemsr�r�) r�r�r�r�r�r\r�r�r�s ` @@r,� diff_manyr��s�������4� �%�r�~�g�'>�'>�?�?�G��4� �%�r�~�g�'>�'>�?�?�G��*��x��(�(�)�)���x��(�(�)�)��E�E�W�E�E�E�K�E�E�W�E�E�E�K��G�#�)�)�+�+�O�O� ��f� �{� "� "� ����x�� �D�(9�H�M�M�M�N�N�N�N� �N�N������D�D�D�D� �D�D�D�������  �N�N�����4d�4d�4d�4d� �4d�4d�4d������� �Nr.� model_typermc � ��d}|j}tt��fd�|jD����z}tt�t ddt�d|j�d�|jrt�d|j�d�ndt|j tj ��rt�d |j j ��nd|j rt�d |j ��ndg����z}|�|j||� ��S) z(Generate migrations for the given model.z-class {classname}(pw.Model): {fields} {meta}c�t��g|]4}t|tj��r |jdk�'t |fi�����5S)�id)r2r8�PrimaryKeyFieldr\� field_to_code�rrr#rjs �r,rtz!model_to_code.<locals>.<listcomp>sX��� � � ���u�b�&8�9�9� �?D�j�D�>P�>P� �%� *� *�6� *� *�>P�>P�>Pr.Nz class Meta:ztable_name = "�"z schema = "�zprimary_key = pw.CompositeKeyz indexes = )� classnamer��meta)rgrr�join� sorted_fields�filterrh�schemar2rVr8� CompositeKey� field_namesr�rxrA)r�rj�templater�r�s ` r,� model_to_coder� s0���A�H� � �D� �g�l�l� � � � ��+� � � ����F� �G�L�L�� ���;�;���;�;�;�7;�{�J�6�3�3�T�[�3�3�3�3��"�$�"2�B�O�D�D��v�\�\�D�<L�<X�\�\�\��9=��M�6�5�5�T�\�5�5�5�2� � � ��� �D�" �?�?�Z�%8��d�?� S� S�Sr.c �"�dt|fi|��zS)z$Generate migrations to create model.z@migrator.create_model )r�)r�rjs r,r�r�*s�� %� �j�(K�(K�F�(K�(K� K�Kr.c �$�|j}d|jzS)z$Generate migrations to remove model.zmigrator.remove_model('%s'))rgrh)r�rjr�s r,r�r�/s�� � �D� (�4�?� :�:r.r�rTc ���|j}dt�d|j�dtdtz��fd�|D����z�d�S)z"Generate migrations to add fields.zmigrator.add_fields(r'�', �,c�.��g|]}t|fddi�����S)rlF�r�r�s �r,rtz!create_fields.<locals>.<listcomp><s/���`�`�`�PU� �e� K� K�5� K�F� K� K�`�`�`r.�))rgrrhr��r�r�rjr�s ` r,r�r�5sg��� � �D�D���� ����� ��=� � �`�`�`�`�Y_�`�`�`� a� a� b� b� b� �r.c �x�|j}d|j�dd�tt|�����d�S)z%Generate migrations to remove fields.zmigrator.remove_fields('r�z, r�)rgrhr��maprBr�s r,r�r�@s>�� � �D�D� ���� � � �#�d�F�#�#�$�$�$�$� �r.T�rlrlr�c �R�t|��}|�|rdnd��S)zGenerate field description.rkr�)rrv)r#rlrj�cols r,r�r�Is(�� ��-�-�C� �=�=��-���2� .� .�.r.r�r�rc���t|��t|��}}||krddiSt||j|jd����t||j|jd����}}|�d���|�d���}}t t |�����t |�����z ��S)z$Find diffs between the given fields.�typeT)rXrY)r`rz)r]rrXrYrC�dictr�r�)r�r��ftype1�ftype2�col1�col2�params1�params2s r,r�r�Os���$�V�,�,�o�f�.E�.E�F�F� ������~�� �v�&�,�&�-�(X�(X�Y�Y�Y��v�&�,�&�-�(X�(X�Y�Y�Y� �D� �!�!��!�.�.� �!�!��!�.�.��G� ��G�M�M�O�O�$�$�s�7�=�=�?�?�';�';�;� <� <�<r.� model_cls�pw.Tuple[pw.Field, Dict]c�v�|j}d|j�ddtz�d�|D�����d�S)z%Generate migrations to change fields.zmigrator.change_fields('r�r�c�6�g|]\}}t|d�����S)Fr�r�)rrr5r�s r,rtz!change_fields.<locals>.<listcomp>es)��R�R�R���4�m�A�U�;�;�;�R�R�Rr.r�)rgrhrr�)r�r�r�s r,r�r�`sH�� �?�D�D� ���� �w����R�R�6�R�R�R�S�S�S�S� �r.r\r_c�X�|j}|rdnd}d|�d|j�dt|���d�S)�Generate migrations.� drop_not_null� add_not_nullz migrator.z('r�r�)rgrhrB)r�r\r_r�� operations r,r�r�is;�� � �D�#'�;���^�I�I�&/�i�i�����$�t�*�*�*�*� M�Mr.�Union[str, Iterable[str]]rYc�v�|j}t|���d��}d|j�d|�d|�d�S)r�()[]zmigrator.add_index('r�z , unique=r��rgrBrqrh)r�r\rYr��columnss r,r�r�psF�� � �D��4�j�j���v�&�&�G� Q�$�/� Q� Q�g� Q� Q�� Q� Q� Q�Qr.c�p�|j}t|���d��}d|j�d|�d�S)rrzmigrator.drop_index('r�r�r)r�r\r�rs r,r�r�ws>�� � �D��4�j�j���v�&�&�G� A�4�?� A� A�w� A� A� A�Ar.rSc��t|��}|jtvr)|���D]}|jtvr|cS�|Sr�)r�r�r"�mro)r#�ftype�clss r,r]r]~sT�� ��K�K�E� ��z�)�)��9�9�;�;� � �C��~��+�+�� � � �,� �Lr.)r#r$r%r)r#r/r%r)r5r6)r�rr�rr%r�r�)r�r�r�r�r�r�r%r�)r�rr%rm)r�rr�rTr%rm)r#rTrlr�r%rm)r�rTr�rTr%r)r�rr�r�r%rm)r�rr\rmr_r�r%rm)r�rr\rrYr�r%rm)r�rr\rr%rm)r#rTr%rS)7r�� __future__r�typingrrrrrr r r r r rr!r8� playhouser�playhouse.reflectionr� VanilaColumnr�r�typesrrrr�rr r"r-r4rF� CharField� DecimalFieldrd� DateTimeFieldrrQr�r�r�r�r�r�r�r�r�r�r�r�r�r]rpr.r,�<module>rs���&�&�&�"�"�"�"�"�"� � � � � � � � � � � � � � � � � � � � � � � � � � �����"�"�"�"�"�"�7�7�7�7�7�7��+�"�"�"�"�"�"�*�*�*�*�*�*�*�*���������������� � ������������K� �J�J�J�J� � � � ����� � � � ��L�8�8��O��� �� ���m���-� C�� � � � �?�?�?�?�?�\�?�?�?�DI�I�I�I�^$(�$� � $�$�$�$�$�$�NT�T�T�T�>L�L�L�L� ;�;�;�;� ��������59�/�/�/�/�/�/� =�=�=�=�"����N�N�N�N�R�R�R�R�B�B�B�B������r.
Memory