
    i              	         U d dl mZ d dl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$ ddl#m%Z% ddl&m'Z' ddl"m(Z( erNd 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$l1m2Z2 d d%l3m4Z4 d d&l5m6Z6 d d'l5m7Z7 d d(l5m8Z8 d d)l5m9Z9 dd*l#m:Z:  ej;        e<          Z=dyd1Z> e"j?        d23          Z@dzd6ZAe@B                    d7          d{d:            ZCd|d@ZD e"jE        ejF        ejG        ejH        ejI        ejH        ejI        dA          ZJdBeKdC<   d}dKZLd~dMZMddOZNejO        ddW            ZP edXeeeef         Y          ZQe@B                    dZ          dd]            ZRd^ ZSe@B                    d_          ddf            ZTe@B                    d_          ddh            ZUe@B                    d_          ddi            ZVddlZWddoZXddpZYddqZZdr Z[e@B                    d_          ddt            Z\e@B                    d_          ddv            Z]e@B                    dZ          ddw            Z^e@B                    dZ          ddx            Z_dS )    )annotationsN)Any)cast)Dict)Iterator)Mapping)Optional)Set)Tuple)TYPE_CHECKING)TypeVar)Union)event)inspectschema)text)types)
expression)ForeignKeyConstraint)Index)UniqueConstraint)
OrderedSet   )util)is_index_sig)	is_uq_sig)ops)sqla_compat)Literal)	Inspector)quoted_name)
TextClause)Column)Table)AutogenContext)DefaultImpl)AlterColumnOp)MigrationScript)ModifyTableOps)
UpgradeOps)_constraint_sigautogen_contextr&   migration_scriptr)   returnNonec                    |j         d         }|j        d         }t          | |           |                    |           d S )N)upgrade_ops_listdowngrade_ops_list_produce_net_changesreverse_into)r-   r.   upgrade_opsdowngrade_opss       b/var/www/html/crypto-bot/backend/venv/lib/python3.11/site-packages/alembic/autogenerate/compare.py_populate_migration_scriptr:   ;   sH     #3B7K$7;M+666]+++++    T)uselistr7   r+   c                     j         }|J  j                            dd          }t          |          }|j        j        }|rat          |                                          }|                    d           |                    |           |	                    d            nd h} fd|D             } j        J t                              d j        j                   ||           d S )Ninclude_schemasFinformation_schemac                B    h | ]}                     |d i           |S r   run_name_filters).0sr-   s     r9   	<setcomp>z'_produce_net_changes.<locals>.<setcomp>]   s@       o>>q(BOO	  r;   r   )
connectionoptsgetr   dialectdefault_schema_namesetget_schema_namesdiscardaddcomparatorsdispatchname)r-   r7   rF   r>   	inspectordefault_schemaschemass   `      r9   r5   r5   H   s    !+J!!!%*../@%HHO":..I';N i002233,---'''D&     G "...?#:#?@@g    r;   r   rT   $Union[Set[None], Set[Optional[str]]]c                   	  j         }t                      } j        j        } j        j        }|D ]m	t          |                    	                    }	|k    r |                     j        j        g          }|                     	fd|D                        nt          d  j	        D                                           ||fg          }t          ||||            d S )Nr   c              3  R   K   | ]!}                     |d di          |fV  "dS )tableschema_nameNrA   )rC   tnamer-   rY   s     r9   	<genexpr>z&_autogen_for_tables.<locals>.<genexpr>}   s^        
  
//w <  
%  
  
  
  
  
  
r;   c                *    g | ]}|j         |j        fS  )r   rQ   )rC   rX   s     r9   
<listcomp>z'_autogen_for_tables.<locals>.<listcomp>   s!    OOO%,
	#OOOr;   )rR   rK   migration_contextversion_table_schemaversion_tableget_table_names
differenceupdater   sorted_tables_compare_tables)
r-   r7   rT   rR   conn_table_namesr`   ra   tablesmetadata_table_namesrY   s
   `        @r9   _autogen_for_tablesrj   g   sD     )I7:uu 	)>  $5CM 
 
Y..k.BBCC...&& 2@A F 	  
  
  
  
  
 
  
  
 	
 	
 	
 	
 &OO1NOOO j'7899      r;   rg   rK   ri   rR   r!   c           
     	   |j         j        j        t          fd|D                       }fdt	          ||          D             }|}|                    |           D ]\  }}|r|d|n|}	|||f         }
                    |
|ddd           r|j                            t          j	        
                    |
                     t                              d|	           t          j        |g |          }t                              d          |||d |
           |                                s|j                            |           t#          j                    }|                     |          D ]\\  }}t#          j        ||          }	|	|j        v }t#          j        |||          }|sHt-          j        |dj        j                            |                     t7          j        ||                               ||dd	d           rt          j        |g |          }t                              d          ||||d            |                                s|j                            |           |j                            t          j        
                    |                     t                              d
|	           ^|                     |          }t#          j                    }i }|D ]\  }}t#          j        ||          }	|	|j        v }t#          j        |||          }|sHt-          j        |dj        j                            |                     t7          j        ||           ||||f<   t?          |d           D ]\  }}|pd }|r|d|n|}	|||f         }
|j        |	         }                    |
|dd|          rt          j        |g |          }tA          ||||
||          5  t                              d          |||||
           d d d            n# 1 swxY w Y   |                                s|j                            |           d S )Nc                .    g | ]\  }}|k    r|nd |fS Nr]   )rC   r   rZ   rS   s      r9   r^   z#_compare_tables.<locals>.<listcomp>   s@     	
 	
 	
 //VVT5A	
 	
 	
r;   c                ^    i | ])\  }\  }}|j         t          j        ||                   *S r]   )table_key_to_table	sa_schema_get_table_key)rC   no_dflt_schemar   rZ   r-   s       r9   
<dictcomp>z#_compare_tables.<locals>.<dictcomp>   sM        ,NOVU 	:$UF33
  r;   .rX   FzDetected added table %rr   column_reflectTzDetected removed table %rc                &    | d         pd| d         fS )Nr       r]   )xs    r9   <lambda>z!_compare_tables.<locals>.<lambda>   s    1Q4:2qt:L r;   )key)!bindrI   rJ   r   ziprc   run_object_filtersr   appendCreateTableOp
from_tableloginfor*   rO   rP   is_emptyrp   MetaDatarq   rh   r%   r   listenr_   impl_compat_autogen_column_reflectr   _reflect_tableDropTableOpintersectionsorted_compare_columns)rg   ri   rR   r7   r-   #metadata_table_names_no_dflt_schematname_to_tablerD   rZ   rQ   metadata_tablemodify_table_opsremoval_metadataexiststexisting_tablesexisting_metadataconn_column_info
conn_tablerS   s       `              @r9   rf   rf      s    ^+?N +5	
 	
 	
 	
