o
    Df#                     @  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- Z4	.	/		/	d5d0d1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    d S 1 sw   Y  d S )NT)_per_migration)begin_transactionr   )selfmigration_context r!   Q/home/ubuntu/webapp/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  s8    t j }|V  W d    d S 1 sw   Y  d S N)r   dbconnect)r   connr!   r!   r"   r(   4   s   "zTestBase.connectionN)
__name__
__module____qualname__r   is_sqlalchemy_futurer   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 )r2   )sqlalchemy_14N)r-   r.   r/   __requires__r!   r!   r!   r"   r2   B   s    r2   Tpostgresql://c                   s$   g   fdd}t | | fS )Nc                   s     t| jjd d S N)dialect)appendstrcompiler7   )sqlmultiparamsparamsbufenginer!   r"   dumpL   s   zcapture_db.<locals>.dumpr   )r7   rA   r!   r>   r"   
capture_dbI   s   
rB   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StringIOrK   r   r&   r   patchobject)rQ   r?   r&   r!   rO   r"   capture_context_bufferV   s   
"rY   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)r,   cursor	statement
parameterscontextexecutemanyr?   r!   r"   bces   s   z*capture_engine_context_buffer.<locals>.bcer(   c                    rH   rI   rJ   rL   rO   r!   r"   r&   z   rR   z0capture_engine_context_buffer.<locals>.configurer&   )envrZ   
sqlalchemyr[   rT   rV   r+   listens_forrK   r   r&   r   rW   rX   )rQ   rZ   r[   engr,   re   r&   r!   )r?   rP   rQ   r"   capture_engine_context_bufferh   s   
"rj   defaultFc                   s   i }|rt |d|d< G  fddd}| G fdddt} r' |d< |r-||d< ts;| d	kr;td
d_nt| |d urI|_d_ sZ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subro   r8   )r   msgas_sqlr!   r"   r^      s   z!op_fixture.<locals>.buffer_.writec                 S  s   d S r)   r!   rp   r!   r!   r"   flush      z!op_fixture.<locals>.buffer_.flushN)r-   r.   r/   rq   r^   rz   r!   rx   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!   rp   rd   r!   r"   get_buf   r{   zop_fixture.<locals>.ctx.get_bufc                   s   g  j d d < d S r)   rn   rp   rd   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 )rr   rs   )ru   rv   ).0sr!   r!   r"   
<listcomp>   s    z3op_fixture.<locals>.ctx.assert_.<locals>.<listcomp>)r   ro   )r   r;   rd   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 )Nrr   rs   Fz"Could not locate fragment %r in %r)ro   ru   rv   )r   r;   stmtrd   r!   r"   assert_contains   s   
z'op_fixture.<locals>.ctx.assert_containsN)r-   r.   r/   r}   r~   r   r   r!   rd   r!   r"   ctx   s
    r   ry   literal_bindsmariadbmysql)
      r   MariaDBTc                   s:   t | tr	t| } | jsJ t| jd} | d S r6   )
isinstancer9   r   supports_executionr:   r^   )r   
multiparamparamr;   )r?   ctx_dialectr!   r"   execute   s
   

zop_fixture.<locals>.execute)r7   r   rG   )r   r   r   r   server_version_infosupports_native_boolean#non_native_boolean_check_constraintr   Mockr   alembicop_proxy)r7   ry   rl   r   native_booleanr%   r|   r   r   r(   rb   r!   )ry   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&   r   r   r   r   metadatarp   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_transactionr,   beginr   drop_allcloserp   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typer   nullableTr   )r   r   xr   F)existing_typeexisting_server_defaultexisting_nullabler   r   new_column_nametype_rk   )r   getr	   r
   r   r   _ensure_scope_for_ddlr,   creater   get_columnsr   r   r   r   r   r   r   r   r   r   rM   )	r   from_to_comparecolumntinspold_colnew_colr!   r!   r"   _run_alter_col   sb   











z'AlterColRoundTripFixture._run_alter_colr)   )	r-   r.   r/   r4   r   r   r   r   r   r!   r!   r!   r"   r      s    r   )r5   )rk   FNFN)7
__future__r   configparser
contextlibr   rT   ru   typingr   r   rg   r   r   r   r	   r
   r   r   sqlalchemy.testingr   r   sqlalchemy.testing.assertionsr   sqlalchemy.testing.fixturesr   SQLAlchemyTablesTestr   SQLAlchemyTestBaser   
assertionsr   environmentr   	migrationr   
operationsr   utilr   util.sqla_compatr   r   r   ConfigParsertesting_configreadr2   r0   rB   rC   __annotations__rY   rj   r   r   r!   r!   r!   r"   <module>   sb    




X