U
    ^g%i                  
   @  s  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r 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$l1m2Z2 d d%l3m4Z4 d d&l5m6Z6 d d'l5m7Z7 d d(l5m8Z8 d d)l5m9Z9 dd*l#m:Z: e;e<Z=d+d,d-d.d/d0Z>e"j?d1d2Z@d+d3d-d4d5d6ZAe@Bd7d+d3d8d-d9d:d;ZCd<d<d=d3d+d-d>d?d@ZDe"EejFejGejHejIejHejIdAZJdBeKdC< dDdEdFdGdHdIdJZLdDdEdFdKdHdLdMZMdEdFdNdOdPdQZNejOdRdSdFdFdTd+d=dUdVdWdXZPedYeeeef dZZQe@Bd[d+dTdRdSd\d\d-d]d^d_ZRd`da ZSe@Bdbd+dcdRdSdSddddd-dedfdgZTe@Bdbd+dcdRdSdhddddd-dedidjZUe@Bdbd+dcdRdSdSddddd-dedkdlZVdmd+dRdndodpZWdqdqdrdsdtZXd+dcdRdqdqddddd-dedudvZYdqdqd-dwdxdyZZdzd{ Z[e@Bdbd+dcdRdSdSddddd|ded}d~Z\e@Bdbd+dcdRdSdhddddddeddZ]e@Bd[d+dTdRdSdFdFd-dddZ^e@Bd[d+dTdRdSd\d\d-ddd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_sigr%   r(   None)autogen_contextmigration_scriptreturnc                 C  s,   |j d }|jd }t| | || d S )N)Zupgrade_ops_listZdowngrade_ops_list_produce_net_changesZreverse_into)r-   r.   upgrade_opsZdowngrade_ops r3   [/var/www/html/api-medvista/venv/lib/python3.8/site-packages/alembic/autogenerate/compare.py_populate_migration_script;   s    


