Hacked By AnonymousFox

Current Path : /opt/cloudlinux/venv/lib64/python3.11/site-packages/alembic/ddl/__pycache__/
Upload File :
Current File : //opt/cloudlinux/venv/lib64/python3.11/site-packages/alembic/ddl/__pycache__/impl.cpython-311.pyc

�

�܋fR]��^�UddlmZddlmZddlZddlmZddlmZddlmZddlm	Z	ddlm
Z
dd	lmZdd
lmZddlm
Z
ddlmZdd
lmZddlmZddlmZddlmZddlmZddlmZddlmZddlmZer~ddlmZddlmZddlmZddlmZddlmZddl m!Z!ddl"m#Z#ddl"m$Z$ddl"m%Z%dd l&m'Z'dd!l&m(Z(dd"l&m)Z)dd#l&m*Z*dd$l&m+Z+dd%l&m,Z,dd&l-m.Z.dd'l/m0Z0dd(lm1Z1dd)l2m3Z3dd*l4m5Z5dd+l4m6Z6Gd,�d-e7��Z8iZ9d.e:d/<ed0gd1���Z;Gd2�d3e8�4��Z<d5�Z=dS)6�)�annotations)�
namedtupleN)�Any)�Callable)�Dict)�List)�Optional)�Sequence)�Set)�Tuple)�Type)�
TYPE_CHECKING)�Union)�cast��schema)�text�)�base�)�util)�sqla_compat)�Literal)�TextIO)�
Connection)�Dialect)�CursorResult)�	Inspector)�
ClauseElement)�
ColumnElement)�quoted_name)�Column)�
Constraint)�ForeignKeyConstraint)�Index)�Table)�UniqueConstraint)�TableClause)�
TypeEngine)�_ServerDefault)�AutogenContext)�ApplyBatchImpl)�BatchOperationsImplc��eZdZd	d�ZdS)
�ImplMeta�	classname�str�bases�Tuple[Type[DefaultImpl]]�dict_�Dict[str, Any]c�h�t�||||��}d|vr|t|d<|S)N�__dialect__)�type�__init__�_impls)�clsr0r2r4�newtypes     �G/opt/cloudlinux/venv/lib64/python3.11/site-packages/alembic/ddl/impl.pyr9zImplMeta.__init__4s:���-�-��Y��u�=�=���E�!�!�+.�F�5��'�(���N)r0r1r2r3r4r5)�__name__�
__module__�__qualname__r9�r>r=r/r/3s(������	�	�	�	�	�	r>r/zDict[str, Type[DefaultImpl]]r:�Params)�token0�tokens�args�kwargsc��eZdZUdZdZdZdZddhfZded<d	Z	d
ed<dZ
d
ed<d�d�Zed�d���Z
d�d"�Zd�d%�Zd�d*�Zed�d+���Zd,d	ej��fd�d5�Z	d�d�d7�Z												d�d�dM�Z	d�d�dQ�Z	d�d�dR�Zd�dT�Zd�dV�Z	d�d�dZ�Zd�d[�Zd�d\�Zd�d_�Zd�d`�Z d�da�Z!d�dc�Z"d�dd�Z#	d�d�dj�Z$d�dm�Z%d�dp�Z&d�ds�Z'd�dv�Z(dw�Z)d�d~�Z*d�Z+	d�d�d��Z,d�d��Z-d�d��Z.d��Z/d�d��Z0d�d��Z1d�d��Z2d�d��Z3d��Z4d�d��Z5d��Z6d,S)��DefaultImpla�Provide the entrypoint for major migration operations,
    including database-specific behavioral variances.

    While individual SQL/DDL constructs already provide
    for database-specific implementations, variances here
    allow for entirely different sequences of operations
    to take place for a particular migration, such as
    SQL Server's special 'IDENTITY INSERT' step for
    bulk inserts.

    �defaultF�;�NUMERIC�DECIMALzTuple[Set[str], ...]�
