
    hjp                       U d dl mZ d dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dlm
Z
 d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ erd dlmZ d dlmZ d dl m!Z! d dl m"Z" d d l#m$Z$ d d!l%m&Z& d d"l'm(Z( d d#l'm)Z) d d$l*m+Z+ d d%l*m,Z, d d&l-m.Z. d d'l-m/Z/ d d(l-m0Z0 d d)l-m1Z1 d d*l-m2Z2 d d+l-m3Z3 d d,l4m5Z5 d d-l6m7Z7 dd.lm8Z8 dd/l9m:Z: dd0l;m<Z< dd1l;m=Z=  ej|                  e?      Z@ G d2 d3eA      ZBi ZCd4eDd5<    G d6 d7eB8      ZE G d9 d:e      ZF	 	 	 	 	 	 	 	 d<d;ZGy)=    )annotationsN)Any)Callable)Dict)Iterable)List)Mapping)
NamedTuple)Optional)Sequence)Set)Tuple)Type)TYPE_CHECKING)Union)castschema)text   )_autogen)base)_constraint_sig)ComparisonResult   )util)sqla_compat)Literal)TextIO)
Connection)Dialect)CursorResult)	Inspector)ClauseElement)
Executable)ColumnElement)quoted_name)Column)
Constraint)ForeignKeyConstraint)Index)Table)UniqueConstraint)TableClause)
TypeEngine)_ServerDefault)AutogenContext)ApplyBatchImpl)BatchOperationsImplc                       e Zd Z	 	 	 	 	 	 ddZy)ImplMetac                V    t         j                  | |||      }d|v r| t        |d   <   |S )N__dialect__)type__init___impls)cls	classnamebasesdict_newtypes        [/var/www/html/retail-simulation-api/retail/lib/python3.12/site-packages/alembic/ddl/impl.pyr9   zImplMeta.__init__@   s4     --Yu=E!+.F5'(    N)r<   strr=   zTuple[Type[DefaultImpl]]r>   Dict[str, Any])__name__
__module____qualname__r9    rA   r@   r5   r5   ?   s#    		 (	 		rA   r5   zDict[str, Type[DefaultImpl]]r:   c                     e Zd ZU dZdZdZdZddhfZded<   d	Z	d
ed<   dZ
ded<   	 	 	 	 	 	 	 	 	 	 	 	 	 	 d=dZed>d       Zd?dZ	 	 	 	 d@dZ	 	 	 	 	 	 dAdZedBd       Zdd	 ej(                         f	 	 	 	 	 	 	 	 	 dCdZ	 dD	 	 	 	 	 dEdZ	 	 	 	 	 	 	 	 	 	 	 	 dF	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dGdZ	 dD	 	 	 	 	 	 	 dHdZ	 dD	 	 	 	 	 	 	 dIdZdJdZdKdZ	 dD	 	 	 	 	 	 	 dLdZdMdZdMdZdNd ZdMd!Z dMd"Z!dOd#Z"dNd$Z#	 dP	 	 	 	 	 	 	 dQd%Z$dRd&Z%	 	 	 	 	 	 dSd'Z&	 	 	 	 	 	 dTd(Z'	 	 	 	 	 	 dUd)Z(d* Z)	 	 	 	 	 	 	 	 	 	 dVd+Z*d, Z+	 dW	 	 	 	 	 	 	 dXd-Z,dYd.Z-	 	 	 	 	 	 dZd/Z.d0 Z/d[d1Z0d[d2Z1d[d3Z2	 	 	 	 	 	 d\d4Z3d5 Z4	 	 	 	 	 	 d]d6Z5	 	 	 	 	 	 d^d7Z6	 	 	 	 	 	 d^d8Z7	 	 	 	 	 	 d_d9Z8	 	 	 	 	 	 d`d:Z9d; Z:	 	 	 	 	 	 dad<Z;y)b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DECIMALzTuple[Set[str], ...]type_synonymsrG   zSequence[str]type_arg_extract)orderon_nullzTuple[str, ...]identity_attrs_ignorec                    || _         || _        || _        |j                  dd      | _        || _        i | _        || _        ||| _        | j                  r"| j                  st        j                  d      y y )Nliteral_bindsFz3Can't use literal_binds setting without as_sql mode)dialect
connectionas_sqlgetrT   output_buffermemocontext_optstransactional_ddlr   CommandError)selfrU   rV   rW   r\   rY   r[   s          r@   r9   zDefaultImpl.__init__i   s     $)--ouE*	((%6D";;''I   rA   c                (    t         |j                     S N)r:   name)r;   rU   s     r@   get_by_dialectzDefaultImpl.get_by_dialect   s    gll##rA   c                    | j                   J | j                   j                  |dz          | j                   j                          y )Nz

)rY   writeflush)r^   r   s     r@   static_outputzDefaultImpl.static_output   s>    !!---  /  "rA   c                     y)zReturn 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.

        FrG   )r^   batch_ops     r@   requires_recreate_in_batchz&DefaultImpl.requires_recreate_in_batch   s     rA   c                     y)zperform 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.

        NrG   )r^   