r5   T)Zuselistr*   )r-   r2   r/   c                   s    j }|d k	st jdd}t|}|jj}|r`t| }|	d |	| |
d  nd h} fdd|D } jd k	sttd jj || d S )Ninclude_schemasFZinformation_schemac                   s   h | ]}  |d i r|qS r   run_name_filters).0sr-   r3   r4   	<setcomp>]   s     z'_produce_net_changes.<locals>.<setcomp>r   )
connectionAssertionErroroptsgetr   dialectdefault_schema_namesetZget_schema_namesdiscardaddcomparatorsdispatchname)r-   r2   r=   r6   	inspectordefault_schemaschemasr3   r;   r4   r1   H   s(    


  r1   r   z$Union[Set[None], Set[Optional[str]]])r-   r2   rK   r/   c           	        s    j }t } jj} jj}|D ]Ft|jd}|krL| jjg}| fdd|D  q tdd  j	D ||fg}t
||||  d S )Nr   c                 3  s(   | ] }  |d dir|fV  qdS )tableschema_nameNr7   )r9   tnamer-   rM   r3   r4   	<genexpr>}   s     z&_autogen_for_tables.<locals>.<genexpr>c                 S  s   g | ]}|j |jfqS r3   )r   rH   )r9   rL   r3   r3   r4   
<listcomp>   s     z'_autogen_for_tables.<locals>.<listcomp>)rI   rC   migration_contextversion_table_schemaversion_tableZget_table_names
differenceupdater   Zsorted_tables_compare_tables)	r-   r2   rK   rI   conn_table_namesrS   rT   tablesmetadata_table_namesr3   rO   r4   _autogen_for_tablesg   s4    
r[   rC   r    )rX   rZ   rI   r2   r-   r/   c              
     s  |j jjtfdd|D } fddt||D }|}|| D ]\}}|r^d||f n|}	|||f }
 |
|ddd rF|jtj	
|
 td|	 tj|g |d	}td |||d |
 | sF|j| qFt }| |D ]\}}t||}	|	|jk}tj|||d	}|sHt|d
 jj| t||  ||ddd rtj|g |d	}td ||||d  | s|j| |jtj
| td|	 q| |}t }i }|D ]f\}}t||}	|	|jk}tj|||d	}|s,t|d
 jj| t|| ||||f< qt|dd dD ]\}}|p\d }|rpd||f n|}	|||f }
|j|	 } |
|dd|rLtj|g |d	}t ||||
| | td |||||
 W 5 Q R X | sL|j| qLd S )Nc                   s$   g | ]\}}| kr|nd |fqS Nr3   )r9   r   rN   )rJ   r3   r4   rQ      s   z#_compare_tables.<locals>.<listcomp>c                   s(   i | ] \}\}}| j t|| qS r3   )Ztable_key_to_table	sa_schema_get_table_key)r9   Zno_dflt_schemar   rN   r;   r3   r4   
<dictcomp>   s
   
 
z#_compare_tables.<locals>.<dictcomp>%s.%srL   FzDetected added table %rr   Zcolumn_reflectTzDetected removed table %rc                 S  s   | d p
d| d fS )Nr       r3   )xr3   r3   r4   <lambda>       z!_compare_tables.<locals>.<lambda>)key)!bindrA   rB   r   ziprU   run_object_filtersr   appendZCreateTableOpZ
from_tableloginfor)   rF   rG   Zis_emptyr]   ZMetaDatar^   rY   r$   r   listenrR   implZ_compat_autogen_column_reflectr   Z_reflect_tableZDropTableOpintersectionsorted_compare_columns)rX   rZ   rI   r2   r-   Z#metadata_table_names_no_dflt_schemaZtname_to_tabler:   rN   rH   metadata_tablemodify_table_opsZremoval_metadataexiststZexisting_tablesZexisting_metadataZconn_column_info
conn_tabler3   )r-   rJ   r4   rW      s    



     

	     




    		
rW   )ascdescZnulls_firstZ
nulls_last
nullsfirst	nullslastzMapping[str, Any]_IndexColumnSortingOpsr&   zDict[str, Any]r$   zOptional[Index])rn   paramsrv   r/   c                 C  s   g }| d}t|d D ]x\}}|d krLd|ks6t|d | }t|}n|}|j| }|r||kr|| D ]}	|	tkrnt|	 |}qn|| qtj|d f||d |d| 	|d}
d|kr|d |
j
d< |
S )	NZcolumn_sortingcolumn_namesZexpressionsrH   unique)r~   _tableindexZduplicates_constraint)r@   	enumerater>   r   cr{   rj   r]   r    adjust_reflected_dialect_optionsrl   )rn   r|   rv   ZexprsZsortingnumZcol_namerH   itemoperatorixr3   r3   r4   _make_index(  s6    



r   r   c                   sL   t j fdd|d D d|d i| |d}d|krH|d |jd< |S )Nc                   s   g | ]} j | qS r3   r   r9   cnamerv   r3   r4   rQ   L  s     z+_make_unique_constraint.<locals>.<listcomp>r}   rH   unique_constraintduplicates_index)r]   r   r   rl   )rn   r|   rv   uqr3   r   r4   _make_unique_constraintH  s    
r   r   )r|   rv   r/   c              	     s   | d | d r d| d f |  di }tj fdd| d D fdd| d	 D | d
| d| d| d| d d} | |S )NZreferred_tableZreferred_schemar`   optionsc                   s   g | ]} j | qS r3   r   r   r   r3   r4   rQ   `  s     z%_make_foreign_key.<locals>.<listcomp>Zconstrained_columnsc                   s   g | ]}d  |f qS )r`   r3   )r9   n)rN   r3   r4   rQ   a  s     Zreferred_columnsonupdateondelete
deferrable	initiallyrH   )r   r   r   r   rH   )r@   r]   r   Zappend_constraint)r|   rv   r   constr3   )rv   rN   r4   _make_foreign_keyV  s    

