
    Zis)                       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	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m Z  ddl!m"Z"  ejF                  e$      Z%	 	 	 	 	 	 	 	 ddZ&	 	 	 	 	 	 	 	 	 	 	 	 ddZ'ejP                  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd       Z)ddZ*y)     )annotationsN)Iterator)Optional)Set)Tuple)TYPE_CHECKING)Union)eventschema)
OrderedSet   )_InspectorConv   )ops)PriorityDispatchResult)	Inspector)quoted_name)Table)AutogenContext)ModifyTableOps)
UpgradeOps)Pluginc           
        | j                   }t               }| j                  j                  }| j                  j                  }|D ]  t        |j                              x}}|k(  r&|j                  | j                  j                  g      }|D 	cg c]  }	| j                  |	ddi      r|	 }
}	|j                  fd|
D               | j                   }t        |      }|j                  |
|        t        | j                  D cg c]  }|j                  |j                  f c}      j                  ||fg      }t        |||||        t         j"                  S c c}	w c c}w )Nr   tableschema_namec              3  &   K   | ]  }|f 
 y wN ).0tnamer   s     _/home/portmadness/app/.venv/lib/python3.12/site-packages/alembic/autogenerate/compare/tables.py	<genexpr>z&_autogen_for_tables.<locals>.<genexpr>A   s     Me 4Ms   )	inspectorsetmigration_contextversion_table_schemaversion_tableget_table_names
differencerun_name_filtersupdater   pre_cache_tablesr   sorted_tablesr   name_compare_tablesr   CONTINUE)autogen_contextupgrade_opsschemasr$   conn_table_namesr'   r(   tables	availabler!   
tablenamesinspr   metadata_table_namesr   s                 @r"   _autogen_for_tablesr;   $   s   
  ))I7:u 	))>>  $55CCM B !:!:+!:!NOO..&& 22@@AF  
//w < 

 
 	M*MM#--	i(k:yA'B* &1@1N1NO%,,

	#Oj'789   "***5
 	Ps   E%E*c                &
   |j                   j                  j                  }t        |D cg c]  \  }}||k7  r|nd |f c}}      }t	        ||      D 	ci c],  \  }	\  }}|	|j
                  t        j                  ||         . }
}}	}|}|j                  |       D ]  \  }}|r|d|n|}|
||f   }|j                  ||ddd       s.|j                  j                  t        j                  j                  |             t        j                  d|       t        j                   |g |      } |j"                  j%                  d|j                  j&                        ||||d |       |j)                         r|j                  j                  |        t        j*                         }| j                  |      D ]{  \  }}t        j                  ||      }||j,                  v }t        j.                  |||      }|sTt1        j2                  |d|j4                  j6                  j9                  |             t;        |      j=                  |       |j                  ||ddd       st        j                   |g |      } |j"                  j%                  d|j                  j&                        |||||d        |j)                         s|j                  j                  |       |j                  j                  t        j>                  j                  |             t        j                  d	|       ~ | jA                  |      }t        j*                         }i }|D ]  \  }}t        j                  ||      }||j,                  v }t        j.                  |||      }|sTt1        j2                  |d|j4                  j6                  j9                  |             t;        |      j=                  |       ||||f<    tC        |d
       D ]  \  }}|xs d }|r|d|n|}|
||f   }|j,                  |   }|j                  ||dd|      sCt        j                   |g |      }tE        |||||||      5   |j"                  j%                  d|j                  j&                        ||||||       d d d        |j)                         r|j                  j                  |        y c c}}w c c}}}	w # 1 sw Y   ExY w)N.r   FzDetected added table %rr   	qualifiercolumn_reflectTzDetected removed table %rc                    | d   xs d| d   fS )Nr    r   r   )xs    r"   <lambda>z!_compare_tables.<locals>.<lambda>   s    1Q4:2qt:L     )key)#binddialectdefault_schema_namer   ziptable_key_to_table	sa_schema_get_table_keyr*   run_object_filtersr   appendCreateTableOp
from_tableloginfor   comparatorsdispatchr/   is_emptyMetaDatar6   r   r
   listenr&   impl_compat_autogen_column_reflectr   reflect_tableDropTableOpintersectionsorted_compare_columns)r5   r:   r$   r3   r2   default_schemar   r!   #metadata_table_names_no_dflt_schemano_dflt_schematname_to_tablesr/   metadata_tablemodify_table_opsremoval_metadataexiststexisting_tablesexisting_metadataconn_column_info
