� M�g�0����UdZddlmZddlZddlZddlZddlZddlmZddl m Z ddl m Z ddl mZddlmZmZmZmZmZmZmZmZmZdd lmZddlZd d lmZmZd d l m!Z!d d l"m#Z#d dl$m%Z%m&Z&d dl'm(Z(er ddl)m*Z*ddl+m,Z,ej-dej.��Z/de0d<e j1��Z2de0d<e2dz Z3de0d<d/d�Z4Gd�de5��Z6Gd�de6��Z7Gd�de6��Z8d0d#�Z9d1d%�Z:d&�Z;d'd(�d2d.�Z<dS)3zMigration router.�)� annotationsN)�cached_property)� import_module)�Path)� ModuleType) � TYPE_CHECKING�Any�Final�Iterable�List�Optional�Set�Type�Union)�mock�)�NEWLINE� diff_many)�logger)�Migrator)� MIGRATE_TABLE�MigrateHistory)�TEMPLATE)�Logger)� TModelTypez\s+$r �CLEAN_RE�CURDIR� migrations�DEFAULT_MIGRATE_DIRc��dS�N�)�m�d�fakes �e/home/asafur/pinokio/api/open-webui.git/app/env/lib/python3.11/site-packages/peewee_migrate/router.py�voidr'"s�� �4�c���eZdZdZeddeefd4d �Zed5d���Z e d6d���Z e d7d���Z e d7d���Z ed8d���Zddd�d9d�Zd:d;d �Zd!�Z d<d=d'�Zd;d(�Zd)ddd*�d>d0�Zd?dd1�d@d2�Zd3�ZdS)A� BaseRouterzAbstract base class for router.N�database�Union[pw.Database, pw.Proxy]�ignore�Optional[Iterable[str]]�schema� Optional[str]rr�migrator_class�Type[Migrator]c�,�||_||_||_||_||_||_t |jtjtj f��std|z���t|jt��std|z���dS)�Initialize the router.zInvalid database: %szInvalid migrator_class: %sN) r+� migrate_tabler/r-rr1� isinstance�pw�Database�Proxy� TypeError� issubclassr)�selfr+r5r-r/rr1s r&�__init__zBaseRouter.__init__)s���!�� �*����� ��� ��� �,����$�-�"�+�r�x�)@�A�A� ?��2�X�=�>�>� >��$�-�x�8�8� E��8�8�C�D�D� D� E� Er(�return�Type[MigrateHistory]c��tj}|j|_|j|_|j|_tjd���tS)z,Initialize and cache MigrationHistory model.T)�safe)r�_metar+r5� table_namer/� create_table)r<�metas r&�modelzBaseRouter.model>sB���#��� �� ��,����k�� ��#��.�.�.�.��r(� Iterable[str]c��t�)zGet migrations to run.��NotImplementedError�r<s r&�todozBaseRouter.todoHs ��"�!r(� List[str]c��d�|j����|jj��D��S)zScan migrations in database.c��g|] }|j�� Sr"��name)�.0�mms r&� <listcomp>z#BaseRouter.done.<locals>.<listcomp>Ps��N�N�N�B���N�N�Nr()rF�select�order_by�idrKs r&�donezBaseRouter.doneMs9��O�N�$�*�"3�"3�"5�"5�">�">�t�z�}�"M�"M�N�N�N�Nr(c�R��t|j����fd�|jD��S)z'Calculate difference between fs and db.c���g|]}|�v�|�� Sr"r")rRrQrXs �r&rTz#BaseRouter.diff.<locals>.<listcomp>Vs#���?�?�?��d�$�.>�.>��.>�.>�.>r()�setrXrL)r<rXs @r&�diffzBaseRouter.diffRs.����4�9�~�~��?�?�?�?���?�?�?�?r(rc�z�|�|j��}|jD]}|�||���|S)z2Create migrator and setup it with fake migrations.)r1r+rX�run_one)r<�migratorrQs r&r_zBaseRouter.migratorXsF���&�&�t�}�5�5���I� )� )�D� �L�L��x� (� (� (� (��r(�autoF)r`rQ�strr c�X��dx}}|�rTtj�t���t |t ��r|n|g}t d�|D����sv |}t |t��r%d�tj t�g��D��}d�|D��}n,#t$r�j � d|��YdSwxYw�j r�fd�|D��}�jD]}��|�jd� ��� t#�j|��}|s�j �d ��dSt#�j|d� ��}�j �d |����|||��}�j �d |��|S)zYCreate a migration. :param auto: Python module path to scan for models. �c3�4K�|]}t|��V��dSr!)� _check_model)rRr#s r&� <genexpr>z$BaseRouter.create.<locals>.<genexpr>js(����7�7�1�|�A���7�7�7�7�7�7r(c��g|] \}}}|�|�� Sr"r")rR�_r#�ispkgs r&rTz%BaseRouter.create.<locals>.<listcomp>ns4��#�#�#�"-�!�Q��X]�#��#�#�#r(c�6�g|]}t|��D]}|���Sr")� load_models)rR�moduler#s r&rTz%BaseRouter.create.<locals>.<listcomp>qs-��S�S�S�F�{�6�?R�?R�S�S�!�a�S�S�S�Sr(zCan't import models module: %sNc�:��g|]}|jj�jv�|��Sr")rBrQr-)rRr#r<s �r&rTz%BaseRouter.create.<locals>.<listcomp>xs)���O�O�O��q�w�|�4�;�/N�/N�!�/N�/N�/Nr(T�r%zNo changes found.��reversezCreating migration "%s"z"Migration has been created as "%s")�sys�path�appendrr6�list�all�bool�pkgutil� iter_modules� ImportErrorr� exceptionr-r\r^r_�compile_migrations�warning�info�compile)r<rQr`�migrate�rollback�models�modules� migrations` r&�createzBaseRouter.create`s����  ���(� � O� �H�O�O��M� *� *� *�'��d�3�3�?�T�T�$��F��7�7��7�7�7�7�7� �  �$�G�!�$��-�-��#�#�18�1E�&�{�m�1T�1T�#�#�#��T�S�g�S�S�S�F�F��"� � � ��K�)�)�*J�D�Q�Q�Q��4�4� �����{� P�O�O�O�O�V�O�O�O��!�Y� B� B� �� � �Y�� �D� �A�A�A�A�(����?�?�G�� �� �#�#�$7�8�8�8��t�)�$�-���N�N�N�H� � ���2�D�9�9�9��|�|�D�'�8�4�4�� � ���=�t�D�D�D�� s�"AB+�+%C�C�initialc���t|j��}t|t|jj����}|s|j�d��S|���|j� d|��t|jg��}|� |||d��}t|j��}|� ||dd���|j� d|��dS)zMerge migrations into one.zCan't merge migrationszMerge migrations into "%s"rT�r%�forcez$Migrations has been merged into "%s"N) rr+r{rtr_�ormr�error�clearr}r~r^)r<rQr_rr�s r&�mergezBaseRouter.merge�s����D�M�*�*��$�X�t�D�M�4E�/F�/F�G�G��� ?��;�$�$�%=�>�>� >� � � � � � � � ���5�t�<�<�<�%�d�m�R�8�8���|�|�D�'�8�Q�7�7���D�M�*�*�� � � �T�8�$�d� �;�;�;� � ���?��F�F�F��tr(c�\�|j������dS)zClear migrations.N)rF�delete�executerKs r&r�zBaseRouter.clear�s(�� � �����#�#�%�%�%�%�%r(rcrr��num� Optional[int]c��t�)�Create a migration.rI)r<rQrr�r�s r&r~zBaseRouter.compile�s ��"�!r(c��t�)�Read migration from file.rI)r<rQs r&�readzBaseRouter.read�s��!�!r(T)r%� downgrader�r_r%rvr�r�c�� |�|��\}}|r�tj��}d|j_tjd��5tjd|���5|||j|���ddd��n #1swxYwYddd��n #1swxYwY|r6|j�|���|j � d|��g|_ |S|j� ��5|sT|j � d|��|||j|���|��|j�|���n�|j � d |��|||j|���|��|j� ���|jj|k�����|j � d|��|cddd��S#1swxYwYdS#t"$r=|j���|sd nd } |j �d | |���wxYw) z(Run/emulate a migration with given name.Nzpeewee.Model.selectzpeewee.Database.execute_sql)� return_valuernrPzDone %sz Migrate "%s"zRolling back %s� Migration�Rollbackz %s failed: %s)r�r�Mock� fetch_oner��patchr+rFr�rr}�__ops__� transactionr��whererQr�� Exceptionr�rz) r<rQr_r%r�r�rr�� mocked_cursor� operations r&r^zBaseRouter.run_one�sX��$ � $� � �$��� �G�X�� � $� � � � �7;� �'�4��Z� 5�6�6�@�@�� �1� �9�9�9�@�@��G�H�d�m�$�?�?�?�?�@�@�@�@�@�@�@�@�@�@�@����@�@�@�@�@�@�@�@�@�@�@�@�@�@�@����@�@�@�@� �6��J�%�%�4�%�0�0�0��K�$�$�Y��5�5�5�#%�� �� ���*�*�,�,� � � � Q��K�$�$�^�T�:�:�:��G�H�d�m�$�?�?�?�?��H�J�J�J��J�%�%�4�%�0�0�0�0��K�$�$�%6��=�=�=��H�X�t�}�4�@�@�@�@��H�J�J�J��J�%�%�'�'�-�-�d�j�o��.E�F�F�N�N�P�P�P�� � � ��D�1�1�1�� � � � � � � � � � � � ���� � � � � � ��� � � � �M� "� "� $� $� $�+4�D� � �*�I� �K� !� !�/�9�d� C� C� C� �  ���s��A H�B�&B�: B�B � B� B �B� H�B!�!H�$B!�%AH�)H�C7H�9 H�H � H� H �H�AIrnc � �|j�d��g}|j}|s|j�d��|S|j}|D]8}|�|�||||�����|r||krn�9|S)zRun migrations.zStarting migrationszThere is nothing to migrater�)rr}r\r_rsr^)r<rQr%rXr\r_�mnames r&�runzBaseRouter.run�s��� � ���.�/�/�/����y��� � �K� � �:� ;� ;� ;��K��=��� � �E� �K�K�� � �U�H�4�t� �L�L� M� M� M�� ��� � ����� r(c���|j}|sd}t|���|d}|j}|�||dd���|j�d|��dS)zRollback the latest migration.zThere is nothing to rollback�����FT)r%r�zDowngraded migration: %sN)rX� RuntimeErrorr_r^rr|)r<rX�msgrQr_s r&r�zBaseRouter.rollback�sm���y��� $�0�C��s�#�#� #��B�x���=�� � � �T�8�%�4� �@�@�@� � ���6��=�=�=�=�=r() r+r,r-r.r/r0rrr1r2)r>r?)r>rG)r>rM)r>r)rQrar`r r>r0)r�)rQra�rcrcN) rQrarrar�rar�r�r>ra) rQrar_rr%rvr�rvr�rvr>rar!)rQr0r%rvr>rM)�__name__� __module__� __qualname__�__doc__rrrr=rrF�propertyrLrXr\r_r�r�r�r~r�r^r�r�r"r(r&r*r*&s�������)�)� $�*.� $��)1�E�E�E�E�E�*�����_���"�"�"��X�"��O�O�O��X�O��@�@�@��X�@� �����_��'��'�'�'�'�'�'�R�����$&�&�&� VZ�"�"�"�"�"� "�"�"�"����.�.�.�.�.�.�`�e�������$ >� >� >� >� >r(r*c�x��eZdZdZejd��Z dd�fd� Zed���Z ddd �Zd �Z �fd �Z �xZ S)�RouterzFile system router.z[\d]{3}_[^\.]+\.py$N� migrate_dir�Optional[Union[str, Path]]c ���tt|��j|fi|��|�t}n$t |t ��rt |��}||_dS�r4N)�superr�r=rr6rarr�)r<r+r��kwargs� __class__s �r&r=zRouter.__init__�sd��� %��f�d���$�X�8�8��8�8�8� � �-�K�K� � �S� )� )� ,��{�+�+�K�&����r(c����j���s;�j�d�j���j�d���t �fd�t j�j��D����S)zScan migrations in file system.z'Migration directory: %s does not exist.T)�parentsc3�`�K�|](}�j�|���|dd�V��)dS)N�����)�filemask�match)rR�fr<s �r&rfzRouter.todo.<locals>.<genexpr>sA�����]�]��d�m�FY�FY�Z[�F\�F\�]�a����f�]�]�]�]�]�]r()r��existsrr|�mkdir�sorted�os�listdirrKs`r&rLz Router.todo s������&�&�(�(� 1� �K� � � I�4�K[� \� \� \� � � "� "�4� "� 0� 0� 0��]�]�]�]�b�j��1A�&B�&B�]�]�]�]�]�]r(rcr>rac�4�|�t|j��}d�|dz��|z}|dz}|j|z }|�d��5}|�t j|||�����ddd��n #1swxYwY|S)r�Nz{:03}_r�.py�w)rr�rQ)�lenrL�formatr��open�writer)r<rQrr�r��filenamerrr�s r&r~zRouter.compiles��� �;��d�i�.�.�C����s�Q�w�'�'�$�.���%�<����(�*�� �Y�Y�s�^�^� X�q� �G�G�H�O�G�h�X�V�V�V� W� W� W� X� X� X� X� X� X� X� X� X� X� X���� X� X� X� X�� s�+B � B�Bc�Z�|j|dzz }|�d��5}|���}i}t|ddd���}t ||d��|�dt ��|�d t ��fcddd��S#1swxYwYdS) r�r��rz<string>�execT)� dont_inheritNrr�)r�r�r�r~r��getr')r<rQrrr��code�scopes r&r�z Router.read s�����4�%�<�0�� �Y�Y�s�^�^� K�q��6�6�8�8�D��E��4��V�$�G�G�G�D� ��u�d� #� #� #��9�9�Y��-�-�u�y�y��T�/J�/J�J�  K� K� K� K� K� K� K� K� K� K� K� K���� K� K� K� K� K� Ks�A0B � B$�'B$c���tt|�����|jD]#}|j|dzz }|����$dS)zRemove migrations from fs.r�N)r�r�r�rLr��unlink)r<rQrrr�s �r&r�z Router.clear*sZ��� �f�d���!�!�#�#�#��I� � �D��#�t�e�|�4�D� �K�K�M�M�M�M� � r(r!)r�r�r�)r>ra) r�r�r�r��rer~r�r=r�rLr�r�� __classcell__�r�s@r&r�r��s�����������r�z�0�1�1�H� 37� '� '� '� '� '� '� '��^�^��X�^� � � � � �K�K�K���������r(r�c�*��eZdZdZd�fd� Zd�Z�xZS)� ModuleRouterzModule based router.rc ���tt|��j|fi|��t|t��rt |��}||_dSr�)r�r�r=r6rar�migrate_module)r<r+r�r�r�s �r&r=zModuleRouter.__init__5sU���*��l�D�!�!�*�8�>�>�v�>�>�>� �n�c� *� *� ;�*�>�:�:�N�,����r(c��t|j|��}t|dt��t|dt��fS)zRead migrations from a module.rr�)�getattrr�r')r<rQ�mods r&r�zModuleRouter.read>s7���d�)�4�0�0���s�I�t�,�,�g�c�:�t�.L�.L�L�Lr()r)r�r�r�r�r=r�r�r�s@r&r�r�2sY���������-�-�-�-�-�-�M�M�M�M�M�M�Mr(r�rl�Union[str, ModuleType]r>�Set[Type[pw.Model]]c�h�t|t��r|gnt|��}d�|D��S)zLoad models from given module.c �v��h|]5�tt�fd�t���D����D]}|���6S)c3�8�K�|]}t�|��V��dSr!)r�)rRrQrls �r&rfz(load_models.<locals>.<setcomp>.<genexpr>Ks-�����&U�&U��w�v�t�'<�'<�&U�&U�&U�&U�&U�&Ur()�filterre�dir)rRr#rls @r&� <setcomp>zload_models.<locals>.<setcomp>Hse��� � � � �� �&U�&U�&U�&U��V���&U�&U�&U�V�V� � � � � � � � r()r6r�_import_submodules)rlr�s r&rkrkDsI��%�V�Z�8�8�X�v�h�h�>P�QW�>X�>X�G� � �� � � �r(.c��|durt��}t|t��rt|��}t |d��s|hSg}t|j��|zr|S|t|j��z}t j|j|jdz��D]i\}}}|� |d��}|�|j ��&|j � |��}|� |��|r|t|��z }�j|S)N.�__path__�.)r[r6rar�hasattrr�rw� walk_packagesr�� find_spec�loader� load_modulersr�)�package�passedr�r�rQ�is_pkg�specrls r&r�r�Os!�� ��}�}������'�3���)���(�(�� �7�J� '� '���y���G� �7� ���v�%���� �c�'�"�#�#�#�F� '� 5�g�6F��HX�[^�H^� _� _�2�2����f�����d�+�+�� �<�4�;�.� ���(�(��.�.�����v���� � 2� �)�&�1�1� 1�G�� �Nr(c��t|t��o)t|tj��ot |d��S)z/Check object if it's a peewee model and unique.rB)r6�typer;r7�Modelr�)�objs r&rereks3�� �c�4� � � X�Z��R�X�%>�%>� X�7�3�PW�CX�CX�Xr(Fror_rr��List[TModelType]rac��t|j��}|r||}}t||||���}|sdSttjd�|���d����z}t �d|��S)z$Compile migrations for given models.rorcz � )rtr�rr�join�splitr�sub)r_r�rp�sourcerr�s r&r{r{ps��� �(�,� � �F��(������6�6�8�W�E�E�E�J� ���r� �W�\�&�+�+�j�"9�"9�"?�"?��"E�"E�F�F� F�D� �<�<��d� #� #�#r(r!)rlr�r>r�).)r_rr�r�r>ra)=r�� __future__rr�rwr�rq� functoolsr� importlibr�pathlibr�typesr�typingrr r r r r rrr�unittestr�peeweer7r`rr�logsrr_rr�rr�templater�loggingr�peewee_migrate.typesrr~�Mr�__annotations__�cwdrrr'�objectr*r�r�rkr�rer{r"r(r&�<module>rs������"�"�"�"�"�"� � � � ����� � � � � � � � �%�%�%�%�%�%�#�#�#�#�#�#�������������X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�X�����������$�$�$�$�$�$�$�$�������������1�1�1�1�1�1�1�1��������0�������/�/�/�/�/�/��"�*�W�b�d�+�+��+�+�+�+���� � ������#�l�2��2�2�2�2�����O>�O>�O>�O>�O>��O>�O>�O>�d7�7�7�7�7�Z�7�7�7�tM�M�M�M�M�:�M�M�M�$��������8Y�Y�Y� QV� $� $� $� $� $� $� $� $r(
Memory