!5	
 	
 	
+ +'    03/1E0
 0
	  N ?(334DEE 9 95'(3!!!UU##e'E
3--E7E4
 
 	9 O""!,,^<<   HH.555"1%AFFF  ))    $,,.. 9&&'7888 )++$//0DEE 8 85'q11)00OE#3A>>> 
	5L 16..    &y!444--atLL 
	8"1%AFFF  ))!11eQ   $,,.. 9&&'7888O""3?#=#=a#@#@AAAHH0$777&334HIIO!*,,# ) )5'q11*11OE#4Q??? 		5L 16..y99   &y!444'(!U$$?0L0LMMM 9 95I'(3!!!UU##e'E
3&-d3
--E7E:
 
 	9  #1%AFFF!     $$W--#$"                $ $,,.. 9&&'7888;9 9s   (QQ	Q	)ascdescnulls_first
nulls_last
nullsfirst	nullslastzMapping[str, Any]_IndexColumnSortingOpsr   r'   paramsDict[str, Any]r   r%   Optional[Index]c                   g }|                     d          }t          |d                   D ]~\  }}|$d|v sJ |d         |         }t          |          }n|}|j        |         }|r-||v r)||         D ] }	|	t          v rt	          |	         |          }!|                    |           t          j        |d         g|R |d         |d|                     |d          }
d|v r|d         |
j	        d<   |
S )	Ncolumn_sortingcolumn_namesexpressionsrQ   unique)r   _tableindexduplicates_constraint)
rH   	enumerater   cr   r   rp   r    adjust_reflected_dialect_optionsr   )r   r   r   exprssortingnumcol_namerQ   itemoperatorixs              r9   _make_indexr   (  sT    35Ejj)**G"6.#9::  X F****-(-D::DDD<)D 	Btw#DM B B5551(;DAADT	v
	
 
 h	
 

 
/
/
@
@
 
B &((+12I+J'(Ir;   r   c                    t          j        fd|d         D             d|d         i|                     |d          }d|v r|d         |j        d<   |S )Nc                *    g | ]}j         |         S r]   r   rC   cnamer   s     r9   r^   z+_make_unique_constraint.<locals>.<listcomp>L  s     	B	B	B%*,u
	B	B	Br;   r   rQ   unique_constraintduplicates_index)rp   r   r   r   )r   r   r   uqs     ` r9   _make_unique_constraintr   H  s     
	#	B	B	B	B6.+A	B	B	B
F^
 
/
/8K
L
L
 
B
 V##&,-?&@"#Ir;   r   c           
        | d         | d         r| d         d|                      di           }t          j        fd| d         D             fd| d         D             |                     d	          |                     d
          |                     d          |                     d          | d                   }                    |           |S )Nreferred_tablereferred_schemart   optionsc                *    g | ]}j         |         S r]   r   r   s     r9   r^   z%_make_foreign_key.<locals>.<listcomp>`  s     HHHe	HHHr;   constrained_columnsc                    g | ]	}d |