r   zOptional[str]zUnion[quoted_name, str]r)   zIterator[None])r   rN   rv   rr   rs   r-   rI   r/   c              	   #  sz  rdf n}t dd |jD }dd |jD }	 fdd|jD }
||
D ]D} |	| |ddd rZ|jtj|	|  t	d	|| qZ|
|
D ]h}|	| }|j| } ||dd|sqtj|d
}td |||| | r|j| qd V  t|
|D ]L} |j| |ddd r(|jtj|j|  t	d|| q(d S )Nr`   c                 s  s   | ]}|j s|jV  qd S r\   systemrH   r9   r   r3   r3   r4   rP   x  s     z#_compare_columns.<locals>.<genexpr>c                 S  s   i | ]}|j s|j|qS r3   r   r   r3   r3   r4   r_   {  s      z$_compare_columns.<locals>.<dictcomp>c              	     s*   i | ]"}  |jd dr|j|qS )columnZ
table_namerM   )r8   rH   r   r-   r   rN   r3   r4   r_     s      r   FzDetected added column '%s.%s'r   TzDetected removed column '%s.%s')r   r   rU   ri   r   rj   ZAddColumnOpZfrom_column_and_tablenamerk   rl   ro   r'   rF   rG   Zhas_changesrC   ZDropColumnOp)r   rN   rv   rr   rs   r-   rI   rH   Zmetadata_col_namesZmetadata_cols_by_nameZconn_col_namesr   Zcolnamemetadata_colconn_colalter_column_opr3   r   r4   rq   m  s    
      
    
      rq   _C)boundrL   zOptional[Table])r-   
modify_opsr   rN   rv   rr   r/   c           $        sd   j }d k|d k jj|d k	rBdd |jD }t|j}nt }t }t  }	}
d
d}d k	rTz|j	d}	d
W n& tk
r   Y nB t	k
r   Y n0X  	fdd|	D }	|	D ]}|
drd}qz|j	d}
W n tk
r   Y nX  	fd	d|
D }
r"t }	nfd
d|	D }	dd fdd|
D D }
|rnt|	|
|| j |	|
|| fdd|D }fdd|D }fdd|	D }fdd|
D } fdd||D }dd |D dd |D dd ||D }fddtD }dd |D }dd |D } fdd|D }dd 
fdd}dd 
fdd }ddd!d" fd#d$}tt||D ]~}|| }t|r|j|krqnT||kr0|| \}tfd%d|D r8|j|kr8|| | n|| qtt||D ]}|| }||kr|| \}t|r}n|}n|| }t|t|kr|| || n^||}|jr||||j n<|jrt|rd&nd'} td(| |j|j n|jsNt qNtt||D ]}!||! }"||" q&|D ]}#|#|krB|||#  qBd S ))Nc                 S  s   h | ]}t |tjr|qS r3   )
isinstancer]   r   r9   r   r3   r3   r4   r<     s   z/_compare_indexes_and_uniques.<locals>.<setcomp>Fr   Tc              	     s(   g | ] }  |d  ddr|qS )rH   r   r   r7   r   r   r3   r4   rQ     s   z0_compare_indexes_and_uniques.<locals>.<listcomp>r   c              	     s(   g | ] }  |d  ddr|qS )rH   r   r   r7   r9   r   r   r3   r4   rQ     s   c                   s   h | ]}t | qS r3   )r   )r9   Zuq_defrv   rn   r3   r4   r<     s   c                 S  s   h | ]}|d k	r|qS r\   r3   )r9   r   r3   r3   r4   r<     s   c                 3  s   | ]}t | V  qd S r\   )r   r   r   r3   r4   rP     s    z/_compare_indexes_and_uniques.<locals>.<genexpr>c                   s   h | ]}  |qS r3   _create_metadata_constraint_sigr   rn   r3   r4   r<   3  s   c                   s   h | ]}  |qS r3   r   r   r   r3   r4   r<   8  s    c                   s   h | ]}  |qS r3    _create_reflected_constraint_sigr   r   r3   r4   r<   <  s    c                   s   h | ]}  |qS r3   r   r   r   r3   r4   r<   @  s    c                   s$   i | ]}|j rtt| |qS r3   )Zis_namedr   strZmd_name_to_sql_namer   r;   r3   r4   r_   E  s    z0_compare_indexes_and_uniques.<locals>.<dictcomp>c                 S  s   i | ]}|j |qS r3   rH   r   r3   r3   r4   r_   N  s      c                 S  s   i | ]}|j |qS r3   r   r   r3   r3   r4   r_   O  s      c                 S  s    i | ]}t |jr|j|qS r3   )r   Zconstraint_name_stringrH   r   r3   r3   r4   r_   P  s    c                   s   i | ]}||  | fqS r3   r3   )r9   rH   )conn_indexes_by_nameconn_uniques_by_namer3   r4   r_   V  s    c                 S  s   i | ]}|j |qS r3   unnamedr   r3   r3   r4   r_   _  s      c                 S  s   i | ]}|j |qS r3   r   r   r3   r3   r4   r_   `  s     c                   s$   i | ]}t |j js|j|qS r3   )r   Z_constraint_is_namedr   rA   r   r   r;   r3   r4   r_   c  s     r+   objc                   s   t | rH | j| jddd rjtj| j t	d| j| j
 ndt| rsXd S s`rdd S  | j| jddd rjtj| j t	d| j| j
 ndstd S )Nr   Fz!Detected added index '%r' on '%s'r   z+Detected added unique constraint %r on '%s')r   ri   r   rH   r   rj   CreateIndexOp
from_indexrk   rl   r}   r   AddConstraintOpfrom_constraintr>   r   )r-   is_create_tableis_drop_tabler   supports_unique_constraintsr3   r4   	obj_addeds  sF            z/_compare_indexes_and_uniques.<locals>.obj_addedc                   s   t | rT| jrsd S  | j| jddd rjtj| j t	
d| j nZt| rsdrhd S  | j| jddd rjtj| j t	
d| j ndstd S )Nr   TzDetected removed index %r on %rr   z+Detected removed unique constraint %r on %rF)r   Z	is_uniqueri   r   rH   r   rj   DropIndexOpr   rk   rl   r   DropConstraintOpr   r>   r   )r-   r   r   r   r   rN   r3   r4   obj_removed  s>    
        z1_compare_indexes_and_uniques.<locals>.obj_removedr   oldnewmsgc                   s   t | rlt |st |j|jdd| jrtd| j| jtj	
| j jtj
|j ntt| rt|st |j|jdd| jrtd| j| jtj| j jtj|j ndstd S )Nr   Fz#Detected changed index %r on %r: %sr   z/Detected changed unique constraint %r on %r: %s)r   r>   ri   r   rH   rk   rl   r   rj   r   r   r   r   r   r   r   r   )r-   r   rN   r3   r4   obj_changed  sN               z1_compare_indexes_and_uniques.<locals>.obj_changedc                 3  s   | ]} j |j kV  qd S r\   r   )r9   Zmeta_idx)conn_idxr3   r4   rP     s   r   zunique constraintz5Cannot compare %s %r, assuming equal and skipping. %s)!rI   rR   rn   constraintsrC   Zindexes	frozensetZget_unique_constraintsNotImplementedError	TypeErrorr@   Zget_indexes_correct_for_uq_duplicates_uixrA   Zcorrect_for_autogen_constraintsunionro   rp   rU   r   r   allr   typeZcompare_to_reflectedZis_differentmessageZis_skiprk   rl   rH   Zis_equalr>   )$r-   r   r   rN   rv   rr   rI   metadata_unique_constraintsmetadata_indexesZconn_uniquesconn_indexesZ+unique_constraints_duplicate_unique_indexesr   Zmetadata_unique_constraints_sigZmetadata_indexes_sigconn_unique_constraintsZconn_indexes_sigZmetadata_namesZ
conn_namesZdoubled_constraintsZconn_uniques_by_sigZmetadata_uniques_by_sigZunnamed_metadata_uniquesr   r   r   Zremoved_nameZconn_objZconn_uqZexisting_nameZmetadata_objZ
comparisonthingZ
added_namer   Zuq_sigr3   )r-   r   r   rv   r   rn   r   r   r   r   r   rN   r4   _compare_indexes_and_uniques  s*   	

 	
 





		
! %






r   c                   s    fdd|D }dd |D }fdd|D } fdd|D }	dd |D }
d	d | D }|D ]F}||kr || j|kr| ||  qd||	krd||
|  qdd S )
Nc                   s   g | ]}t | |fqS r3   )r   _get_constraint_final_namer9   consrA   r3   r4   rQ   .  s   z2_correct_for_uq_duplicates_uix.<locals>.<listcomp>c                 S  s   h | ]\}}|d k	r|qS r\   r3   r9   rH   r   r3   r3   r4   r<   3  s     z1_correct_for_uq_duplicates_uix.<locals>.<setcomp>c                   s$   h | ]\}}|d kr  |jqS r\   )r   r   r   r   r3   r4   r<   7  s   c                   s   h | ]}|j rt| qS r3   )r~   r   r   r   r   r3   r4   r<   =  s   c                 S  s   i | ]}|j r|j|qS r3   )r~   rH   r   r3   r3   r4   r_   E  s       z2_correct_for_uq_duplicates_uix.<locals>.<dictcomp>c                 S  s   i | ]}|j d  r|j|qS )r   )rl   rH   r   r3   r3   r4   r_   G  s   
 )r   r   rD   )r   r   r   r   rA   rn   Zmetadata_cons_namesZmetadata_uq_namesZunnamed_metadata_uqsZmetadata_ix_namesZconn_ix_namesZuqs_dupe_indexesZoverlapr3   )rA   rn   r4   r     s6    


r   r   r'   zColumn[Any])r-   r   r   rN   r   r   r   r/   c           	      C  sv   |j }|j }||_||k	rrt|j|jr4t|sDt|j|jrTtd|| n||_	td|rhdnd|| d S )Nz3Ignoring nullable change on identity column '%s.%s'zDetected %s on column '%s.%s'ZNULLzNOT NULL)
ZnullableZexisting_nullabler   _server_default_is_computedserver_defaultZ_nullability_might_be_unset_server_default_is_identityrk   rl   Zmodify_nullable)	r-   r   r   rN   r   r   r   Zmetadata_col_nullableZconn_col_nullabler3   r3   r4   _compare_nullableZ  s8    
  
r   r!   c                 C  sF   |j j|krd|jd< n*|jdkr.d|jd< n|jdkrBd|jd< d S )NTautoincrementF)rL   Z_autoincrement_columnkwr   )r-   r   r   rN   r   r   r   r3   r3   r4   _setup_autoincrement  s    


r   c           
      C  s|   |j }||_|j }|jtjkr0td|| d S |jtjkrNtd|| d S | j||}	|	rx||_	td|||| 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')
r   Zexisting_typeZ_type_affinitysqltypesZNullTyperk   rl   rR   _compare_typeZmodify_type)
r-   r   r   rN   r   r   r   Z	conn_typeZmetadata_typeZisdiffr3   r3   r4   r     s<    
 r   zOptional[Any])metadata_defaultr-   r/   c                 C  sP   t | tjr:t | jtr | j} nt| jj|jddid} t | trH| S d S d S )Nliteral_bindsTrA   compile_kwargs)r   r]   ZDefaultClauseargr   compilerA   )r   r-   r3   r3   r4   "_render_server_default_for_compare  s    
r   r   )sqltextr/   c                 C  s   t 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[ \(\)'\"`\[\]\t\r\n]ra   )resublower)r   r3   r3   r4   _normalize_computed_default  s    r   c           	      C  s   t ttj|jjj| jddid}t|}t	|jtjrnt |jjj| jddid}|d krdd}qrt|}nd}||krt
|| d S )Nr   Tr   ra   )r   r   r]   ZComputedr   r   r   rA   r   r   _warn_computed_not_supported)	r-   r   r   rN   r   r   r   rendered_metadata_defaultrendered_conn_defaultr3   r3   r4   _compare_computed_default  s0    	r   )rN   r   r/   c                 C  s   t d| |f  d S )Nz,Computed default on %s.%s cannot be modified)r   warn)rN   r   r3   r3   r4   r   	  s    r   c                 C  s&   | j j}||j|j\}}	}
||
fS r\   )rR   rn   _compare_identity_defaultr   )r-   r   r   rN   r   r   r   rn   diffZignored_attris_alterr3   r3   r4   r     s    	 
r   zOptional[bool]c                 C  s  |j }|j }|d kr |d kr dS t|rHtjs4dS t| ||||||S t|r`t|| dS t||r||_t| ||||||\}	}
|
r||_	|	rt
d||t|	 nRt|| }|rt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')r   r   r   Zhas_computed_reflectionr   r   r   Zexisting_server_defaultr   Zmodify_server_defaultrk   rl   rp   r   r   r   r   r   rR   _compare_server_default)r-   r   r   rN   r   r   r   r   Zconn_col_defaultr   r   r   r   Zis_diffr3   r3   r4   r     sx    



 	 r   zOptional[Literal[False]]c           	      C  s`   | j d k	st| j jsd S |j}|j}|d kr:|d kr:dS ||_||kr\||_td|| d S )NFzDetected column comment '%s.%s')rA   r>   supports_commentscommentexisting_commentZmodify_commentrk   rl   )	r-   r   r   rN   r   r   r   Zmetadata_commentZconn_col_commentr3   r3   r4   _compare_column_commentv  s    
