o
    h#                     @  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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* e+ Z,e,-dg G dd deZG dd  d eeZd!e_.d1d#d$Z/i Z0d%e1d&< ed'd( Z2ed)d* Z3	+	,		,	d2d-d.Z4G d/d0 d0Z5dS )3    )annotationsN)contextmanager)Any)Dict)Columncreate_mock_engine)inspect)MetaData)String)Table)testing)text)config)mock)eq_)FutureEngineMixin)
TablesTest)TestBase   )_get_dialect   )EnvironmentContext)MigrationContext)
Operations)sqla_compat)sqla_2ztest.cfgc                   @  sJ   e Zd Ze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  s>    |j dd t|V  W d    d S 1 sw   Y  d S )NT)_per_migration)begin_transactionr   )selfmigration_context r!   l/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/alembic/testing/fixtures.pyops_context)   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    .   s   
zTestBase.migration_contextc                 C  s   t j|tddddS )NT)r$   as_sqlr%   r'   r*   r!   r!   r"   as_sql_migration_context4   s   z!TestBase.as_sql_migration_contextc                 c  s8    t j }|V  W d    d S 1 sw   Y  d S N)r   dbconnect)r   connr!   r!   r"   r+   :   s   "zTestBase.connectionN)__name__
__module____qualname__r   is_sqlalchemy_futurer   fixturer#   r    r-   r+   r!   r!   r!   r"   r   &   s    


r   c                   @  s   e Zd ZdS )r   N)r2   r3   r4   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compiler9   )sqlmultiparamsparamsbufenginer!   r"   dumpJ   s   zcapture_db.<locals>.dumpr   )r9   rC   r!   r@   r"   
capture_dbG   s   
rD   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"   r(   ^      z)capture_context_buffer.<locals>.configurer(   )
popioBytesIOStringIOrM   r   r(   r   patchobject)rS   rA   r(   r!   rQ   r"   capture_context_bufferT   s   
"r[   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)r1   cursor	statement
parameterscontextexecutemanyrA   r!   r"   bceq   s   z*capture_engine_context_buffer.<locals>.bcer+   c                    rJ   rK   rL   rN   rQ   r!   r"   r(   x   rT   z0capture_engine_context_buffer.<locals>.configurer(   )envr\   
sqlalchemyr]   rV   rX   r0   listens_forrM   r   r(   r   rY   rZ   )rS   r\   r]   engr1   rg   r(   r!   )rA   rR   rS   r"   capture_engine_context_bufferf   s   
"rl   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.   linesr   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subrq   r:   )r   msgr,   r!   r"   r`      s   z!op_fixture.<locals>.buffer_.writec                 S  s   d S r.   r!   rr   r!   r!   r"   flush      z!op_fixture.<locals>.buffer_.flushN)r2   r3   r4   rs   r`   r{   r!   rz   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!   rr   rf   r!   r"   get_buf   r|   zop_fixture.<locals>.ctx.get_bufc                   s   g  j d d < d S r.   rp   rr   rf   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 )rt   ru   )rw   rx   ).0sr!   r!   r"   
<listcomp>   s    z3op_fixture.<locals>.ctx.assert_.<locals>.<listcomp>)r   rq   )r   r=   rf   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 )Nrt   ru   Fz"Could not locate fragment %r in %r)rq   rw   rx   )r   r=   stmtrf   r!   r"   assert_contains   s   
z'op_fixture.<locals>.ctx.assert_containsN)r2   r3   r4   r~   r   r   r   r!   rf   r!   r"   ctx   s
    r   r,   literal_bindsTc                   s:   t | tr	t| } | jsJ t| jd} | d S r8   )
isinstancer;   r   supports_executionr<   r`   )r   
multiparamparamr=   )rA   ctx_dialectr!   r"   execute   s
   

zop_fixture.<locals>.execute)r9   r   rI   )r
   r   r   supports_native_boolean#non_native_boolean_check_constraintr   Mockr   alembicop_proxy)r9   r,   rn   r   native_booleanr&   r}   r   r   r+   rd   r!   )r,   rA   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   r/   r0   r1   r   r(   r   r   r   r
   metadatarr   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_transactionr1   beginr   drop_allcloserr   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_rm   )r   getr   r   r   r   _ensure_scope_for_ddlr1   creater	   get_columnsr   r   r   r   r   r   r   r   r   r   rO   )	r   from_to_comparecolumntinspold_colnew_colr!   r!   r"   _run_alter_col   sb   











	
z'AlterColRoundTripFixture._run_alter_colr.   )	r2   r3   r4   __requires__r   r   r   r   r   r!   r!   r!   r"   r      s    r   )r7   )rm   FNFN)6
__future__r   configparser
contextlibr   rV   rw   typingr   r   ri   r   r   r	   r
   r   r   r   r   sqlalchemy.testingr   r   sqlalchemy.testing.assertionsr   sqlalchemy.testing.fixturesr   r   SQLAlchemyTablesTestr   SQLAlchemyTestBaser   
assertionsr   environmentr   	migrationr   
operationsr   utilr   util.sqla_compatr   ConfigParsertesting_configreadr5   rD   rE   __annotations__r[   rl   r   r   r!   r!   r!   r"   <module>   s\    




T