o
    Df&                     @  s  U 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! ddl m"Z" ddl#m$Z$ ddl#m%Z% e& Z'de(d < e
)ed!d"d# Z*d$d% Z+e+Z,d&e(d'< d(Z-d&e(d)< G d*d+ d+Z.G d,d- d-Z/G d.d/ d/e/Z0G d0d1 d1e/Z1d(S )2    )annotations)Any)Dict)Set)CHAR)CheckConstraint)Column)event)
ForeignKey)Index)inspect)Integer)MetaData)Numeric)String)Table)Text)text)UniqueConstraint   )autogenerate)util)api)_fk_spec)MigrationContextops)config)eq_)clear_staging_env)staging_envzSet[Any]names_in_this_testafter_parent_attachc                 C  s   t | j d S N)r!   addname)tableparent r(   `/home/ubuntu/webapp/venv/lib/python3.10/site-packages/alembic/testing/suite/_autogen_fixtures.py	new_table%   s   r*   c                 C  s   |dkr|t v S dS )Nr&   T)r!   )objr%   type_	reflected
compare_tor(   r(   r)   _default_include_object*   s   r/   r   _default_object_filtersN_default_name_filtersc                   @  s6   e Zd ZU dZdZded< edd Zedd ZdS )	ModelOne)unique_constraint_reflectionNr   schemac              
   C  s   | j }t|d}td|tdtddtdtdtdttd	tdtd
d	 td|tdtddtdtddd td|tdtddtdtdddt	ddt
ddd td|tdttdttd |S )Nr4   useridTprimary_keyr%   2   a1pwpw_idxaddressemail_addressd   Fnullableorderorder_idamount      0rB   server_defaultzamount >= 0ck_order_amountr%   extraxuiduser.id)r4   r   r   r   r   r   r   r   r   r   r   r   r
   clsr4   mr(   r(   r)   _get_db_schema;   sH   


zModelOne._get_db_schemac              
   C  s   | j }t|d}td|tdtddtdtddd	td
tdd td|tdtddtdtddd	tdtdtddd td|tdtddtdtdddt	ddtdtt
dtddd td|tdtddtdtdtdtt
d td! |S )"Nr5   r6   r7   Tr8   r%   r:   FrA   r;   rN   )rJ   r>   r?   r@   streetuq_emailrL   rC   rD   rE   
   rG   rH   rI   user_idrP   zamount > -1rK   itemdescriptionzorder.order_idzlen(description) > 5)r4   r   r   r   r   r   r   r   r   r   r
   r   rQ   r(   r(   r)   _get_model_schemah   sN   

	
zModelOne._get_model_schema)	__name__
__module____qualname____requires__r4   __annotations__classmethodrT   r[   r(   r(   r(   r)   r2   6   s   
 
,r2   c                   @  s$   e Zd Z							dddZdS )_ComparesFKsNc              
   C  s   t |d \
}}}}}}}}}}t|d | t|| t|| t|| t||	 t||
 t|| t|| t|| tdd |d jD | |d urv|dkrlt| j|}|d d }t|d j| d S t|d j| d S t|d j| d S )N   r   c                 S  s   g | ]}|j jqS r(   )columnr%   ).0elemr(   r(   r)   
<listcomp>   s    z0_ComparesFKs._assert_fk_diff.<locals>.<listcomp>servergeneratedr%   )r   r   elementsr   bindget_foreign_keysr%   )selfdiffr,   source_tablesource_columnstarget_tabletarget_columnsr%   conditional_namesource_schemaonupdateondelete	initially
deferrablefk_source_schemafk_source_tablefk_source_columnsfk_target_schemafk_target_tablefk_target_columnsfk_onupdatefk_ondeletefk_deferrablefk_initiallyfksserver_fk_namer(   r(   r)   _assert_fk_diff   s:   








z_ComparesFKs._assert_fk_diff)NNNNNNN)r\   r]   r^   r   r(   r(   r(   r)   rb      s    	rb   c                   @  sb   e Zd ZU dd Zedd Zi Zded< edd Zed	d
 Z	dd Z
dd Z	dddZdS )AutogenTestc                 c  s2    |D ]}t |tr| |E d H  q|V  qd S r#   )
isinstancelist_flatten_diffs)rl   diffsdr(   r(   r)   r      s   
zAutogenTest._flatten_diffsc                 C  s   t jS r#   )r   dbrR   r(   r(   r)   	_get_bind   s   zAutogenTest._get_bindzDict[Any, Any]configure_optsc                 C  s6   t   |  | _|  | _| j| j |  | _d S r#   )r    r   rj   rT   m1
create_allr[   m2r   r(   r(   r)   setup_class   s
   

zAutogenTest.setup_classc                 C  s   | j | j t  d S r#   )r   drop_allrj   r   r   r(   r(   r)   teardown_class   s   
zAutogenTest.teardown_classc              
   C  sd   | j   | _}dd| jddddttd	}| jr|| j tj	||d | _
}t|| j| _d S )NTupgrades
downgradesop.sa.)	compare_typecompare_server_defaulttarget_metadataupgrade_tokendowngrade_tokenalembic_module_prefixsqlalchemy_module_prefixinclude_objectinclude_name
connectionopts)rj   connectconnr   r0   r1   r   updater   	configurecontextr   AutogenContextautogen_context)rl   r   ctx_optsr   r(   r(   r)   setUp   s"   zAutogenTest.setUpc                 C  s   | j   d S r#   )r   closerl   r(   r(   r)   tearDown   s   zAutogenTest.tearDownNc                 C  s>   |d ur
|| j jd< |d ur|g| j _|d ur|g| j _| j S )Ninclude_schemas)r   r   _object_filters_name_filters)rl   object_filtersname_filtersr   r(   r(   r)   _update_context  s   

zAutogenTest._update_context)NNN)r\   r]   r^   r   ra   r   r   r`   r   r   r   r   r   r(   r(   r(   r)   r      s   
 


r   c                   @  s2   e Zd ZddeeddfddZdd Zdd ZdS )	AutogenFixtureTestFNc	                 C  sf  |r| j j}	|	j}
| |	_|	_z||| _}t| jD ]}|| j  q| j  c}dd|dddd|||d
}|r?|	| t
j||d | _}t||}tjg d}t|| |rt|W  d    W |rs| j j}	|
 |	_|	_S S | W  d    W |r| j j}	|
 |	_|	_S S 1 sw   Y  W |r| j j}	|
 |	_|	_d S d S |r| j j}	|
 |	_|	_w )	NTr   r   r   r   )
r   r   r   r   r   r   r   r   r   r   r   r   )rj   dialectmax_identifier_length#_user_defined_max_identifier_length_alembic_metadatar   to_listr   r   r   r   r   r   r   r   r   
UpgradeOpsr   _produce_net_changesas_diffs)rl   r   r   r   r   r   r   
return_opsr   r   existing_lengthmodel_metadatarS   r   r   r   r   uor(   r(   r)   _fixture  sv   
zAutogenFixtureTest._fixturec                 C  s   t   tj| _d S r#   )r    r   r   rj   r   r(   r(   r)   r   G  s   zAutogenFixtureTest.setUpc                 C  s2   t | drt| jD ]}|| j qt  d S )Nr   )hasattrr   r   r   r   rj   r   )rl   rS   r(   r(   r)   r   K  s   

zAutogenFixtureTest.tearDown)r\   r]   r^   r0   r1   r   r   r   r(   r(   r(   r)   r     s    
8r   )2
__future__r   typingr   r   r   
sqlalchemyr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r    r   r   r   ddl.baser   	migrationr   
operationsr   testingr   r   testing.envr   r    setr!   r`   listens_forr*   r/   r0   r1   r2   rb   r   r   r(   r(   r(   r)   <module>   sN    

b7?