o
    Ph&                     @  s  U d dl mZ d dlZd dlmZ d dl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 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/ Z0e01dg G dd deZG d d! d!eeZd"e_2d2d$d%Z3i Z4d&e5d'< ed(d) Z6ed*d+ Z7	,	-		-	d3d.d/Z8G d0d1 d1Z9dS )4    )annotationsN)contextmanager)Any)Dict)Columncreate_mock_engine)inspect)MetaData)String)Table)testing)text)config)mock)eq_)FutureEngineMixin)
TablesTest)TestBase   )_get_dialect)_get_staging_directory   )EnvironmentContext)MigrationContext)
Operations)sqla_compat)sqla_2ztest.cfgc                   @  sv   e Zd ZeZe dd Zedd Z	e dd Z
e dd Zejd	d
 Zejdd Zejdd ZdS )r   c                 c  sj    d V  t  }t|D ]&}tj||}tj|s!tj|r't| qtj|r2t	
| qd S N)r   oslistdirpathjoinisfileislinkunlinkisdirshutilrmtree)selflocationfilename	file_path r-   ]/var/www/html/stock_analysis/be/venv/lib/python3.10/site-packages/alembic/testing/fixtures.pyclear_staging_dir+   s   
zTestBase.clear_staging_dirc              	   c  s8    t  }zt | d V  W t | d S t | w r   )r   getcwdchdir)r)   dirnamecurrent_dirr-   r-   r.   pushd6   s   
zTestBase.pushdc                 c  s    d V  t jdd  d S )NALEMBIC_CONFIG)r   environpopr)   r-   r-   r.   pop_alembic_config_env?   s   zTestBase.pop_alembic_config_envc                 c  s>    |j dd t|V  W d    d S 1 sw   Y  d S )NT)_per_migration)begin_transactionr   )r)   migration_contextr-   r-   r.   ops_contextD   s   "zTestBase.ops_contextc                 C  s   t j|tdddS )NT)transaction_per_migrationoptsr   	configuredictr)   
connectionr-   r-   r.   r<   I   s   
zTestBase.migration_contextc                 C  s   t j|tddddS )NT)r>   as_sqlr?   rA   rD   r-   r-   r.   as_sql_migration_contextO   s   z!TestBase.as_sql_migration_contextc                 c  s8    t j }|V  W d    d S 1 sw   Y  d S r   )r   dbconnect)r)   connr-   r-   r.   rE   U   s   "zTestBase.connectionN)__name__
__module____qualname__r   is_sqlalchemy_futurer   fixturer/   r   r4   r9   r=   r<   rG   rE   r-   r-   r-   r.   r   (   s     






r   c                   @  s   e Zd ZdS )r   N)rK   rL   rM   r-   r-   r-   r.   r   [   s    r   Tpostgresql://c                   s$   g   fdd}t | | fS )Nc                   s     t| jjd d S N)dialect)appendstrcompilerR   )sqlmultiparamsparamsbufenginer-   r.   dumpe   s   zcapture_db.<locals>.dumpr   )rR   r\   r-   rY   r.   
capture_dbb   s   
r]   zDict[Any, Any]_engsc                  +  s     ddrt }nt }d|d tj  fdd}tj	td| |V  W d    d S 1 s9w   Y  d S )Nbytes_ioFsqlite)dialect_nameoutput_bufferc                       |j di   | i |S Nr-   updateargoptconfkwr-   r.   rB   y      z)capture_context_buffer.<locals>.configurerB   )
r7   ioBytesIOStringIOrf   r   rB   r   patchobject)rl   rZ   rB   r-   rj   r.   capture_context_buffero   s   
"rs   c                  +  s    ddl m} ddlm} t  | }| }||d fdd}d|i t	j
fd	d
}tjt	d|  V  W d    d S 1 sLw   Y  d S )Nr   )_sqlite_file_dbr   )eventbefore_cursor_executec                   s     |d  d S )N
)write)rJ   cursor	statement
parameterscontextexecutemanyrZ   r-   r.   bce   s   z*capture_engine_context_buffer.<locals>.bcerE   c                    rc   rd   re   rg   rj   r-   r.   rB      rm   z0capture_engine_context_buffer.<locals>.configurerB   )envrt   
sqlalchemyru   rn   rp   rI   listens_forrf   r   rB   r   rq   rr   )rl   rt   ru   engrJ   r   rB   r-   )rZ   rk   rl   r.   capture_engine_context_buffer   s   
"r   defaultFc                   s   i }|rt |d|d< G  fddd}| G fdddt} r' |d< |r-||d< t| |d ur;|_d	_ sLfd
d}tj|d}	n|d< d }	||	|}
t|
tj	_
|
S )N)naming_conventiontarget_metadatac                      s(   e Zd Zdd Z fddZdd ZdS )zop_fixture.<locals>.buffer_c                 S  s
   g | _ d S r   linesr8   r-   r-   r.   __init__   s   