type_synonymsrBz
Sequence[str]�type_arg_extract)�on_nullzTuple[str, ...]�identity_attrs_ignore�dialectr�
connection�Optional[Connection]�as_sql�bool�transactional_ddl�Optional[bool]�
output_buffer�Optional[TextIO]�context_optsr5�return�Nonec���||_||_||_|�dd��|_||_i|_||_|�||_|jr|jstj
d���dSdS)N�
literal_bindsFz3Can't use literal_binds setting without as_sql mode)rRrSrU�getr_rY�memor[rWr�CommandError)�selfrRrSrUrWrYr[s       r=r9zDefaultImpl.__init__\s������$������)�-�-�o�u�E�E���*�����	�(����(�%6�D�"���	��;�
��'�I����	�	�
�
r>�Type[DefaultImpl]c�&�t|jS�N)r:�name)r;rRs  r=�get_by_dialectzDefaultImpl.get_by_dialectvs���g�l�#�#r>rr1c��|j�J�|j�|dz��|j���dS)Nz

)rY�write�flush)rcrs  r=�
static_outputzDefaultImpl.static_outputzsG���!�-�-�-��� � ����/�/�/��� � �"�"�"�"�"r>�batch_opr-c��dS)z�Return True if the given :class:`.BatchOperationsImpl`
        would need the table to be recreated and copied in order to
        proceed.

        Normally, only returns True on SQLite when operations other
        than add_column are present.

        FrB)rcrms  r=�requires_recreate_in_batchz&DefaultImpl.requires_recreate_in_batchs	���ur>�
batch_implr,�tabler&c��dS)z�perform any operations needed on a table before a new
        one is created to replace it in batch mode.

        the PG dialect uses this to drop constraints on the table
        before the new one uses those same names.

        NrB)rcrprqs   r=�prep_table_for_batchz DefaultImpl.prep_table_for_batch�����r>c��|jSrf)rS�rcs r=�bindzDefaultImpl.bind�s