batch_impltables      r@   prep_table_for_batchz DefaultImpl.prep_table_for_batch       rA   c                    | j                   S r`   )rV   r^   s    r@   bindzDefaultImpl.bind   s    rA   Nc                t   t        |t              rt        |      }| j                  r|s|rt	        d      | j
                  r)t        |t        j                        st        ddi      }ni }t        rt        |t              sJ  |j                  dd| j                  i|}| j                  t        |      j                  dd      j                         | j                   z          y | j"                  }|J |r |j$                  di |}|rt        |t&              sJ ||fz  }|j)                  ||      S )	Nz+Execution arguments not allowed with as_sqlrT   T)compile_kwargsrU   	z    rG   )
isinstancerB   r   rW   	ExceptionrT   r   
DDLElementdictr   r$   compilerU   rf   replacestripcommand_terminatorrV   execution_optionstupleexecute)r^   	constructr}   multiparamsparams
compile_kwcompiledconns           r@   _execzDefaultImpl._exec   s/    i%YI;;f MNN !!*6,,+ "/41HI

!)];;;(y((LLLHH%%dF399;))* ??D### -t--B0AB!+u555y(<<	;77rA   c                (    | j                  ||       y r`   )r   )r^   sqlr}   s      r@   r   zDefaultImpl.execute   s    
 	

3)*rA   c                   ||t        j                  dd       |,| j                  t        j                  ||||||||
             |duri }t        j                  ||      rt        j                  }n<t        j                  ||      rt        j                  }| |d<   nt        j                  }| j                   ||||f|||||
d|       |,| j                  t        j                  ||||||||
             |	dur,| j                  t        j                  |||	|||||
             |,| j                  t        j                  |||||||             y y )NzBautoincrement and existing_autoincrement only make sense for MySQL   )
stacklevel)r   existing_typeexisting_server_defaultexisting_nullableexisting_commentFimpl)r   r   r   r   )r   warnr   r   ColumnNullabler   _server_default_is_computedComputedColumnDefault_server_default_is_identityIdentityColumnDefaultColumnDefault
ColumnTypeColumnComment
ColumnName)r^   
table_namecolumn_namenullableserver_defaultra   type_r   autoincrementcommentr   r   r   r   existing_autoincrementkwcls_s                    r@   alter_columnzDefaultImpl.alter_column   s   $ $(>(JII,
 JJ##!"/,C&7%5	 &B 66 7 1188 7 11!6
))JJ"
 ""/,C&7%5
 
 JJ!"/,C&7%5	 %JJ""!"/,C&7%5	 JJ!"/,C&7
 rA   c                R    | j                  t        j                  |||             y Nr   )r   r   	AddColumn)r^   r   columnr   s       r@   
add_columnzDefaultImpl.add_columnH  s     	

4>>*fVDErA   c                R    | j                  t        j                  |||             y r   )r   r   
DropColumn)r^   r   r   r   r   s        r@   drop_columnzDefaultImpl.drop_columnP  s     	

4??:vfEFrA   c                    |j                   |j                  |       r%| j                  t        j                  |             y y r`   )_create_ruler   r   AddConstraintr^   consts     r@   add_constraintzDefaultImpl.add_constraintY  s8    %););D)AJJv++E23 *BrA   c                L    | j                  t        j                  |             y r`   )r   r   DropConstraintr   s     r@   drop_constraintzDefaultImpl.drop_constraint]  s    