r   )r-   rs   r   rN   rv   rr   r/   c                   s  d ks|d krd S  j }dd |jD } fdd|jdD }fdd|D }	 jj jj|	| fdd|D }
fdd|	D }|rd	|d
 krdd |D }dd |
D }ndd |D }dd |
D }dd |
D }dd |D } fdd} fdd}t||D ]>}|| ||kr*j|krX|j j	nd }|| q*t||D ]>}|| ||krxj|kr|j j	nd }|| qxd S )Nc                 S  s   h | ]}t |tjr|qS r3   )r   r]   r   r9   Zfkr3   r3   r4   r<     s   z(_compare_foreign_keys.<locals>.<setcomp>c              	     s(   g | ] }  |d  ddr|qS )rH   foreign_key_constraintr   r7   r   r   r3   r4   rQ     s   z)_compare_foreign_keys.<locals>.<listcomp>r   c                   s   h | ]}t | qS r3   )r   )r9   r   r   r3   r4   r<     s   c                   s   h | ]}  |qS r3   r   r   r   r3   r4   r<     s    c                   s   h | ]}  |qS r3   r   r   r   r3   r4   r<     s    r   r   c                 S  s   i | ]}|j |qS r3   r   r   r3   r3   r4   r_     s      z)_compare_foreign_keys.<locals>.<dictcomp>c                 S  s   i | ]}|j |qS r3   r   r   r3   r3   r4   r_     s      c                 S  s   i | ]}|j |qS r3   Zunnamed_no_optionsr   r3   r3   r4   r_     s      c                 S  s   i | ]}|j |qS r3   r   r   r3   r3   r4   r_     s     c                 S  s   i | ]}|j d k	r|j |qS r\   r   r   r3   r3   r4   r_     s    
  c                 S  s   i | ]}|j d k	r|j |qS r\   r   r   r3   r3   r4   r_     s     
  c                   sd     | j| jdd|r`jtjj tdd	| j
d	| j| jrVd| j nd| j d S )Nr   Fz1Detected added foreign key (%s)(%s) on table %s%s, %s.ra   )ri   r   rH   r   rj   ZCreateForeignKeyOpr   rk   rl   joinsource_columnstarget_columnssource_schemasource_tabler   
compare_to)r-   r   rs   r3   r4   _add_fk  s"        

z&_compare_foreign_keys.<locals>._add_fkc                   sd     | j| jdd|r`jtj| j tdd	| j
d	| j| jrVd| j nd| j d S )Nr   Tz3Detected removed foreign key (%s)(%s) on table %s%sr   r  ra   )ri   r   rH   r   rj   r   r   rk   rl   r  r  r  r  r  r  )r-   rs   r3   r4   
_remove_fk  s"        