S )rt   r]   )rC   nrZ   s     r9   r^   z%_make_foreign_key.<locals>.<listcomp>a  s$    BBB!EEE11	BBBr;   referred_columnsonupdateondelete
deferrable	initiallyrQ   )r   r   r   r   rQ   )rH   rp   r   append_constraint)r   r   r   constrZ   s    `  @r9   _make_foreign_keyr   V  s     #$E  =!"3444ee<jjB''G*HHHH&1F*GHHHBBBBv.@'ABBBZ((Z((;;|,,++k**F^  E   '''Lr;   Optional[str]rZ   Union[quoted_name, str]r   r   r*   Iterator[None]c           
   #     K    r dn}t          d |j        D                       }d |j        D             }	 fd|j        D             }
|                    |
          D ]|}                    |	|         |ddd           r[|j                            t          j                             |	|                              t          	                    d||           }|
                    |
          D ]}|	|         }|j        |         }                    ||dd|          s1t	          j        |           }t                              d          | |||           |                                r|j                            |           d V  t          |
                              |          D ]}                    |j        |         |dd	d           r`|j                            t          j                             |j        |                              t          	                    d
||           d S )Nrt   c              3  2   K   | ]}|j         	|j        V  d S rm   systemrQ   rC   r   s     r9   r[   z#_compare_columns.<locals>.<genexpr>x  s?       $ $$	$ $ $ $ $ $r;   c                ,    i | ]}|j         	|j        |S r]   r   r   s     r9   rs   z$_compare_columns.<locals>.<dictcomp>{  s3       18	  r;   c           	     ^    i | ])}                     |j        d d          !|j        |*S )column
table_namerY   )rB   rQ   )rC   r   r-   r   rZ   s     r9   rs   z$_compare_columns.<locals>.<dictcomp>  sT       ++FHU6JJ
 
	  r;   r   FzDetected added column '%s.%s'r   TzDetected removed column '%s.%s')r   r   rc   r~   r   r   AddColumnOpfrom_column_and_tablenamer   r   r   r(   rO   rP   has_changesrK   DropColumnOp)r   rZ   r   r   r   r-   rR   rQ   metadata_col_namesmetadata_cols_by_nameconn_col_namesr   colnamemetadata_colconn_colalter_column_ops   ``   `          r9   r   r   m  s      )/9fffee$$ED# $ $&($ $ $   )+         N $..~>> 	C 	C--!%(%5$
 
 	C  ''99E#8#?   
 HH4dEBBB%22>BB 9 9,W5<(11'8UH
 
 	 +E76JJJX&&	
 	
 	
 &&(( 	9 ''888	EEE^$$//0BCC 	E 	E--L$
 
 	E  '' ::E:<#6   
 HH6eDDD	E 	Er;   _C)boundrX   
modify_opsOptional[Table]c                V	   $%&'()*  j         }d u (|d u ) j        j        '|&d |j        D             }t	          |j                  }nt	                      }t	                      }t                      x}	}
d*d}	 |                              }	d* fd|	D             }	|	D ]}|                    d          rd}n# t          $ r Y nt          $ r Y nw xY w	 |                              }
 fd|
D             }
n# t          $ r Y nw xY w)rt	                      }	n'fd|	D             }	d	 'fd
|
D             D             }
|rt          |	|
|| j        '           '                    |	|
||           'fd|D             }'fd|D             }'fd|	D             }'fd|
D             } fd|                    |          D             }d |D             &d |D             %d |                    |          D             }%&fdt	          &                              %          D             }d |D             }d |D             } fd|D             }d$ ()*fd}d$ ()*fd}d% fd}t#          t	          |                              |                    D ]x}||         }t'          |          r
|j        |v r#||v rF||         \  }$t+          $fd |D                       r|j        |vr ||            |$           m ||           yt#          t	          |                              |                    D ]}||         }||v r ||         \  }$t-          |          r$}n|}n||         }t/          |          t/          |          k    r ||            ||           m|                    |          }|j        r ||||j                   |j        r;t-          |          rd!nd"} t8                              d#| |j        |j                   |j        sJ t#          t	          |                              |                    D ]}!||!         }" ||"           |D ]}#|#|vr |||#                    d S )&Nc                F    h | ]}t          |t          j                  |S r]   )
isinstancerp   r   rC   r   s     r9   rE   z/_compare_indexes_and_uniques.<locals>.<setcomp>  s;     '
 '
 '
"i899'
'
 '
 '
r;   Fr   Tc           	     T    g | ]$}                     |d          dd          "|%S )rQ   r   r   rA   )rC   r   r-   r   rZ   s     r9   r^   z0_compare_indexes_and_uniques.<locals>.<listcomp>  sT       "33vJ'#(@@   r;   r   c           	     T    g | ]$}                     |d          dd          "|%S )rQ   r   r   rA   )rC   r   r-   r   rZ   s     r9   r^   z0_compare_indexes_and_uniques.<locals>.<listcomp>  sT       "33vJ#(@@   r;   c                2    h | ]}t          |          S r]   )r   )rC   uq_defr   r   s     r9   rE   z/_compare_indexes_and_uniques.<locals>.<setcomp>  s5        (fjAA  r;   c                    h | ]}||S rm   r]   )rC   r   s     r9   rE   z/_compare_indexes_and_uniques.<locals>.<setcomp>  s,     
 
 
  	  !  r;   c              3  :   K   | ]}t          |          V  d S rm   )r   )rC   r   r   r   s     r9   r[   z/_compare_indexes_and_uniques.<locals>.<genexpr>  s@        68D"j11     r;   c                :    h | ]}                     |          S r]   _create_metadata_constraint_sigrC   r   r   s     r9   rE   z/_compare_indexes_and_uniques.<locals>.<setcomp>3  s7     ' ' ' 	,,R00' ' 'r;   c                :    h | ]}                     |          S r]   r   rC   r   r   s     r9   rE   z/_compare_indexes_and_uniques.<locals>.<setcomp>8  s4       57,,R00  r;   c                :    h | ]}                     |          S r]    _create_reflected_constraint_sigr   s     r9   rE   z/_compare_indexes_and_uniques.<locals>.<setcomp><  s4       68--b11  r;   c                :    h | ]}                     |          S r]   r   r   s     r9   rE   z/_compare_indexes_and_uniques.<locals>.<setcomp>@  s4       68--b11  r;   c                p    i | ]2}|j         	t          t          |                                        |3S r]   )is_namedr   strmd_name_to_sql_name)rC   r   r-   s     r9   rs   z0_compare_indexes_and_uniques.<locals>.<dictcomp>E  sK       :S!''88991  r;   c                    i | ]
}|j         |S r]   rQ   r   s     r9   rs   z0_compare_indexes_and_uniques.<locals>.<dictcomp>N  s    GGG!AFAGGGr;   c                    i | ]
}|j         |S r]   r  r   s     r9   rs   z0_compare_indexes_and_uniques.<locals>.<dictcomp>O  s    @@@!AFA@@@r;   c                P    i | ]#}t          j        |j                  |j        |$S r]   )r   constraint_name_stringrQ   r   s     r9   rs   z0_compare_indexes_and_uniques.<locals>.<dictcomp>P  s?       -af55	  r;   c                2    i | ]}||         |         fS r]   r]   )rC   rQ   conn_indexes_by_nameconn_uniques_by_names     r9   rs   z0_compare_indexes_and_uniques.<locals>.<dictcomp>V  s<        	#D)+?+EF  r;   c                    i | ]
}|j         |S r]   unnamedr   s     r9   rs   z0_compare_indexes_and_uniques.<locals>.<dictcomp>_  s    LLLb2:rLLLr;   c                    i | ]
}|j         |S r]   r  r   s     r9   rs   z0_compare_indexes_and_uniques.<locals>.<dictcomp>`  s)       
B  r;   c                ^    i | ])}t          j        |j        j                  !|j        |*S r]   )r   _constraint_is_namedr   rI   r  )rC   r   r-   s     r9   rs   z0_compare_indexes_and_uniques.<locals>.<dictcomp>c  sJ          /Ho-
 
 