6((/0rA   c                R    | j                  t        j                  |||             y r   )r   r   RenameTable)r^   old_table_namenew_table_namer   s       r@   rename_tablezDefaultImpl.rename_table`  s"     	

^^FK	
rA   c                b   |j                   j                  || j                  d|        | j                  t	        j
                  |             |j                   j                  || j                  d|        |j                  D ]&  }| j                  t	        j                  |             ( | j                  j                  xr | j                  j                   }|j                  }|r|r| j                  |       |j                  D ]%  }|j                  }|s|s| j                  |       ' y NF)
checkfirst_ddl_runner)dispatchbefore_createrV   r   r   CreateTableafter_createindexesCreateIndexrU   supports_commentsinline_commentsr   create_table_commentcolumnscreate_column_comment)r^   rl   indexwith_commentr   r   s         r@   create_tablezDefaultImpl.create_tablej  s    $$4??u$ 	% 	
 	

6%%e,-##4??u$ 	$ 	
 ]]EJJv))%01 # LL**O4<<3O3O/O 	 --|%%e,mmFnnG<**62 $rA   c                    |j                   j                  || j                  d|        | j                  t	        j
                  |             |j                   j                  || j                  d|        y r   )r   before_droprV   r   r   	DropTable
after_dropr^   rl   s     r@   
drop_tablezDefaultImpl.drop_table  sc    ""4??u$ 	# 	
 	

6##E*+!!4??u$ 	" 	
rA   c                N    | j                  t        j                  |fi |       y r`   )r   r   r   r^   r   r   s      r@   create_indexzDefaultImpl.create_index  s    

6%%e2r23rA   c                L    | j                  t        j                  |             y r`   )r   r   SetTableCommentr   s     r@   r   z DefaultImpl.create_table_comment  s    

6))%01rA   c                L    | j                  t        j                  |             y r`   )r   r   DropTableCommentr   s     r@   drop_table_commentzDefaultImpl.drop_table_comment  s    

6**512rA   c                L    | j                  t        j                  |             y r`   )r   r   SetColumnComment)r^   r   s     r@   r   z!DefaultImpl.create_column_comment  s    

6**623rA   c                N    | j                  t        j                  |fi |       y r`   )r   r   	DropIndexr   s      r@   
drop_indexzDefaultImpl.drop_index  s    

6##E0R01rA   c                   t        |t              st        d      |rt        |d   t              st        d      | j                  r|D ]  }| j                   t        j                  |      j                  di |j                         D ci c]Q  \  }}|t        |t        j                        s/t        j                  |||j                  |   j                        n|S c}}        y |re|r'| j                  t        j                  |      |       y |D ]6  }| j                   t        j                  |      j                  di |       8 y y c c}}w )NzList expectedr   zList of dictionaries expected)r   )r   rG   )ru   list	TypeErrorrx   rW   r   r   _insert_inlinevaluesitems_literal_bindparamcr8   )r^   rl   rowsmultiinsertrowkvs          r@   bulk_insertzDefaultImpl.bulk_insert  sH    $%O,,*T!Wd3;<<;;

<K..u5<<  ),			 )41  $. !;#A#A$  +== !1EGGAJOO  "## )4	   JJ#2259t    $

DK66u=DDKsK  $ 	s   AEc                R   | j                   j                  j                  |j                        j	                         }t        j                  d|      }g }d }|D ],  }t        j                  d|      r|}|j                  |       . t        |d   |dd  g i       }|rt        j                  d|      D ]o  }d|v r@|j                  d      \  }	}
|
j                         |j                  |	j                         <   G|j                  j                  |j                                q |S )Nz[\w\-_]+|\(.+?\)z^\(.*\)$r   r   z[^(),]+=)rU   type_compilerprocessr8   lowerrefindallmatchappendParamssplitr{   kwargsargs)r^   r   
definitiontokensterm_tokens
paren_termtokenr   termkeyvals              r@   _tokenize_column_typez!DefaultImpl._tokenize_column_type  s    \\//77DJJL
 JJ':JG!#
ExxU+"
""5)	  AABR@

9j9$;#zz#HC14FMM#))+.KK&&tzz|4 : rA   c           	        |j                   |j                   k(  ry| j                  D cg c]   }|D ch c]  }|j                          c}" }}}dj                  |j                   g|j                  z         }dj                  |j                   g|j                  z         }|D ]>  }||hj                  |      s(|j                   |j                   hj                  |      s> y yc c}w c c}}w )NT F)token0rN   r   joinr   issubset)r^   inspector_paramsmetadata_paramsbatchtsynonymsinspector_all_termsmetadata_all_termss           r@   _column_types_matchzDefaultImpl._column_types_match  s     ""o&<&<<<@<N<NO<N5.1QWWY.<NO!hh$$%(8(?(??
 !XX##$'='==
 E#%78AA%H ''&&M huoM    /Os   	C-C(