z)_compare_foreign_keys.<locals>._remove_fk)
rI   r   Zget_foreign_keysrR   rn   Zcorrect_for_autogen_foreignkeysrC   rU   rH   r   )r-   rs   r   rN   rv   rr   rI   Zmetadata_fksZconn_fks_listZconn_fksZmetadata_fks_sigZconn_fks_sigZconn_fks_by_sigZmetadata_fks_by_sigZmetadata_fks_by_nameZconn_fks_by_namer	  r
  Zremoved_sigr  Z	added_sigr3   )r-   rv   r   rn   rs   r   rN   r4   _compare_foreign_keys  sh    

 



r  c                 C  s   | j d k	st| j jsd S |d ks*|d kr.d S |jd krF|jd krFd S |jd krv|jd k	rv|jtj||j|d n*|j|jkr|jtj||j|j|d d S )N)r   r   )rA   r>   r   r   r   rj   ZDropTableCommentOpZCreateTableCommentOp)r-   rs   r   rN   rv   rr   r3   r3   r4   _compare_table_comment  s0    	  r  )`
__future__r   
contextlibloggingr   typingr   r   r   r   r   r   r	   r
   r   r   r   Z
sqlalchemyr   r   r   r]   r   r   r   Zsqlalchemy.sqlr   Zsqlalchemy.sql.schemar   r   r   Zsqlalchemy.utilr   ra   r   Zddl._autogenr   r   
operationsr   r   r   Zsqlalchemy.engine.reflectionr    Zsqlalchemy.sql.elementsr!   r"   r#   r$   Zalembic.autogenerate.apir%   Zalembic.ddl.implr&   Zalembic.operations.opsr'   r(   r)   r*   r+   	getLogger__name__rk   r5   Z
DispatcherrF   r1   Zdispatch_forr[   rW   Zimmutabledictrw   rx   ry   rz   r{   __annotations__r   r   r   contextmanagerrq   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r3   r3   r3   r4   <module>   s    

*  H  c?(*
,W{