conn_tables                         r"   r0   r0   V   s    ^^++??N +5 "6	
 /VT5A	
+' 03/1E0
	  ,NOVU 	::$$UF3
 	
N  ?(334DE 95'(!U#e'E
3--E7E4
 OO""!!,,^< HH.5"11%AFO''00?#:#:#?#? 1    	 $,,.&&'78/92 !))+$//0DE 85''q1 )000OOE#3A>LL 1166.. 9%33A6--atL"11%AFO''00?#:#:#?#? 1 /E1dD $,,.&&'78OO""3??#=#=a#@AHH0$7;8> '334HIO!**,# )5''q1*111 OOE#4Q?LL 1166..y9 9%33A6'(!U$%)( ?0LM 95I'(!U#e'E
3&--d3
--E7E:
  #11%AF!  ++44'>'>'C'C 5  $$"	( $,,.&&'78?9I	
J s   S:
1T =TT	c           
   #  (  K   | r| d|n|}t        d |j                  D              }|j                  D 	ci c]  }	|	j                  r|	j                  |	 }
}	|j                  D 	ci c]/  }	|j	                  |	j                  d|| d      r|	j                  |	1 }}	|j                  |      D ]o  }|j                  |
|   |ddd       s|j                  j                  t        j                  j                  | ||
|                t        j                  d||       q |j                  |      D ]  }|
|   }|j                  |   }|j                  ||dd|      s-t        j                  |||       } |j                  j!                  d|j"                  j                        ||| ||||       |j%                         s|j                  j                  |        d  t'        |      j                  |      D ]  }|j                  |j                  |   |dd	d       s&|j                  j                  t        j(                  j                  | ||j                  |                t        j                  d
||        y c c}	w c c}	w w)Nr=   c              3  N   K   | ]  }|j                   r|j                    y wr   )systemr/   )r    cs     r"   r#   z#_compare_columns.<locals>.<genexpr>   s      $$s   %%column)
table_namer   FzDetected added column '%s.%s'r   r>   TzDetected removed column '%s.%s')r   rq   rp   r/   r+   r*   rN   r   rO   AddColumnOpfrom_column_and_tablenamerR   rS   r]   AlterColumnOprT   rU   rH   has_changesr%   DropColumnOp)r   r!   rm   re   rf   r2   r$   r/   metadata_col_namesrq   metadata_cols_by_nameconn_col_namescnamecolnamemetadata_colconn_colalter_column_ops                    r"   r_   r_      s     )/fe$ED# $&(($  *++188	  ++FFHU6J
 	
	N  $..~> 	C--!%(%5$
   ''99E#8#?
 HH4dEB	C &22>B 9,W5<<(11'8UH
 ++E76J	
##,, 7 7 < < 	- 	
 
	
 &&(  ''8-90 
^$//0BC 	E--LL$
   ''  ::E:<<#6
 HH6eD	Ecs7   6JJ
JJ)4J.JC9JA J'A+Jc                2    | j                  t        dd       y )Nr   r6   )add_autogenerate_comparatorr;   )plugins    r"   setupr   6  s    
&&rE   )r2   r   r3   r   r4   zSet[Optional[str]]returnr   )r5   set[tuple[str | None, str]]r:   r   r$   r   r3   r   r2   r   r   None)r   zOptional[str]r!   zUnion[quoted_name, str]rm   r   re   r   rf   r   r2   r   r$   r   r   zIterator[None])r   r   r   r   )+
__future__r   
contextlibloggingtypingr   r   r   r   r   r	   
sqlalchemyr
   r   rL   sqlalchemy.utilr   utilr   
operationsr   r   sqlalchemy.engine.reflectionr   sqlalchemy.sql.elementsr   sqlalchemy.sql.schemar   autogenerate.apir   operations.opsr   r   runtime.pluginsr   	getLogger__name__rR   r;   r0   contextmanagerr_   r   r   rE   r"   <module>r      sO   #           * &    *63+20,) g!/+#/+/+  /+ 	/+dR91R95R9 R9 	R9
 $R9 
R9j GEGE"GE GE 	GE
 %GE $GE GE GE GETrE   