C-(C-c                   t        |j                        t        |j                        k(  r|j                  |j                  k7  ryt        |j                        t        |j                        k(  r|j                  |j                  k7  rydj                  |j                        j	                         }dj                  |j                        j	                         }| j
                  D ]Y  }t        j                  ||      }t        j                  ||      }|s2|s5|j                  d      |j                  d      k7  sY y y)a  We 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  r   T)	lenr   r   r  r   rO   r   searchgroup)r^   inspected_paramsmeta_paramsinspmetaregmimms           r@   _column_args_matchzDefaultImpl._column_args_match  s    ""#s+;+B+B'CC""&6&=&==   !S)9)>)>%??  $4$9$99xx(//0668xx**+113((C3%B3%BbRXXa[BHHQK7 ) rA   c                    | j                  |      }| j                  |      }| j                  ||      sy| j                  ||      syy)zReturns True if there ARE differences between the types of the two
        columns. Takes impl.type_synonyms into account between retrospected
        and metadata types
        TF)r  r  r  )r^   inspector_columnmetadata_columnr
  r  s        r@   compare_typezDefaultImpl.compare_type  sQ      556FG44_E''(8/J&&'7IrA   c                    ||k7  S r`   rG   )r^   r  r   rendered_metadata_defaultrendered_inspector_defaults        r@   compare_server_defaultz"DefaultImpl.compare_server_default.  s     *-FFFrA   c                     y r`   rG   )r^   conn_uniquesconn_indexesmetadata_unique_constraintsmetadata_indexess        r@   correct_for_autogen_constraintsz+DefaultImpl.correct_for_autogen_constraints7  s     	rA   c                n    |j                   j                  |j                  urt        |d   |      |d<   y y )Nexpr)r8   _type_affinityr   )r^   existingexisting_transfernew_types       r@   cast_for_batch_migratez"DefaultImpl.cast_for_batch_migrate@  s:    ==''x/F/FF(,!&)8)f% GrA   c                X    ddd}t        |j                  | j                  |            S )zdRender a SQL expression that is typically a server default,
        index expression, etc.

        TF)rT   include_table)rU   rs   )rB   ry   rU   )r^   r-  is_server_defaultr   r   s        r@   render_ddl_sql_exprzDefaultImpl.render_ddl_sql_exprF  s/     (,eD
LLjLI
 	
rA   c                    | j                   S r`   )autogen_column_reflect)r^   	inspectors     r@   _compat_autogen_column_reflectz*DefaultImpl._compat_autogen_column_reflectT  s    ***rA   c                     y r`   rG   )r^   conn_fksmetadata_fkss      r@   correct_for_autogen_foreignkeysz+DefaultImpl.correct_for_autogen_foreignkeysW  s    
 	rA   c                     y)zA 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.

        NrG   )r^   r9  rl   column_infos       r@   r8  z"DefaultImpl.autogen_column_reflect^  rn   rA   c                     y)zA hook called when :meth:`.EnvironmentContext.run_migrations`
        is called.

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

        NrG   rp   s    r@   start_migrationszDefaultImpl.start_migrationsg  rn   rA   c                @    | j                  d| j                  z          y)zEmit 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rf   r|   rp   s    r@   