����r>N�	construct�Union[ClauseElement, str]�execution_options�Optional[dict[str, Any]]�multiparams�Sequence[dict]�params�Optional[CursorResult]c�T�t|t��rt|��}|jr�|s|rt	d���|jr-t|tj��stddi���}ni}|j	dd|j
i|��}|�t|���dd���
��|jz��dS|j}|�J�|r
|jdi|��}|rt|t"��sJ�||fz
}|�||��S)	Nz+Execution arguments not allowed with as_sqlr_T)�compile_kwargsrR�	z    rB)�
isinstancer1rrU�	Exceptionr_r�
DDLElement�dict�compilerRrl�replace�strip�command_terminatorrSrz�tuple�execute)rcrxrzr|r~�
compile_kw�compiled�conns        r=�_execzDefaultImpl._exec�s����i��%�%�	(��Y���I��;�	��
O�f�
O�� M�N�N�N��!�
 �*��6�,�+�+�
 �"�/�4�1H�I�I�I�
�
��
�(�y�(������(2���H�
����H�
�
�%�%�d�F�3�3�9�9�;�;��)�*�
�
�
��4��?�D��#�#�#� �
C�-�t�-�B�B�0A�B�B���
)�!�+�u�5�5�5�5�5���y�(���<�<��;���
r>�sqlc�2�|�||��dSrf)r�)rcr�rzs   r=r�zDefaultImpl.execute�s��
	
�
�
�3�)�*�*�*�*�*r>�
table_name�column_name�nullable�server_default�%Union[_ServerDefault, Literal[False]]rg�
Optional[str]�type_�Optional[TypeEngine]r�
autoincrement�comment�$Optional[Union[str, Literal[False]]]�existing_comment�
existing_type�existing_server_default�Optional[_ServerDefault]�existing_nullable�existing_autoincrement�kwrc���|�|�tjdd���|�/|�tj|||||||
|
�����|dur{i}tj||��r
tj}n3tj||��rtj	}||d<ntj
}|�||||f||||
|
d�|����|�/|�tj|||||||
|
�����|	dur/|�tj|||	||||
|
�����|�0|�tj
|||||||
�����dSdS)NzBautoincrement and existing_autoincrement only make sense for MySQL�)�
stacklevel)rr�r�r�r�F�impl)rr�r�r�)r�warnr�r�ColumnNullabler�_server_default_is_computed�ComputedColumnDefault�_server_default_is_identity�IdentityColumnDefault�
ColumnDefault�
ColumnType�
ColumnComment�
ColumnName)rcr�r�r�r�rgr�rr�r�r�r�r�r�r�r��cls_s                 r=�alter_columnzDefaultImpl.alter_column�s5��$�$�(>�(J��I�,��
�
�
�
�
���J�J��#����!�"/�,C�&7�%5�	�	�	�
�
�
���&�&��B��6�� 7���

*��1����8�� 7���
*��1��!��6�
�
��)���J�J�����"�
�"�"/�,C�&7�%5�
�
��
�
�
�
�
����J�J������!�"/�,C�&7�%5�	�	�	�
�
�
��%����J�J��"����!�"/�,C�&7�%5�	�	�	�
�
�
����J�J������!�"/�,C�&7����

�

�

�

�

��r>�column�Column[Any]�!Optional[Union[str, quoted_name]]c�Z�|�tj|||�����dS�Nr)r�r�	AddColumn)rcr�r�rs    r=�
add_columnzDefaultImpl.add_column<s-��	
�
�
�4�>�*�f�V�D�D�D�E�E�E�E�Er>c�Z�|�tj|||�����dSr�)r�r�
DropColumn)rcr�r�rr�s     r=�drop_columnzDefaultImpl.drop_columnDs-��	
�
�
�4�?�:�v�f�E�E�E�F�F�F�F�Fr>�constc��|j�|�|��r)|�tj|����dSdSrf)�_create_ruler�r�
AddConstraint�rcr�s  r=�add_constraintzDefaultImpl.add_constraintMsI����%��);�);�D�)A�)A�%��J�J�v�+�E�2�2�3�3�3�3�3�&�%r>r#c�T�|�tj|����dSrf)r�r�DropConstraintr�s  r=�drop_constraintzDefaultImpl.drop_constraintQs%���
�
�6�(��/�/�0�0�0�0�0r>�old_table_name�new_table_name�Union[str, quoted_name]c�Z�|�tj|||�����dSr�)r�r�RenameTable)rcr�r�rs    r=�rename_tablezDefaultImpl.rename_tableTs9��	
�
�
���^�^�F�K�K�K�	
�	
�	
�	
�	
r>c��|j�||jd|���|�t	j|����|j�||jd|���|jD])}|�t	j|�����*|j	j
o|j	j}|j}|r|r|�
|��|jD]"}|j}|r|r|�|���#dS�NF)�
checkfirst�_ddl_runner)�dispatch�
before_createrSr�r�CreateTable�after_create�indexes�CreateIndexrR�supports_comments�inline_commentsr��create_table_comment�columns�create_column_comment)rcrq�index�with_commentr�r�s      r=�create_tablezDefaultImpl.create_table^s6��
��$�$��4�?�u�$�	%�	
�	
�	
�	
�
�
�6�%�e�,�,�-�-�-�
��#�#��4�?�u�$�	$�	
�	
�	
��]�	2�	2�E��J�J�v�)�%�0�0�1�1�1�1�
�L�*�O�4�<�3O�/O�	��-���	-�|�	-��%�%�e�,�,�,��m�	3�	3�F��n�G��
3�<�
3��*�*�6�2�2�2��	3�	3r>c���|j�||jd|���|�t	j|����|j�||jd|���dSr�)r��before_droprSr�r�	DropTable�
after_drop�rcrqs  r=�
drop_tablezDefaultImpl.drop_tableus��
��"�"��4�?�u�$�	#�	
�	
�	
�	
�
�
�6�#�E�*�*�+�+�+�
��!�!��4�?�u�$�	"�	
�	
�	
�	
�	
r>r�r%c�T�|�tj|����dSrf)r�rr��rcr�s  r=�create_indexzDefaultImpl.create_index~s%���
�
�6�%�e�,�,�-�-�-�-�-r>c�T�|�tj|����dSrf)r�r�SetTableCommentr�s  r=r�z DefaultImpl.create_table_comment�s%���
�
�6�)�%�0�0�1�1�1�1�1r>c�T�|�tj|����dSrf)r�r�DropTableCommentr�s  r=�drop_table_commentzDefaultImpl.drop_table_comment�s%���
�
�6�*�5�1�1�2�2�2�2�2r>�ColumnElement[Any]c�T�|�tj|����dSrf)r�r�SetColumnComment)rcr�s  r=r�z!DefaultImpl.create_column_comment�s%���
�
�6�*�6�2�2�3�3�3�3�3r>c�T�|�tj|����dSrf)r�r�	DropIndexr�s  r=�
drop_indexzDefaultImpl.drop_index�s%���
�
�6�#�E�*�*�+�+�+�+�+r>T�Union[TableClause, Table]�rows�
List[dict]�multiinsertc
�4��t|t��std���|r*t|dt��std���|jrW|D]R}|�t
j���jdi�fd�|�	��D�������SdS|rd|r+|�t
j���|���dS|D]6}|�t
j���jdi|�����5dSdS)Nz
List expectedrzList of dictionaries expectedc	���i|]I\}}|t|tj��s'tj||�j|j���n|��JS))r�)r�r�_literal_bindparam�cr8)�.0�k�vrqs   �r=�
<dictcomp>z+DefaultImpl.bulk_insert.<locals>.<dictcomp>�sx���	�	�	�!%��1��$.� !�;�#A�$�$� #�{�=� !�1�E�G�A�J�O� � � � �"#�	�	�	r>)r|rB)
r��list�	TypeErrorr�rUr�r�_insert_inline�values�items)rcrqr�r��rows `   r=�bulk_insertzDefaultImpl.bulk_insert�s�����$��%�%�	=��O�,�,�,�
�	=�*�T�!�W�d�3�3�	=��;�<�<�<��;�	��
�
���
�
�<�K�.�u�5�5�<���	�	�	�	�),�	�	���	�	�	���
�
�
�
�
�
� �	
����J�J�#�2�5�9�9�t������� $�����
�
�D�K�6�u�=�=�D�K�K�s�K�K�����	
�	
��r>r"rCc�j�|jj�|j�����}tjd|��}g}d}|D]/}tjd|��r|}�|�|���0t|d|dd�gi��}|r�tjd|��D]y}d|vrG|�
d��\}	}
|
���|j|	���<�M|j
�|������z|S)Nz[\w\-_]+|\(.+?\)z^\(.*\)$rrz[^(),]+�=)rR�
type_compiler�processr8�lower�re�findall�match�appendrC�splitr�rGrF)rcr��
definitionrE�term_tokens�
paren_term�tokenr~�term�key�vals           r=�_tokenize_column_typez!DefaultImpl._tokenize_column_type�s*���\�/�7�7���D�D�J�J�L�L�
���/��<�<�����
��	*�	*�E��x��U�+�+�
*�"�
�
��"�"�5�)�)�)�)���A���A�B�B���R�@�@���	5��
�9�j�9�9�
5�
5���$�;�;�#�z�z�#���H�C��14�����F�M�#�)�)�+�+�.�.��K�&�&�t�z�z�|�|�4�4�4�4��
r>�inspector_params�metadata_paramsc�X�|j|jkrdSd�|jD��}d�|jg|jz��}d�|jg|jz��}|D]=}||h�|��s!|j|jh�|��rdS�>dS)NTc�&�g|]}d�|D����S)c�6�h|]}|�����SrB)r)r��ts  r=�	<setcomp>z=DefaultImpl._column_types_match.<locals>.<listcomp>.<setcomp>�s ��.�.�.�1�Q�W�W�Y�Y�.�.�.r>rB)r��batchs  r=�
<listcomp>z3DefaultImpl._column_types_match.<locals>.<listcomp>�s'��O�O�O�5�.�.��.�.�.�O�O�Or>� F)rDrN�joinrE�issubset)rcrr�synonyms�inspector_all_terms�metadata_all_termsr s       r=�_column_types_matchzDefaultImpl._column_types_match�s����"�o�&<�<�<��4�O�O�D�<N�O�O�O��!�h�h�
�
$�%�(8�(?�?�
�
��!�X�X�
�
#�$��'=�=�
�
���	�	�E�#�%7�8�A�A�%�H�H�
� �'��&�M��h�u�o�o�
��t�t�	
�
�ur>�inspected_params�meta_paramsc�t�t|j��t|j��kr|j|jkrdSt|j��t|j��kr|j|jkrdSd�|j�����}d�|j�����}|jD]_}t
j||��}t
j||��}|r1|r/|�d��|�d��krdS�`dS)aWe want to compare column parameters. However, we only want
        to compare parameters that are set. If they both have `collation`,
        we want to make sure they are the same. However, if only one
        specifies it, dont flag it for being less specific
        Fr"rT)	�lenrErFr#rrOr�search�group)rcr)r*�insp�meta�reg�mi�mms        r=�_column_args_matchzDefaultImpl._column_args_match�s'��
��"�#�#�s�+;�+B�'C�'C�C�C��"�&6�&=�=�=��5�
�� �!�!�S�)9�)>�%?�%?�?�?�� �$4�$9�9�9��5��x�x�(�/�0�0�6�6�8�8���x�x��*�+�+�1�1�3�3���(�	�	�C���3��%�%�B���3��%�%�B��
�b�
�R�X�X�a�[�[�B�H�H�Q�K�K�7�7��u�u���tr>�inspector_column�metadata_columnc��|�|��}|�|��}|�||��sdS|�||��sdSdS)z�Returns True if there ARE differences between the types of the two
        columns. Takes impl.type_synonyms into account between retrospected
        and metadata types
        TF)rr(r4)rcr5r6rrs     r=�compare_typezDefaultImpl.compare_typesm�� �5�5�6F�G�G���4�4�_�E�E���'�'�(8�/�J�J�	��4��&�&�'7��I�I�	��4��ur>c��||kSrfrB)rcr5r6�rendered_metadata_default�rendered_inspector_defaults     r=�compare_server_defaultz"DefaultImpl.compare_server_default s��*�-F�F�Fr>�conn_uniques�Set[UniqueConstraint]�conn_indexes�
Set[Index]�metadata_unique_constraints�metadata_indexesc��dSrfrB)rcr=r?rArBs     r=�correct_for_autogen_constraintsz+DefaultImpl.correct_for_autogen_constraints)s	��	
�r>c�b�|jj|jurt|d|��|d<dSdS)N�expr)r8�_type_affinityr)rc�existing�existing_transfer�new_types    r=�cast_for_batch_migratez"DefaultImpl.cast_for_batch_migrate2sC���=�'�x�/F�F�F�(,�!�&�)�8�)�)��f�%�%�%�G�Fr>rFr�is_server_defaultc�R�dddd�i}t|jdd|ji|����S)z�Render a SQL expression that is typically a server default,
        index expression, etc.

        .. versionadded:: 1.0.11

        r�TF)r_�
include_tablerRrB)r1r�rR)rcrFrLr�r�s     r=�render_ddl_sql_exprzDefaultImpl.render_ddl_sql_expr8sT��
��u�M�M�
�
���D�L�
�
���
�(2�
�
�
�
�	
r>�	inspectorrrc��|jSrf)�autogen_column_reflect)rcrPs  r=�_compat_autogen_column_reflectz*DefaultImpl._compat_autogen_column_reflectKs���*�*r>�conn_fks�Set[ForeignKeyConstraint]�metadata_fksc��dSrfrB)rcrTrVs   r=�correct_for_autogen_foreignkeysz+DefaultImpl.correct_for_autogen_foreignkeysNs	��
	
�r>c��dS)z�A hook that is attached to the 'column_reflect' event for when
        a Table is reflected from the database during the autogenerate
        process.

        Dialects can elect to modify the information gathered here.

        NrB)rcrPrq�column_infos    r=rRz"DefaultImpl.autogen_column_reflectUrtr>c��dS)z�A hook called when :meth:`.EnvironmentContext.run_migrations`
        is called.

        Implementations can set up per-migration-run state here.

        NrBrvs r=�start_migrationszDefaultImpl.start_migrations^rtr>c�@�|�d|jz��dS)z�Emit the string ``BEGIN``, or the backend-specific
        equivalent, on the current connection context.

        This is used in offline mode and typically
        via :meth:`.EnvironmentContext.begin_transaction`.

        �BEGINN�rlr�rvs r=�
emit_beginzDefaultImpl.emit_beginfs&��	
���7�T�%<�<�=�=�=�=�=r>c�@�|�d|jz��dS)z�Emit the string ``COMMIT``, or the backend-specific
        equivalent, on the current connection context.

        This is used in offline mode and typically
        via :meth:`.EnvironmentContext.begin_transaction`.

        �COMMITNr_rvs r=�emit_commitzDefaultImpl.emit_commitps&��	
���8�d�&=�=�>�>�>�>�>r>�type_objr)�autogen_contextr+�Union[str, Literal[False]]c��dS)NFrB)rcrdres   r=�render_typezDefaultImpl.render_typezs	���ur>c��ttj||tj����\}}t	|dd��}t	|dd��}t|��t|��kr|�d��|�|j��||t|��pt|��t|��kfS)N�always)	�_compare_identity_optionsr�_identity_attrs�Identity�getattrrV�add�difference_updaterQ)rc�metadata_identity�inspector_identity�diff�ignored�meta_always�inspector_alwayss       r=�_compare_identity_defaultz%DefaultImpl._compare_identity_defaults���2��'���� �"�"�	
�
�
��g��/��4�@�@��"�#5�x��F�F�������%5� 6� 6�6�6��H�H�X�������t�9�:�:�:�

����J�J�M�$�0�1�1�T�:L�5M�5M�M�

�	
r>�Tuple[Any, ...]c�>�td�|jD����S)Nc3�$K�|]}|jV��dSrf�rg)r��cols  r=�	<genexpr>z/DefaultImpl.create_index_sig.<locals>.<genexpr>�s$����7�7�#�S�X�7�7�7�7�7�7r>)r�r�r�s  r=�create_index_sigzDefaultImpl.create_index_sig�s!���7�7���7�7�7�7�7�7r>c
��d�|D��}t|��D]i}|j|vr�tj|��}|rGt	jd|j�d|j�dtj�d���|�|���jdS)Nc��i|]
}|j|��SrBr{)r�r�s  r=r�z8DefaultImpl._skip_functional_indexes.<locals>.<dictcomp>�s��@�@�@�a����@�@�@r>z@autogenerate skipping metadata-specified expression-based index z
; dialect z under SQLAlchemy z6 can't reflect these indexes so they can't be compared)	rrgr�is_expression_indexrr�r7�sqlalchemy_version�discard)rcrBr?�conn_indexes_by_name�idx�iexs      r=�_skip_functional_indexesz$DefaultImpl._skip_functional_indexes�s���@�@�<�@�@�@���(�)�)�	.�	.�C��x�/�/�/���1�#�6�6�C��
.��	�F��x�F�F�-1�-=�F�F�#.�"@�F�F�F����!�(�(��-�-�-��	.�	.r>)rRrrSrTrUrVrWrXrYrZr[r5r\r])rRrr\rd)rr1r\r])rmr-r\rV)rpr,rqr&r\r])r\rT)
rxryrzr{r|r}r~r5r\rrf)r�ryrzr{r\r])NFNNNNFNNNNN) r�r1r�r1r�rXr�r�rgr�r�r�rr�r�rXr�r�r�r�r�r�r�r�r�rXr�rXr�rr\r])r�r1r�r�rr�r\r])r�r1r�r�rr�r\r])r�rr\r])r�r#r\r])r�r1r�r�rr�r\r])rqr&r\r])r�r%r\r])r�r�r\r])T)rqr�r�r�r�rVr\r])r�r"r\rC)rrCrrCr\rV)r)rCr*rCr\rV)r5r�r6r"r\rV)
r=r>r?r@rAr>rBr@r\r])F)rFrrLrVr�rr\r1)rPrr\r)rTrUrVrUr\r])r\r])rdr)rer+r\rf)r�r%r\rx)7r?r@rA�__doc__r7rWr�rN�__annotations__rOrQr9�classmethodrhrlrors�propertyrwr�
immutabledictr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrr(r4r8r<rDrKrOrSrXrRr\r`rcrhrwr~r�rBr>r=rIrIEs)�������
�
��K�����,5�y�+A�*C�M�C�C�C�C�&(��(�(�(�(�-9��9�9�9�9�����4�$�$�$��[�$�#�#�#�#�
����	�	�	�	������X��7;�&(�!3��!3�!5�!5�(�(�(�(�(�Z7;�+�+�+�+�+�$(�@E�"�&*� $�(,�8=�*.�.2�<@�,0�15�n�n�n�n�n�h59�	F�F�F�F�F�!%�	G�G�G�G�G�4�4�4�4�1�1�1�1�59�	
�
�
�
�
�3�3�3�3�.
�
�
�
�.�.�.�.�2�2�2�2�3�3�3�3�4�4�4�4�,�,�,�,�!�	$�$�$�$�$�L$�$�$�$�L����,����B���� G�G�G�
�
�
�
����>C�
�
�
�
�
�&+�+�+�+�
�
�
�
��������>�>�>�>�?�?�?�?�����

�
�
�:8�8�8�8�.�.�.�.�.r>rI)�	metaclassc� �t��}t��}|D]l}t||d��}t||d��}t||d��}	|	|kr1||kr|�|���W|�|���m||fSrf)�setrnro)
�
attributes�metadata_io�inspector_io�
default_iors�ignored_attr�attr�
meta_value�
default_value�
conn_values
          r=rkrk�s����5�5�D��5�5�L������[�$��5�5�
��
�D�$�7�7�
��\�4��6�6�
���#�#��]�*�*�� � ��&�&�&�&������������r>)>�
__future__r�collectionsrr�typingrrrrr	r
rrr
rr�
sqlalchemyrrr�rrrrr�sqlalchemy.enginerr�sqlalchemy.engine.cursorr�sqlalchemy.engine.reflectionr�sqlalchemy.sql.elementsrr r!�sqlalchemy.sql.schemar"r#r$r%r&r'�sqlalchemy.sql.selectabler(�sqlalchemy.sql.type_apir)r*�autogenerate.apir+�operations.batchr,r-r8r/r:r�rCrIrkrBr>r=�<module>r�s���"�"�"�"�"�"�"�"�"�"�"�"�"�	�	�	�	������������������������������������������������������� � � � � � ��������������������������������������������7�������������,�,�,�,�,�,�)�)�)�)�)�)�5�5�5�5�5�5�6�6�6�6�6�6�5�5�5�5�5�5�5�5�5�5�5�5�3�3�3�3�3�3�,�,�,�,�,�,�0�0�0�0�0�0�:�:�:�:�:�:�+�+�+�+�+�+�+�+�+�+�+�+�6�6�6�6�6�6�5�5�5�5�5�5�2�2�2�2�2�2�$�$�$�$�$�$�1�1�1�1�1�1�1�1�1�1�1�1�6�6�6�6�6�6�
�
�
�
�
�t�
�
�
�(*��)�)�)�)�	��H�D�D�D�	E�	E��j	.�j	.�j	.�j	.�j	.�H�j	.�j	.�j	.�j	.�Z����r>

Hacked By AnonymousFox1.0, Coded By AnonymousFox