B     r;   objr,   c                |   t          |           r                    | j        | j        ddd           rdj                            t          j                            | j                             t          	                    d| j        | j
                   d S d S t          |           rsd S srd S                     | j        | j        ddd           rdj                            t          j                            | j                             t          	                    d| j        | j
                   d S d S J )Nr   Fz!Detected added index '%r' on '%s'r   z+Detected added unique constraint %r on '%s')r   r~   r   rQ   r   r   CreateIndexOp
from_indexr   r   r   r   AddConstraintOpfrom_constraint)r  r-   is_create_tableis_drop_tabler   supports_unique_constraintss    r9   	obj_addedz/_compare_indexes_and_uniques.<locals>.obj_addeds  sk    	11	38WeT   %%c&7&B&B39&M&MNNN7H$    	  s^^ 	.   - 11	38%8%  
 %%'77	BB   AH$    
 
 5r;   c                v   t          |           r| j        rsd S                     | j        | j        ddd           r_j                            t
          j                            | j                             t          
                    d| j                   d S d S t          |           rsrd S                     | j        | j        ddd           r_j                            t
          j                            | j                             t          
                    d| j                   d S d S J )Nr   TzDetected removed index %r on %rr   z+Detected removed unique constraint %r on %r)r   	is_uniquer~   r   rQ   r   r   DropIndexOpr  r   r   r   DropConstraintOpr  )r  r-   r  r  r   r  rZ   s    r9   obj_removedz1_compare_indexes_and_uniques.<locals>.obj_removed  sg    	} %@  11	38WdD  M %%co&@&@&K&KLLL:CHeLLLLL	M M
 s^^ 	 -  11	38%8$  
 %%(88CC   AH    
 
 5r;   oldnewmsgr  c                   t          |           rt          |          sJ                     |j        |j        dd| j                  rt                              d| j        |           j                            t          j        	                    | j                             j                            t          j
        	                    |j                             d S d S t          |           rt          |          sJ                     |j        |j        dd| j                  rt                              d| j        |           j                            t          j                            | j                             j                            t          j                            |j                             d S d S J )Nr   Fz#Detected changed index %r on %r: %sr   z/Detected changed unique constraint %r on %r: %s)r   r~   r   rQ   r   r   r   r   r  r  r  r   r  r  r  )r   r!  r"  r-   r   rZ   s      r9   obj_changedz1_compare_indexes_and_uniques.<locals>.obj_changed  s   
  	$$$$$11	38WeSY  O 938UC   %%co&@&@&K&KLLL%%c&7&B&B39&M&MNNNNNO O s^^ 	S>>!!>11	38%8%   EH	   %%(88CC   %%'77	BB       5r;   c              3  8   K   | ]}j         |j         k    V  d S rm   r  )rC   meta_idxconn_idxs     r9   r[   z/_compare_indexes_and_uniques.<locals>.<genexpr>  sB          $(88     r;   r   zunique constraintz5Cannot compare %s %r, assuming equal and skipping. %s)r  r,   )r   r,   r!  r,   r"  r  ) rR   r_   r   constraintsrK   indexes	frozensetget_unique_constraintsrH   NotImplementedError	TypeErrorget_indexes_correct_for_uq_duplicates_uixrI   correct_for_autogen_constraintsunionr   r   rc   r   r  allr   typecompare_to_reflectedis_differentmessageis_skipr   r   rQ   is_equal)+r-   r   r   rZ   r   r   rR   metadata_unique_constraintsmetadata_indexesconn_uniquesconn_indexes+unique_constraints_duplicate_unique_indexesr   metadata_unique_constraints_sigmetadata_indexes_sigconn_unique_constraintsconn_indexes_sigmetadata_names
conn_namesdoubled_constraintsconn_uniques_by_sigmetadata_uniques_by_sigunnamed_metadata_uniquesr  r  r$  removed_nameconn_objconn_uqexisting_namemetadata_obj
comparisonthing
added_namer  uq_sigr'  r	  r
  r   r  r  r  s+   `````                               @@@@@@@r9   _compare_indexes_and_uniquesrQ    s     )I D(O"d*M,1D !'
 '
$0'
 '
 '
#
 ~566&)ee#55"+++-L<"'27/	G$;;f <  L +/'     &  L # G G66,-- GBF?G# # 	 	 	D 	 	 	 D		$	$00f 1  L     &  LL # 	 	 	D	  	55LL    *  L

 
    <H  
 
 
 3 
&'#	
 	
 	
 	((#	  ' ' ' '-' ' '#
   ;K     <H     <H  
   0667KLL  N HG/FGGG@@/?@@@ (../?@@  J    ,--:: 
 
   ML4KLLL !@         1               B          @# # # # # # # #J s:99.IIJJ " "l+h	" $<<<000 3L AGX    $8    &
 O+BBBG$$$H%%%K!!!!N 3 3 @ @ L LMM "+ "+%m4/// 3M BGXL)) ##"!-0H>>T,////K!!!Il####%::8DDJ& +HlJ4FGGGG# +  ,H55NGG;N  KM&	    "*****S00;;JGGHH  
Z(	#* 8 8,,,I.v67778 8s*   C	 	
C!	C! C!%D 
DDc                r   fd|D             }d |D             }fd|D             }fd|D             }	d |D             }
d | D             }|D ]c}||vr>                     ||                   j        |vr|                     ||                    D||	vr|                    |
|                    dd S )Nc                >    g | ]}t          j        |          |fS r]   )r   _get_constraint_final_namerC   consrI   s     r9   r^   z2_correct_for_uq_duplicates_uix.<locals>.<listcomp>.  s;        
	/g	>	>E  r;   c                    h | ]	\  }}||
S rm   r]   )rC   rQ   rV  s      r9   rE   z1_correct_for_uq_duplicates_uix.<locals>.<setcomp>3  s(       td6F6F6F6Fr;   c                N    h | ]!\  }}|                     |          j        "S rm   )r   r  )rC   rQ   rV  r   s      r9   rE   z1_correct_for_uq_duplicates_uix.<locals>.<setcomp>7  s;       D$< 	,,T22:<<r;   c                H    h | ]}|j         	t          j        |          S r]   )r   r   rT  rU  s     r9   rE   z1_correct_for_uq_duplicates_uix.<locals>.<setcomp>=  s>       ;.tW==  r;   c                ,    i | ]}|j         	|j        |S r]   )r   rQ   rC   rV  s     r9   rs   z2_correct_for_uq_duplicates_uix.<locals>.<dictcomp>E  s#    MMMMTYMMMr;   c                8    i | ]}|j         d          |j        |S )r   )r   rQ   r[  s     r9   rs   z2_correct_for_uq_duplicates_uix.<locals>.<dictcomp>G  s:       9'(	4  r;   )r   r  rM   )r@  r<  r9  r:  rI   r   metadata_cons_namesmetadata_uq_namesunnamed_metadata_uqsmetadata_ix_namesconn_ix_namesuqs_dupe_indexesoverlaps       ``       r9   r/  r/    sh   &   /  
 2     -     $   NMMMMM +   $ 
9 
9+++55$W- +, ,
 (//0@0IJJJ---  w!7888
9 
9r;   r   r   r(   r   r   Column[Any]r   c                l   |j         }|j         }||_        ||urt          j        |j        |j                  rt          j        |          st          j        |j        |j                  rt                              d||           d S ||_	        t                              d|rdnd||           d S d S )Nz3Ignoring nullable change on identity column '%s.%s'zDetected %s on column '%s.%s'NULLzNOT NULL)
nullableexisting_nullabler   _server_default_is_computedserver_default_nullability_might_be_unset_server_default_is_identityr   r   modify_nullable)	r-   r   r   rZ   r   r   r   metadata_col_nullableconn_col_nullables	            r9   _compare_nullablerp  Z  s     )1 )(9O% 5553+X-D 	 7EE		 7 /1H 	 HHE     /DO+HH//?Z	    ' 65r;   r"   c                    |j         j        |u rd|j        d<   d S |j        du rd|j        d<   d S |j        du rd|j        d<   d S d S )NTautoincrementF)rX   _autoincrement_columnkwrr  )r-   r   r   rZ   r   r   r   s          r9   _setup_autoincrementru    sr     /<??.2?+++		#t	+	+.2?+++		#u	,	,.3?+++ 
-	,r;   c                |   |j         }||_        |j         }|j        t          j        u rt
                              d||           d S |j        t          j        u rt
                              d||           d S | j                            ||          }	|	r'||_	        t
                              d||||           d S d S )Nz3Couldn't determine database type for column '%s.%s'z:Column '%s.%s' has no type within the model; can't comparez-Detected type change from %r to %r on '%s.%s')
r3  existing_type_type_affinitysqltypesNullTyper   r   r_   _compare_typemodify_type)
r-   r   r   rZ   r   r   r   	conn_typemetadata_typeisdiffs
             r9   r{  r{    s     I$-O! %M8#444D	
 	
 	

 	#x'888K	
 	
 	

 	.<<, F  
&3#;	
 	
 	
 	
 	

 
r;   metadata_defaultOptional[Any]c                   t          | t          j                  rRt          | j        t                    r| j        } n0t	          | j                            |j        ddi                    } t          | t                    r| S d S )Nliteral_bindsTrI   compile_kwargs)r   rp   DefaultClauseargr  compilerI   )r  r-   s     r9   "_render_server_default_for_comparer    s     "I$;<< 	&*C00 	/3" $,,+3$3T#: -      "C(( tr;   sqltextr  c                R    t          j        dd|                                           S )zwe want to warn if a computed sql expression has changed.  however
    we don't want false positives and the warning is not that critical.
    so filter out most forms of variability from the SQL text.

    z[ \(\)'\"`\[\]]rw   )resublower)r  s    r9   _normalize_computed_defaultr    s%     6$b'2288:::r;   c                   t          t          t          j        |j                  j                            | j        ddi                    }t          |          }t          |j        t          j                  rJt          |j        j                            | j        ddi                    }|d}nt          |          }nd}||k    rt          ||           d S d S )Nr  Tr  rw   )r  r   rp   Computedrj  r  r  rI   r  r   _warn_computed_not_supported)	r-   r   r   rZ   r   r   r   rendered_metadata_defaultrendered_conn_defaults	            r9   _compare_computed_defaultr    s    !$Y!<==EMM#++T2 	N 	
 	