z$op_fixture.<locals>.buffer_.__init__c                   sF   |  }tdd|} rtdd|}tdd|}| j| d S )N[\n\t] z    z\;\n*$)stripresubr   rS   )r)   msgrF   r-   r.   rx      s   z!op_fixture.<locals>.buffer_.writec                 S  s   d S r   r-   r8   r-   r-   r.   flush      z!op_fixture.<locals>.buffer_.flushN)rK   rL   rM   r   rx   r   r-   r   r-   r.   buffer_   s    r   c                      s<   e Zd Z fddZ fddZ fddZ fddZd	S )
zop_fixture.<locals>.ctxc                   s    S r   r-   r8   r~   r-   r.   get_buf   r   zop_fixture.<locals>.ctx.get_bufc                   s   g  j d d < d S r   r   r8   r~   r-   r.   clear_assertions   s   z(op_fixture.<locals>.ctx.clear_assertionsc                   s   t  jdd |D  d S )Nc                 S  s   g | ]	}t d d|qS )r   r   )r   r   ).0sr-   r-   r.   
<listcomp>   s    z3op_fixture.<locals>.ctx.assert_.<locals>.<listcomp>)r   r   )r)   rV   r~   r-   r.   assert_   s   zop_fixture.<locals>.ctx.assert_c                   s6    j D ]}tdd||v r d S qJ d| j f )Nr   r   Fz"Could not locate fragment %r in %r)r   r   r   )r)   rV   stmtr~   r-   r.   assert_contains   s   
z'op_fixture.<locals>.ctx.assert_containsN)rK   rL   rM   r   r   r   r   r-   r~   r-   r.   ctx   s
    r   rF   literal_bindsTc                   s:   t | tr	t| } | jsJ t| jd} | d S rQ   )
isinstancerT   r   supports_executionrU   rx   )r   
multiparamparamrV   )rZ   ctx_dialectr-   r.   execute   s
   

zop_fixture.<locals>.execute)rR   r   rb   )r
   r   r   supports_native_boolean#non_native_boolean_check_constraintr   Mockr   alembicop_proxy)rR   rF   r   r   native_booleanr@   r   r   r   rE   r|   r-   )rF   rZ   r   r.   
op_fixture   s,   r   c                   @  s:   e Zd ZdZdd Zdd Zdd Zdd	 ZdddZd
S )AlterColRoundTripFixture)alter_columnc                 C  s2   t j | _t| j| _t| j| _t	 | _
d S r   )r   rH   rI   rJ   r   rB   r   r   r   r
   metadatar8   r-   r-   r.   setUp   s   zAlterColRoundTripFixture.setUpc                 C  s8   t d|}t d|}| jj||rJ d||f d S )Nqz3Type objects %r and %r didn't compare as equivalent)r   r   implcompare_type)r)   t1t2c1c2r-   r-   r.   _compare_type   s   


z&AlterColRoundTripFixture._compare_typec                 C  sD   t d||d}t d||d}| jj||||r J d||f d S )Nr   )server_defaultz6server defaults %r and %r didn't compare as equivalent)r   r   r   compare_server_default)r)   r   s1r   s2r   r   r-   r-   r.   _compare_server_default  s   
z0AlterColRoundTripFixture._compare_server_defaultc                 C  sR   t | j | j  | j| j W d    n1 sw   Y  | j  d S r   )r   %_safe_rollback_connection_transactionrJ   beginr   drop_allcloser8   r-   r-   r.   tearDown
  s
   z!AlterColRoundTripFixture.tearDownNc           	      C  s  t |dd|dtd|dd|dd d}td	| j|}t| jH || j t	| j}|
d	d
 }| jjd	|j|j|jd urJ|jnd|jrPdnd|dd |dd|dd |dd d	 W d    n1 srw   Y  t	| j}|
d	d
 }|d u r|}t|d d|v r|d n|j | |d |d|d  t|d |d|j | |d |dd |d|d d|v r|d j d S |jd ur|jjj d S d  d S )Nnamecolnametype
   nullableTr   )r   r   xr   F)existing_typeexisting_server_defaultexisting_nullabler   r   new_column_nametype_r   )r   getr   r   r   r   _ensure_scope_for_ddlrJ   creater	   get_columnsr   r   r   r   r   r   r   r   r   r   rh   )	r)   from_to_comparecolumntinspold_colnew_colr-   r-   r.   _run_alter_col  sb   










	

z'AlterColRoundTripFixture._run_alter_colr   )	rK   rL   rM   __requires__r   r   r   r   r   r-   r-   r-   r.   r      s    r   )rP   )r   FNFN):
__future__r   configparser
contextlibr   rn   r   r   r'   typingr   r   r   r   r   r	   r
   r   r   r   r   sqlalchemy.testingr   r   sqlalchemy.testing.assertionsr   sqlalchemy.testing.fixturesr   r   SQLAlchemyTablesTestr   SQLAlchemyTestBaser   
assertionsr   r   r   environmentr   	migrationr   
operationsr   utilr   util.sqla_compatr   ConfigParsertesting_configreadrN   r]   r^   __annotations__rs   r   r   r   r-   r-   r-   r.   <module>   sb    3




T