emit_beginzDefaultImpl.emit_begino  s     	7T%<%<<=rA   c                @    | j                  d| j                  z          y)zEmit 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`.

        COMMITNrE  rp   s    r@   emit_commitzDefaultImpl.emit_commity  s     	8d&=&==>rA   c                     yNFrG   )r^   type_objautogen_contexts      r@   render_typezDefaultImpl.render_type  s     rA   c                T   t        ||t        j                         dh      \  }}t        |dd       }t        |dd       }t	        |      t	        |      k7  r|j                  d       |j                  | j                         ||t	        |      xs t	        |      t	        |      k7  fS )Nalways)skip)_compare_identity_optionsr   Identitygetattrbooladddifference_updaterR   )r^   metadata_identityinspector_identitydiffignoredmeta_alwaysinspector_alwayss          r@   _compare_identity_defaultz%DefaultImpl._compare_identity_default  s     2  "	
g /4@"#5xF%5 66HHXt99:
 JM$01T:L5MM
 	
rA   c                r    t        |j                        }t        |j                        }||k7  rd| d| S y )Nzunique=z to unique=)rU  unique)r^   metadata_indexreflected_indexconn_uniquemeta_uniques        r@   _compare_index_uniquez!DefaultImpl._compare_index_unique  sB     ?112>001+%[M[MBBrA   c                2    t        j                  d| |fi |S )NTr   from_constraintr^   
constraintoptss      r@   _create_metadata_constraint_sigz+DefaultImpl._create_metadata_constraint_sig  s     ..tT:NNNrA   c                2    t        j                  d| |fi |S rK  rg  ri  s      r@    _create_reflected_constraint_sigz,DefaultImpl._create_reflected_constraint_sig  s     ..udJO$OOrA   c                :   g }| j                  ||      }|r|j                  |       | j                  |      }| j                  |      }t	        j
                  |      sJ t	        j
                  |      sJ ||fD ]/  }|j                  st        j                  d|j                         1 |j                  |j                  k7  r+|j                  d|j                   d|j                          |rt        j                  |      S t        j                         S )zCompare two indexes by comparing the signature generated by
        ``create_index_sig``.

        This method returns a ``ComparisonResult``.
        zGenerating approximate signature for index %s. The dialect implementation should either skip expression indexes or provide a custom implementation.expression  to )re  r   rl  rn  r   is_index_sighas_expressionslogwarningr   column_namesr   	DifferentEqual)r^   ra  rb  msg
unique_msgm_sigr_sigsigs           r@   compare_indexeszDefaultImpl.compare_indexes  s    //O

 JJz"44^D55oF$$U+++$$U+++ %<C"": II   !3!33JJe001e6H6H5IJ #--c22#))++rA   c                    | j                  |      }| j                  |      }|j                  }|j                  }||k7  rt        j                  d| d|       S t        j
                         S )a  Compare two unique constraints by comparing the two signatures.

        The arguments are two tuples that contain the unique constraint and
        the signatures generated by ``create_unique_constraint_sig``.

        This method returns a ``ComparisonResult``.
        rp  rq  )rl  rn  unnamedr   rw  rx  )r^   metadata_constraintreflected_constraintmetadata_tupreflected_tupmeta_sigconn_sigs          r@   compare_unique_constraintz%DefaultImpl.compare_unique_constraint  s     ;;
 == 
  '' ((x#--hZtH:6  $))++rA   c           
     T   |D ci c]  }|j                   | }}t        |      D ]{  }|j                   |v rt        j                  |      }|s*t	        j
                  d|j                   d| j                  dt        j                   d       |j                  |       } y c c}w )Nz@autogenerate skipping metadata-specified expression-based index z
; dialect z under SQLAlchemy z6 can't reflect these indexes so they can't be compared)	ra   r   r   is_expression_indexr   r   r7   sqlalchemy_versiondiscard)r^   r*  r(  r   conn_indexes_by_nameidxiexs          r@   _skip_functional_indexesz$DefaultImpl._skip_functional_indexes  s    3?@<a	<@()Cxx//11#6C		.xxl*T-=-=,@ A""-"@"@!A BFF !((- *  As   B%c                &    |j                  di       S )Ndialect_options)rX   )r^   reflected_objectkinds      r@    adjust_reflected_dialect_optionsz,DefaultImpl.adjust_reflected_dialect_options  s      ##$5r::rA   )rU   r!   rV   Optional[Connection]rW   rU  r\   Optional[bool]rY   zOptional[TextIO]r[   rC   returnNone)rU   r!   r  zType[DefaultImpl])r   rB   r  r  )rh   r3   r  rU  )rk   r2   rl   r,   r  r  )r  r  )
r   Union[Executable, str]r}   Optional[dict[str, Any]]r   zSequence[dict]r   rC   r  zOptional[CursorResult]r`   )r   r  r}   r  r  r  )NFNNNNFNNNNN) r   rB   r   rB   r   r  r   z%Union[_ServerDefault, Literal[False]]ra   Optional[str]r   Optional[TypeEngine]r   r  r   r  r   z$Optional[Union[str, Literal[False]]]r   r  r   r  r   zOptional[_ServerDefault]r   r  r   r  r   r   r  r  )r   rB   r   Column[Any]r   !Optional[Union[str, quoted_name]]r  r  )r   rB   r   r  r   r  r  r  )r   r   r  r  )r   r)   r  r  )r   rB   r   zUnion[str, quoted_name]r   r  r  r  )rl   r,   r  r  )r   r+   r   r   r  r  )r   zColumnElement[Any]r  r  )T)rl   zUnion[TableClause, Table]r   z
List[dict]r   rU  r  r  )r   r(   r  r   )r
  r   r  r   r  rU  )r  r   r  r   r  rU  )r  r  r   r(   r  rU  )