! ! !<!! ! ()9+=>> # ##+33'/ /6 4  !
 !
 !($&!!$?%% %!! !# $999$UE22222 :9r;   c                <    t          j        d| d|d           d S )NzComputed default on rt   z cannot be modified)r   warn)rZ   r   s     r9   r  r  	  s'    IIuuuMNNNNNr;   c                j    | j         j        }|                    |j        |j                  \  }}	}
||
fS rm   )r_   r   _compare_identity_defaultrj  )r-   r   r   rZ   r   r   r   r   diffignored_attris_alters              r9   r  r    sB     ,1D#'#A#A#X%<$ $ D, >r;   Optional[bool]c           	        |j         }|j         }||dS t          j        |          r#t          j        sdS t	          | ||||||          S t          j        |          rt          ||           dS t          j        ||          rU||_        t          | ||||||          \  }	}
|
r3||_	        |	r*t                              d||t          |	                     n|t          ||           }|rt          t          |          j        j        nd }||_        | j                            ||||          }|r#||_	        t                              d||           d S )NFzIDetected server default on column '%s.%s': identity options attributes %sz)Detected server default on column '%s.%s')rj  r   ri  has_computed_reflectionr  r  rl  existing_server_defaultr  modify_server_defaultr   r   r   r  r   r   r  r   r_   _compare_server_default)r-   r   r   rZ   r   r   r   r  conn_col_defaultr  r  r  r  is_diffs                 r9   r  r    s    $2.$4$<u./?@@  2 	5 *##  
 ./?@@ $UE222u.*  *P 3C/2
 
