a
    g	g#                     @  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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,e,-dg G dd deZG dd  d eeZe)rd d!lm.Z. nG d"d# d#Z.d$e._/d4d&d'Z0i Z1d(e2d)< ed*d+ Z3ed,d- Z4d5d0d1Z5G d2d3 d3Z6dS )6    )annotationsN)contextmanager)Any)Dict)Column)inspect)MetaData)String)Table)testing)text)config)mock)eq_)
TablesTest)TestBase   )_get_dialect   )EnvironmentContext)MigrationContext)
Operations)sqla_compatcreate_mock_engine)sqla_14)sqla_1xztest.cfgc                   @  sF   e Zd ZerdZndZe dd Zejdd Zejdd Z	d	S )
r   FTc                 c  s:   |j dd t|V  W d    n1 s,0    Y  d S )NT)Z_per_migration)Zbegin_transactionr   )selfmigration_context r   [/var/www/html/llm_bihealth/app/venv/lib/python3.9/site-packages/alembic/testing/fixtures.pyops_context,   s    zTestBase.ops_contextc                 C  s   t j|tdddS )NT)Ztransaction_per_migration)opts)r   	configuredict)r   
connectionr   r   r    r   1   s    
zTestBase.migration_contextc                 c  s4   t j }|V  W d    n1 s&0    Y  d S N)r   dbconnect)r   connr   r   r    r%   7   s    zTestBase.connectionN)
__name__
__module____qualname__r   is_sqlalchemy_futurer   Zfixturer!   r   r%   r   r   r   r    r   &   s   

r   c                   @  s   e Zd ZdS )r   N)r*   r+   r,   r   r   r   r    r   =   s   r   )FutureEngineMixinc                   @  s   e Zd ZdZdS )r.   )Zsqlalchemy_14N)r*   r+   r,   __requires__r   r   r   r    r.   E   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compiler2   )sqlZmultiparamsparamsbufZenginer   r    dumpO   s    zcapture_db.<locals>.dumpr   )r2   r:   r   r8   r    
capture_dbL   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    n1 sn0    Y  d S )NZbytes_ioFZsqlite)Zdialect_nameoutput_bufferc                    s   |j f i   | i |S r&   updateargoptconfkwr   r    r#   c   s    z)capture_context_buffer.<locals>.configurer#   )
popioBytesIOStringIOr?   r   r#   r   patchobject)rE   r9   r#   r   rC   r    capture_context_bufferY   s    
rL   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    n1 s0    Y  d S )Nr   )_sqlite_file_dbr   )eventZbefore_cursor_executec                   s     |d  d S )N
)write)r)   cursorZ	statement
parameterscontextZexecutemanyr9   r   r    bcev   s    z*capture_engine_context_buffer.<locals>.bcer%   c                    s   |j f i   | i |S r&   r>   r@   rC   r   r    r#   }   s    z0capture_engine_context_buffer.<locals>.configurer#   )envrM   
sqlalchemyrN   rG   rI   r(   Zlistens_forr?   r   r#   r   rJ   rK   )rE   rM   rN   Zengr)   rU   r#   r   )r9   rD   rE   r    capture_engine_context_bufferk   s    
rX   defaultFc                   s   i }|rt |d|d< G  fddd}| G fdddt} rN |d< |rZ||d< tsv| d	krvtd
d_nt| |d ur|_d_ sfdd}tj|d}	n|d< d }	||	|}
t	|
t
j_|
S )N)naming_conventionZ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|} r6tdd|}tdd|}| j| d S )N[\n\t] z    z\;\n*$)stripresubr\   r3   )r   msgas_sqlr   r    rP      s    z!op_fixture.<locals>.buffer_.writec                 S  s   d S r&   r   r]   r   r   r    flush   s    z!op_fixture.<locals>.buffer_.flushN)r*   r+   r,   r^   rP   rg   r   re   r   r    buffer_   s   rh   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   r]   rT   r   r    get_buf   s    zop_fixture.<locals>.ctx.get_bufc                   s   g  j d d < d S r&   r[   r]   rT   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`   )rb   rc   ).0sr   r   r    
<listcomp>       z3op_fixture.<locals>.ctx.assert_.<locals>.<listcomp>)r   r\   )r   r6   rT   r   r    assert_   s    zop_fixture.<locals>.ctx.assert_c                   s>    j D ]}tdd||v r d S qds:J d| j f d S )Nr_   r`   Fz"Could not locate fragment %r in %r)r\   rb   rc   )r   r6   stmtrT   r   r    assert_contains   s    
z'op_fixture.<locals>.ctx.assert_containsN)r*   r+   r,   ri   rj   ro   rq   r   rT   r   r    ctx   s   rr   rf   literal_bindsZmariadbZmysql)
      r   ZMariaDBTc                   s:   t | trt| } | jsJ t| jd} | d S r1   )
isinstancer4   r   Zsupports_executionr5   rP   )rp   Z
multiparamparamr6   )r9   ctx_dialectr   r    execute   s
    

zop_fixture.<locals>.execute)r2   ry   r=   )r   r   r   r   Zserver_version_infoZsupports_native_booleanZ#non_native_boolean_check_constraintr   ZMockr   alembicop_proxy)r2   rf   rZ   rs   Znative_booleanr"   rh   rr   ry   r%   rS   r   )rf   r9   rx   r    
op_fixture   s2    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'   r(   r)   r   r#   rr   r   r{   r   metadatar]   r   r   r    setUp   s    zAlterColRoundTripFixture.setUpc                 C  s8   t d|}t d|}| jj||r4J d||f d S )Nqz3Type objects %r and %r didn't compare as equivalent)r   rr   implZ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   rr   r   Z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:0    Y  | j  d S r&   )r   Z%_safe_rollback_connection_transactionr)   beginr   Zdrop_allcloser]   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 || j t	| j}|
d	d
 }| jjd	|j|j|jd ur|jnd|jrdnd|dd |dd|dd |dd d	 W d    n1 s0    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n|jd ur|jjjnd  d S )NnameZcolnametypert   nullableTr   )r   r   xr   F)Zexisting_typeZexisting_server_defaultZexisting_nullabler   r   Znew_column_nametype_rY   )r   getr	   r
   r   r   Z_ensure_scope_for_ddlr)   creater   Zget_columnsr{   r   r   r   r   r   r   r   r   r   rA   )	r   from_to_comparecolumntZinspZold_colZnew_colr   r   r    _run_alter_col   s\    







$


z'AlterColRoundTripFixture._run_alter_col)N)	r*   r+   r,   r/   r   r   r   r   r   r   r   r   r    r~      s   r~   )r0   )rY   FNFN)7
__future__r   configparser
contextlibr   rG   rb   typingr   r   rW   r   r   r   r	   r
   r   r   Zsqlalchemy.testingr   r   Zsqlalchemy.testing.assertionsr   Zsqlalchemy.testing.fixturesr   ZSQLAlchemyTablesTestr   ZSQLAlchemyTestBaserz   Z
assertionsr   environmentr   Z	migrationr   
operationsr   utilr   Zutil.sqla_compatr   r   r   ConfigParserZtesting_configreadr.   r-   r;   r<   __annotations__rL   rX   r}   r~   r   r   r   r    <module>   s`   



     
Y