U
    ^g%i$                     @  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_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 5 Q R X d S )NT)Z_per_migration)Zbegin_transactionr   )selfmigration_context r   W/var/www/html/api-medvista/venv/lib/python3.8/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  s    t j }|V  W 5 Q R X d S N)r   dbconnect)r   connr   r   r    r)   :   s    zTestBase.connectionN)__name__
__module____qualname__r   is_sqlalchemy_futurer   Zfixturer!   r   r+   r)   r   r   r   r    r   &   s   


r   c                   @  s   e Zd ZdS )r   N)r0   r1   r2   r   r   r   r    r   @   s   r   )FutureEngineMixinc                   @  s   e Zd ZdZdS )r4   )Zsqlalchemy_14N)r0   r1   r2   __requires__r   r   r   r    r4   H   s   r4   Tpostgresql://c                   s$   g   fdd}t | | fS )Nc                   s     t| jjd d S N)dialect)appendstrcompiler8   )sqlZmultiparamsparamsbufZenginer   r    dumpR   s    zcapture_db.<locals>.dumpr   )r8   r@   r   r>   r    
capture_dbO   s    
rA   zDict[Any, Any]_engsc               	   +  sh    ddrt }nt }d|d tj  fdd}tj	td| |V  W 5 Q R X d S )NZbytes_ioFZsqlite)Zdialect_nameoutput_bufferc                    s   |j f   | |S r,   updateargoptconfkwr   r    r&   f   s    z)capture_context_buffer.<locals>.configurer&   )
popioBytesIOStringIOrE   r   r&   r   patchobject)rK   r?   r&   r   rI   r    capture_context_buffer\   s    
rR   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 5 Q R X d S )Nr   )_sqlite_file_dbr   )eventZbefore_cursor_executec                   s     |d  d S )N
)write)r/   cursorZ	statement
parameterscontextZexecutemanyr?   r   r    bcey   s    z*capture_engine_context_buffer.<locals>.bcer)   c                    s   |j f   | |S r,   rD   rF   rI   r   r    r&      s    z0capture_engine_context_buffer.<locals>.configurer&   )envrS   
sqlalchemyrT   rM   rO   r.   Zlistens_forrE   r   r&   r   rP   rQ   )rK   rS   rT   Zengr/   r[   r&   r   )r?   rJ   rK   r    capture_engine_context_buffern   s    
r^   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 k	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subrb   r9   )r   msgr*   r   r    rV      s    z!op_fixture.<locals>.buffer_.writec                 S  s   d S r,   r   rc   r   r   r    flush   s    z!op_fixture.<locals>.buffer_.flushN)r0   r1   r2   rd   rV   rl   r   rk   r   r    buffer_   s   rm   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   rc   rZ   r   r    get_buf   s    zop_fixture.<locals>.ctx.get_bufc                   s   g  j d d < d S r,   ra   rc   rZ   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 )re   rf   )rh   ri   ).0sr   r   r    
<listcomp>   s     z3op_fixture.<locals>.ctx.assert_.<locals>.<listcomp>)r   rb   )r   r<   rZ   r   r    assert_   s    zop_fixture.<locals>.ctx.assert_c                   s>    j D ]}tdd||kr d S qds:td| j f d S )Nre   rf   Fz"Could not locate fragment %r in %r)rb   rh   ri   AssertionError)r   r<   stmtrZ   r   r    assert_contains   s    
z'op_fixture.<locals>.ctx.assert_containsN)r0   r1   r2   rn   ro   rs   rv   r   rZ   r   r    ctx   s   rw   r*   literal_bindsZmariadbmysql)
      r   ZMariaDBTc                   s:   t | trt| } | jstt| jd} | d S r7   )
isinstancer:   r   Zsupports_executionrt   r;   rV   )ru   Z
multiparamparamr<   )r?   ctx_dialectr   r    execute   s
    

zop_fixture.<locals>.execute)r8   r   rC   )r   r   r   r   Zserver_version_infoZsupports_native_booleanZ#non_native_boolean_check_constraintr   ZMockr   alembicop_proxy)r8   r*   r`   rx   Znative_booleanr$   rm   rw   r   r)   rY   r   )r*   r?   r~   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&   rw   r   r   r   metadatarc   r   r   r    setUp   s    zAlterColRoundTripFixture.setUpc                 C  s8   t d|}t d|}| jj||r4td||f d S )Nqz3Type objects %r and %r didn't compare as equivalent)r   rw   implZcompare_typert   )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@td||f d S )Nr   )server_defaultz6server defaults %r and %r didn't compare as equivalent)r   rw   r   Zcompare_server_defaultrt   )r   r   s1r   s2r   r   r   r   r    _compare_server_default   s       
z0AlterColRoundTripFixture._compare_server_defaultc              	   C  s>   t | j | j  | j| j W 5 Q R X | j  d S r,   )r   Z%_safe_rollback_connection_transactionr/   beginr   Zdrop_allcloserc   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 k	r|jnd|jrdnd|dd |dd|dd |dd d	 W 5 Q R X t	| j}|
d	d
 }|d kr|}t|d d|kr|d n|j | |d |d|d  t|d |d|j | |d |dd |d|d d|kr|d jn|jd k	r|jjjnd  d S )NnameZcolnametyperz   nullableTr   )r   r   xr   F)Zexisting_typeZexisting_server_defaultZexisting_nullabler   r   Znew_column_nametype_r_   )r   getr	   r
   r   r   Z_ensure_scope_for_ddlr/   creater   Zget_columnsr   r   r   r   r   r   r   r   r   r   rG   )	r   Zfrom_Zto_comparecolumntZinspZold_colZnew_colr   r   r    _run_alter_col  s^    








 
z'AlterColRoundTripFixture._run_alter_col)N)	r0   r1   r2   r5   r   r   r   r   r   r   r   r   r    r      s   r   )r6   )r_   FNFN)7
__future__r   configparser
contextlibr   rM   rh   typingr   r   r]   r   r   r   r	   r
   r   r   Zsqlalchemy.testingr   r   Zsqlalchemy.testing.assertionsr   Zsqlalchemy.testing.fixturesr   ZSQLAlchemyTablesTestr   ZSQLAlchemyTestBaser   Z
assertionsr   environmentr   Z	migrationr   
operationsr   utilr   Zutil.sqla_compatr   r   r   ConfigParserZtesting_configreadr4   r3   rA   rB   __annotations__rR   r^   r   r   r   r   r   r    <module>   sb    



     
X