h  		4DO1 54LL   %Go%
 %
!
 5END&''+00$ 	 3C/!3KK%!	
 
  	P4DO1HH@%OOO4r;   Optional[Literal[False]]c                    | j         J | j         j        sd S |j        }|j        }||dS ||_        ||k    r#||_        t
                              d||           d S )NFzDetected column comment '%s.%s')rI   supports_commentscommentexisting_commentmodify_commentr   r   )	r-   r   r   rZ   r   r   r   metadata_commentconn_col_comments	            r9   _compare_column_commentr  v  s     "..."4 t#+'$4$<u'7O$+++)9&2E5AAA4r;   c                r    |d S  j         }d |j        D             } fd|                              D             }fd|D             }	 j        j         j        j                            |	|           fd|D             }
fd|	D             }|r#d|d         v rd	 |D             }d
 |
D             }nd |D             }d |
D             }d |
D             }d |D             } fd} fd}t          |                              |          D ]7}||         ||vr)j        |v r|j                 j	        nd } ||           8t          |                              |          D ]7}||         ||vr)j        |v r|j                 j	        nd } ||           8d S )Nc                F    h | ]}t          |t          j                  |S r]   )r   rp   r   )rC   fks     r9   rE   z(_compare_foreign_keys.<locals>.<setcomp>  s;       b)899
  r;   c           	     T    g | ]$}                     |d          dd          "|%S )rQ   foreign_key_constraintr   rA   )rC   r  r-   r   rZ   s     r9   r^   z)_compare_foreign_keys.<locals>.<listcomp>  sT       ++vJ$ 88
 

  r;   r   c                0    h | ]}t          |          S r]   )r   )rC   r   r   s     r9   rE   z(_compare_foreign_keys.<locals>.<setcomp>  s3        	%,,  r;   c                :    h | ]}                     |          S r]   r   rC   r  r   s     r9   rE   z(_compare_foreign_keys.<locals>.<setcomp>  s4       57,,R00  r;   c                :    h | ]}                     |          S r]   r   r  s     r9   rE   z(_compare_foreign_keys.<locals>.<setcomp>  s4       68--b11  r;   r   r   c                    i | ]
}|j         |S r]   r  r   s     r9   rs   z)_compare_foreign_keys.<locals>.<dictcomp>  s    >>>A19a>>>r;   c                    i | ]
}|j         |S r]   r  r   s     r9   rs   z)_compare_foreign_keys.<locals>.<dictcomp>  s    FFFqy!FFFr;   c                    i | ]
}|j         |S r]   unnamed_no_optionsr   s     r9   rs   z)_compare_foreign_keys.<locals>.<dictcomp>  s    IIIq1/IIIr;   c                    i | ]
}|j         |S r]   r  r   s     r9   rs   z)_compare_foreign_keys.<locals>.<dictcomp>  s*     
 
 
()A !
 
 
r;   c                ,    i | ]}|j         	|j         |S rm   r  r   s     r9   rs   z)_compare_foreign_keys.<locals>.<dictcomp>  s*       qv/A/A/A/Ar;   c                ,    i | ]}|j         	|j         |S rm   r  r   s     r9   rs   z)_compare_foreign_keys.<locals>.<dictcomp>  s#    NNNa16;M;M;M;Mr;   c                                        | j        | j        dd|          rj                            t          j                            j                             t                              dd	                    | j
                  d	                    | j                  | j        r
