B
    f#                 @  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               @  s<   e Zd ZeZe 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 Q R X d S )NT)Z_per_migration)Zbegin_transactionr   )selfmigration_context r   ZC:\Users\Lenovo\AppData\Local\Temp\pip-unpacked-wheel-q6xnih48\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   .   s    zTestBase.migration_contextc          	   c  s    t j }|V  W d Q R X d S )N)r   dbconnect)r   connr   r   r   r$   4   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,   B   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compiler/   )sqlZmultiparamsparams)bufenginer   r   dumpL   s    zcapture_db.<locals>.dump)r   )r/   r7   r   )r5   r6   r   
capture_dbI   s    
r8   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 d Q R X d S )NZbytes_ioFZsqlite)Zdialect_nameoutput_bufferc                s   |j f   | |S )N)update)argopt)confkwr   r   r"   `   s    z)capture_context_buffer.<locals>.configurer"   )
popioBytesIOStringIOr;   r   r"   r   patchobject)r?   r5   r"   r   )r>   r?   r   capture_context_bufferV   s    
rF   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 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)r5   r   r   bces   s    z*capture_engine_context_buffer.<locals>.bcer$   c                s   |j f   | |S )N)r;   )r<   r=   )r>   r?   r   r   r"   z   s    z0capture_engine_context_buffer.<locals>.configurer"   )envrG   
sqlalchemyrH   rA   rC   r&   Zlistens_forr;   r   r"   r   rD   rE   )r?   rG   rH   Zengr'   rN   r"   r   )r5   r>   r?   r   capture_engine_context_bufferh   s    rQ   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 )N)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 )Nz[\n\t] z    z\;\n*$)stripresubrT   r0   )r   msg)as_sqlr   r   rJ      s    z!op_fixture.<locals>.buffer_.writec             S  s   d S )Nr   )r   r   r   r   flush   s    z!op_fixture.<locals>.buffer_.flushN)r(   r)   r*   rU   rJ   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 )Nr   )r   )r5   r   r   get_buf   s    zop_fixture.<locals>.ctx.get_bufc               s   g  j d d < d S )N)rT   )r   )r5   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 )z[\n\t]rV   )rX   rY   ).0sr   r   r   
<listcomp>   s    z3op_fixture.<locals>.ctx.assert_.<locals>.<listcomp>)r   rT   )r   r3   )r5   r   r   assert_   s    zop_fixture.<locals>.ctx.assert_c               s@   x: j D ]}tdd||krd S qW ds<td| j f d S )Nz[\n\t]rV   Fz"Could not locate fragment %r in %r)rT   rX   rY   AssertionError)r   r3   stmt)r5   r   r   assert_contains   s    z'op_fixture.<locals>.ctx.assert_containsN)r(   r)   r*   r^   r_   rc   rf   r   )r5   r   r   ctx   s   rg   r[   literal_bindsZmariadbZmysql)
      r   ZMariaDBTc               s:   t | trt| } | jstt| jd} | d S )N)r/   )
isinstancer1   r   Zsupports_executionrd   r2   rJ   )re   Z
multiparamparamr3   )r5   ctx_dialectr   r   execute   s
    

zop_fixture.<locals>.execute)r/   rn   r:   )r   r   r   r   Zserver_version_infoZsupports_native_booleanZ#non_native_boolean_check_constraintr   ZMockr   alembicop_proxy)r/   r[   rS   rh   Znative_booleanr!   r]   rg   rn   r$   rM   r   )r[   r5   rm   r   
op_fixture   s2    rr   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 )N)r   r%   r&   r'   r   r"   rg   r   rp   r   metadata)r   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   rg   implZcompare_typerd   )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 )Nrw   )server_defaultz6server defaults %r and %r didn't compare as equivalent)r   rg   rx   Zcompare_server_defaultrd   )r   ry   s1rz   s2r{   r|   r   r   r   _compare_server_default   s
    z0AlterColRoundTripFixture._compare_server_defaultc          	   C  s>   t | j | j  | j| j W d Q R X | j  d S )N)r   Z%_safe_rollback_connection_transactionr'   beginru   Zdrop_allclose)r   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 d 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typeri   nullableTr~   )r   r~   xr   F)Zexisting_typeZexisting_server_defaultZexisting_nullabler   r~   Znew_column_nametype_rR   )r   getr	   r
   ru   r   Z_ensure_scope_for_ddlr'   creater   Zget_columnsrp   rt   r   r   r~   r   r   r}   r   r   r<   )	r   from_to_comparecolumntZinspZold_colZnew_colr   r   r   _run_alter_col   sL    







z'AlterColRoundTripFixture._run_alter_col)N)	r(   r)   r*   r-   rv   r}   r   r   r   r   r   r   r   rs      s   rs   )r.   )rR   FNFN)7
__future__r   configparser
contextlibr   rA   rX   typingr   r   rP   r   r   r   r	   r
   r   r   Zsqlalchemy.testingr   r   Zsqlalchemy.testing.assertionsr   Zsqlalchemy.testing.fixturesr   ZSQLAlchemyTablesTestr   ZSQLAlchemyTestBasero   Z
assertionsr   environmentr   Z	migrationr   
operationsr   utilr   Zutil.sqla_compatr   r   r   ConfigParserZtesting_configreadr,   r+   r8   r9   __annotations__rF   rQ   rr   rs   r   r   r   r   <module>   s\    

    
S