r'  Set[UniqueConstraint]r(  
Set[Index]r)  r  r*  r  r  r  )F)r-  r$   r5  rU  r   r   r  rB   )r9  r#   r  r   )r<  Set[ForeignKeyConstraint]r=  r  r  r  )r  r  )rL  r/   rM  r1   r  zUnion[str, Literal[False]])ra  r+   rb  r+   r  r  )rj  z_autogen._Crk  r   r  z_constraint_sig[_autogen._C])ra  r+   rb  r+   r  r   )r  r-   r  r-   r  r   )r  rC   r  rB   r  rC   )<rD   rE   rF   __doc__r7   r\   r|   rN   __annotations__rO   rR   r9   classmethodrb   rf   ri   rm   propertyrq   r   immutabledictr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r!  r%  r+  r2  r6  r:  r>  r8  rB  rF  rI  rN  r^  re  rl  rn  r~  r  r  r  rG   rA   r@   rI   rI   O   s   
 K,5y+A*CM'C&(m(
 .B?A ) 	
 * ( % 
4 $ $#
+		(	16			   7;&(!3!3!3!5'8)'8 4'8 $	'8
 '8 
 '8X 7;+#+ 4+ 
	+ $(@E"&* $(,8=*..2<@,015nn n !	n
 >n n $n n &n 6n (n ,n ":n *n !/n  !n" 
#nh 59	FF F 2	F
 
F !%	GG G 	G 
G41 59	

 0
 2	

 

3.
42342 !	$($ $ 	$
 
$L&P &9?	, &5;	B +>D	 G+ ! &;	
 % 
 >C
!
6:
JM
	
++ 0 
	>?"5C	#

8#6;	O%O/2O	%O
P%P/2P	%P
),), ), 
	),V,-, /, 
	,8."; .;69;	;rA   rI   )	metaclassc                  6    e Zd ZU ded<   ded<   ded<   ded<   y)	r   rB   r  z	List[str]r   r   zDict[str, str]r   N)rD   rE   rF   r  rG   rA   r@   r   r     s    K
OrA   r   c           
        t        j                  |       }t        j                  |      }t               t               	 	 	 	 	 	 	 	 dfd} |||t        j                  |      t        |      j                  |             t         j                  r6 |t        | di       t        |di       |j                  t        |di              fS )Nc                   t        |      j                  
      D ]c  }| j                  |      }|j                  |      }||k7  s+|j                  |      }||k(  r	j                  |       Sj                  |       e y r`   )set
differencerX   rV  )	meta_dict	insp_dictdefault_dictattrsattr
meta_value
insp_valuedefault_valuerZ  ignored_attrrQ  s           r@   check_dictsz._compare_identity_options.<locals>.check_dicts,  ss     J))$/D"t,J"t,JZ' , 0 0 6. $$T*HHTN 0rA   dialect_kwargs)r  Mapping[str, Any]r  r  r  r  r  zIterable[str])r   _get_identity_options_dictr  unionidentity_has_dialect_kwargsrT  r  )	metadata_ioinspector_io
default_iorQ  meta_dinsp_dr  rZ  r  s	      `   @@r@   rR  rR    s     33K@F33LAF5D5L#$#$# (# 	#  ..z:F&!	 .. 	K!126L"2B7%%L"2B7		
 rA   )r  -Union[schema.Identity, schema.Sequence, None]r  r  r  z'Union[schema.Identity, schema.Sequence]rQ  zSet[str])H
__future__r   loggingr   typingr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   
sqlalchemyr   r   r    r   r   r   r   r   r   r   r   sqlalchemy.enginer    r!   sqlalchemy.engine.cursorr"   sqlalchemy.engine.reflectionr#   sqlalchemy.sqlr$   r%   sqlalchemy.sql.elementsr&   r'   sqlalchemy.sql.schemar(   r)   r*   r+   r,   r-   sqlalchemy.sql.selectabler.   sqlalchemy.sql.type_apir/   r0   autogenerate.apir1   operations.batchr2   r3   	getLoggerrD   rt  r8   r5   r:   r  rI   r   rR  rG   rA   r@   <module>r     s	   #  	                     8 :  ,)56,)53,0:++652$116g!
t 
 (*$ )D;H D;NZ />/?/ 8/ 	/rA   