d| j        z  nd| j                   d S d S )Nr  Fz1Detected added foreign key (%s)(%s) on table %s%s, %s.rw   )r~   r   rQ   r   r   CreateForeignKeyOpr  r   r   joinsource_columnstarget_columnssource_schemasource_table)r  
compare_tor-   r   r   s     r9   _add_fkz&_compare_foreign_keys.<locals>._add_fk  s    --Isx!95*
 
 	  ''&66u{CC   HHC		#,--		#,---0->F)))B     	 	r;   c                                        | j        | j        dd|          rj                            t          j                            | j                             t                              dd	                    | j
                  d	                    | j                  | j        r
d| j        z  nd| j                   d S d S )Nr  Tz3Detected removed foreign key (%s)(%s) on table %s%sr  r  rw   )r~   r   rQ   r   r   r  r  r   r   r  r  r  r  r  )r  r  r-   r   s     r9   
_remove_fkz)_compare_foreign_keys.<locals>._remove_fk  s    --Isx!94
 
 	  ''$44SY??   HHE		#,--		#,---0->F)))B     	 	r;   )
rR   r(  get_foreign_keysr_   r   correct_for_autogen_foreignkeysrK   rc   rQ   r   )r-   r   r   rZ   r   r   rR   metadata_fksconn_fks_listconn_fksmetadata_fks_sigconn_fks_sigconn_fks_by_sigmetadata_fks_by_sigmetadata_fks_by_nameconn_fks_by_namer  r  removed_sigr  	added_sigr   r   s   `````                @@r9   _compare_foreign_keysr    s%    ^3)I  ,  L     ,,U6,BB  M   "  H
 ,1D %*JJ,     ;G     <D  L  
mA&666>>>>>FF5EFFF JILIII
 
-=
 
 
 +   ON<NNN            $ ?++667JKK * *,111 :!555 %UZ066 
 Juj))),--88II ' '	#I.O++ :!111 !,22 
 GE:&&&' 'r;   c                   | j         J | j         j        sd S ||d S |j        	|j        d S |j        =|j        6|j                            t          j        ||j        |                     d S |j        |j        k    r<|j                            t          j        ||j        |j        |                     d S d S )N)r  r   )rI   r  r  r   r   DropTableCommentOpCreateTableCommentOp)r-   r   r   rZ   r   r   s         r9   _compare_table_commentr    s
    "..."4  ^3!n&<&D%**<*H##"
(:6  	
 	
 	
 	
 	

 
	:#5	5	5##$&!+!3	  	
 	
 	
 	
 	
 
6	5r;   )r-   r&   r.   r)   r/   r0   )r-   r&   r7   r+   r/   r0   )r-   r&   r7   r+   rT   rU   r/   r0   )rg   rK   ri   rK   rR   r!   r7   r+   r-   r&   r/   r0   )r   r'   r   r   r   r%   r/   r   )r   r'   r   r   r   r%   r/   r   )r   r   r   r%   r/   r   )r   r   rZ   r   r   r%   r   r%   r   r*   r-   r&   rR   r!   r/   r   )r-   r&   r   r*   r   r   rZ   r   r   r   r   r   r/   r0   )r-   r&   r   r(   r   r   rZ   r   r   r   r   rd  r   rd  r/   r0   )r-   r&   r   r(   r   r   rZ   r   r   r"   r   rd  r   rd  r/   r0   )r  r  r-   r&   r/   r   )r  r  r/   r  )r-   r&   r   r(   r   r   rZ   r  r   r  r   rd  r   rd  r/   r0   )rZ   r  r   r  r/   r0   )r-   r&   r   r(   r   r   rZ   r   r   r   r   rd  r   rd  r/   r  )r-   r&   r   r(   r   r   rZ   r   r   r"   r   rd  r   rd  r/   r  )r-   r&   r   r*   r   r   rZ   r   r   r%   r   r%   r/   r0   )r-   r&   r   r*   r   r   rZ   r   r   r   r   r   r/   r0   )`
__future__r   
contextlibloggingr  typingr   r   r   r   r   r	   r
   r   r   r   r   
