o
    vois)                     @  s@  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 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" e#e$Z%d:d d!Z&d;d(d)Z'ej(d<d4d5Z)d=d8d9Z*dS )>    )annotationsN)Iterator)Optional)Set)Tuple)TYPE_CHECKING)Union)eventschema)
OrderedSet   )_InspectorConv   )ops)PriorityDispatchResult)	Inspector)quoted_name)Table)AutogenContext)ModifyTableOps)
UpgradeOps)Pluginautogen_contextr   upgrade_opsr   schemasSet[Optional[str]]returnr   c                   s    j }t } jj} jj}|D ]<t|jd }}|kr(| jjg} fdd|D }	|fdd|	D   j }t|}
|
	|	| qt
dd  jD ||fg}t||||  tjS )Nr
   c                   s"   g | ]}  |d dir|qS )tableschema_name)run_name_filters.0tnamer   r    W/home/ubuntu/.local/lib/python3.10/site-packages/alembic/autogenerate/compare/tables.py
<listcomp>9   s    
z'_autogen_for_tables.<locals>.<listcomp>c                 3  s    | ]} |fV  qd S Nr%   r!   )r   r%   r&   	<genexpr>A   s    z&_autogen_for_tables.<locals>.<genexpr>c                 S  s   g | ]}|j |jfqS r%   )r   name)r"   r   r%   r%   r&   r'   H   s    )	inspectorsetmigration_contextversion_table_schemaversion_tableget_table_names
differenceupdater   pre_cache_tablesr   sorted_tables_compare_tablesr   CONTINUE)r   r   r   r+   conn_table_namesr.   r/   tables	available
tablenamesinspmetadata_table_namesr%   r$   r&   _autogen_for_tables$   s>   r=   r7   set[tuple[str | None, str]]r<   r+   r   Nonec              	     s6  |j jjtfdd|D } fddt||D }|}|| D ]P\}}|r/d||f n|}	|||f }
 |
|ddd rs|jtj	
|
 td|	 tj|g |d	} jjd jjd
 |||d |
 | ss|j| q#t }| |D ]h\}}t||}	|	|jv }tj|||d	}|st|d jj| t||  ||ddd rtj|g |d	} jjd jjd
 ||||d  | s|j| |jtj
| td|	 q}| |}t }i }|D ]3\}}t||}	|	|jv }tj|||d	}|s t|d jj| t|| ||||f< qt |dd dD ]i\}}|p7d }|rAd||f n|}	|||f }
|j|	 } |
|dd|rtj|g |d	}t!||||
| |  jjd jjd
 |||||
 W d    n	1 sw   Y  | s|j| q/d S )Nc                   s$   g | ]\}}| kr|nd |fqS r(   r%   )r"   r   r#   )default_schemar%   r&   r'   e   s    z#_compare_tables.<locals>.<listcomp>c                   s(   i | ]\}\}}| j t|| qS r%   )table_key_to_table	sa_schema_get_table_key)r"   no_dflt_schemar   r#   )r   r%   r&   
<dictcomp>n   s    

z#_compare_tables.<locals>.<dictcomp>%s.%sr   FzDetected added table %rr
   	qualifiercolumn_reflectTzDetected removed table %rc                 S  s   | d pd| d fS )Nr    r   r%   )xr%   r%   r&   <lambda>   s    z!_compare_tables.<locals>.<lambda>)key)"binddialectdefault_schema_namer   zipr1   run_object_filtersr   appendCreateTableOp
from_tableloginfor   comparatorsdispatchr*   is_emptyrB   MetaDatarC   r8   r   r	   listenr-   impl_compat_autogen_column_reflectr   reflect_tableDropTableOpintersectionsorted_compare_columns)r7   r<   r+   r   r   #metadata_table_names_no_dflt_schematname_to_tablesr#   r*   metadata_tablemodify_table_opsremoval_metadataexiststexisting_tablesexisting_metadataconn_column_info
conn_tabler%   )r   r@   r&   r5   V   s   







	




	
r5   r   Optional[str]r#   Union[quoted_name, str]ro   r   rg   rh   r   Iterator[None]c              	   #  s   r	df n}t dd |jD }dd |jD }	 fdd|jD }
||
D ]"} |	| |ddd rP|jtj|	|  t	d	|| q.|
|
D ]9}|	| }|j| } ||dd|skqVtj|d
} jjd jjd |||| | r|j| qVd V  t|
|D ]$} |j| |ddd r|jtj|j|  t	d|| qd S )NrF   c                 s  s    | ]	}|j s|jV  qd S r(   systemr*   r"   cr%   r%   r&   r)      s    
z#_compare_columns.<locals>.<genexpr>c                 S  s   i | ]	}|j s|j|qS r%   rs   ru   r%   r%   r&   rE      s
    z$_compare_columns.<locals>.<dictcomp>c              	     s*   i | ]}  |jd dr|j|qS )column)
table_namer   )r    r*   ru   r   r   r#   r%   r&   rE      s    rw   FzDetected added column '%s.%s'r
   rG   TzDetected removed column '%s.%s')r   rv   r1   rR   r   rS   AddColumnOpfrom_column_and_tablenamerV   rW   ra   AlterColumnOprX   rY   rO   r*   has_changesr,   DropColumnOp)r   r#   ro   rg   rh   r   r+   r*   metadata_col_namesmetadata_cols_by_nameconn_col_namescnamecolnamemetadata_colconn_colalter_column_opr%   ry   r&   rc      sr   



rc   pluginr   c                 C  s   |  tdd d S )Nr   r8   )add_autogenerate_comparatorr=   )r   r%   r%   r&   setup6  s
   r   )r   r   r   r   r   r   r   r   )r7   r>   r<   r>   r+   r   r   r   r   r   r   r?   )r   rp   r#   rq   ro   r   rg   r   rh   r   r   r   r+   r   r   rr   )r   r   r   r?   )+
__future__r   
contextlibloggingtypingr   r   r   r   r   r   
sqlalchemyr	   r   rB   sqlalchemy.utilr   utilr   
operationsr   r   sqlalchemy.engine.reflectionr   sqlalchemy.sql.elementsr   sqlalchemy.sql.schemar   autogenerate.apir   operations.opsr   r   runtime.pluginsr   	getLogger__name__rV   r=   r5   contextmanagerrc   r   r%   r%   r%   r&   <module>   s<   


2 J