sqlalchemyr   r   r   rp   r   r   ry  sqlalchemy.sqlr   sqlalchemy.sql.schemar   r   r   sqlalchemy.utilr   rw   r   ddl._autogenr   r   
operationsr   r   r    sqlalchemy.engine.reflectionr!   sqlalchemy.sql.elementsr"   r#   r$   r%   alembic.autogenerate.apir&   alembic.ddl.implr'   alembic.operations.opsr(   r)   r*   r+   r,   	getLogger__name__r   r:   
DispatcherrO   r5   dispatch_forrj   rf   immutabledictr   r   r   r   r   __annotations__r   r   r   contextmanagerr   r   rQ  r/  rp  ru  r{  r  r  r  r  r  r  r  r  r  r]   r;   r9   <module>r     s   # " " " " " "      				                                                                                     * * * * * *       ( ( ( ( ( ( % % % % % % 6 6 6 6 6 6 ' ' ' ' ' ' 2 2 2 2 2 2 & & & & & &       ' ' ' ' ' ' $ $ $ $ $ $             /666666333333222222,,,,,,++++++777777,,,,,,444444666666555555111111...... g!!, , , , dod+++   > (##' ' ' $#'TG9 G9 G9 G9T -?D,>~!, * +) 	- 	-  	 	 	 	   @      . EE EE EE EEP WT/1EuLMNNN '""^8 ^8 ^8 #"^8B<9 <9 <9~ (##% % % $#%P (##4 4 4 $#4" (##'
 '
 '
 $#'
T   &; ; ; ;)3 )3 )3 )3XO O O O  " (##T T T $#Tn (##   $#6 '""x' x' x' #"x'v '"""
 "
 "
 #""
 "
 "
r;   