o
    @j$                     @  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                   @  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!   g/var/www/www-root/data/www/ai-bot.pdev.uz/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   )FutureEngineMixinc                   @  s   e Zd ZdZdS )r7   )sqlalchemy_14N)r2   r3   r4   __requires__r!   r!   r!   r"   r7   H   s    r7   Tpostgresql://c                   s$   g   fdd}t | | fS )Nc                   s     t| jjd d S N)dialect)appendstrcompiler<   )sqlmultiparamsparamsbufenginer!   r"   dumpR   s   zcapture_db.<locals>.dumpr   )r<   rF   r!   rC   r"   
capture_dbO   s   
rG   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(   f      z)capture_context_buffer.<locals>.configurer(   )
popioBytesIOStringIOrP   r   r(   r   patchobject)rV   rD   r(   r!   rT   r"   capture_context_buffer\   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rD   r!   r"   bcey   s   z*capture_engine_context_buffer.<locals>.bcer+   c                    rM   rN   rO   rQ   rT   r!   r"   r(      rW   z0capture_engine_context_buffer.<locals>.configurer(   )envr_   
sqlalchemyr`   rY   r[   r0   listens_forrP   r   r(   r   r\   r]   )rV   r_   r`   engr1   rj   r(   r!   )rD   rU   rV   r"   capture_engine_context_buffern   s   
"ro   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subrt   r=   )r   msgr,   r!   r"   rc      s   z!op_fixture.<locals>.buffer_.writec                 S  s   d S r.   r!   ru   r!   r!   r"   flush      z!op_fixture.<locals>.buffer_.flushN)r2   r3   r4   rv   rc   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 r.   r!   ru   ri   r!   r"   get_buf   r   zop_fixture.<locals>.ctx.get_bufc                   s   g  j d d < d S r.   rs   ru   ri   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 )rw   rx   )rz   r{   ).0sr!   r!   r"   
<listcomp>   s    z3op_fixture.<locals>.ctx.assert_.<locals>.<listcomp>)r   rt   )r   r@   ri   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 )Nrw   rx   Fz"Could not locate fragment %r in %r)rt   rz   r{   )r   r@   stmtri   r!   r"   assert_contains   s   
z'op_fixture.<locals>.ctx.assert_containsN)r2   r3   r4   r   r   r   r   r!   ri   r!   r"   ctx   s
    r   r,   literal_bindsmariadbmysql)
      r   MariaDBTc                   s:   t | tr	t| } | jsJ t| jd} | d S r;   )
isinstancer>   r   supports_executionr?   rc   )r   
multiparamparamr@   )rD   ctx_dialectr!   r"   execute   s
   

zop_fixture.<locals>.execute)r<   r   rL   )r   r   r   r   server_version_infosupports_native_boolean#non_native_boolean_check_constraintr   Mockr   alembicop_proxy)r<   r,   rq   r   native_booleanr&   r   r   r   r+   rg   r!   )r,   rD   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/   r0   r1   r   r(   r   r   r   r   metadataru   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closeru   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_rp   )r   getr	   r
   r   r   _ensure_scope_for_ddlr1   creater   get_columnsr   r   r   r   r   r   r   r   r   r   rR   )	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   r9   r   r   r   r   r   r!   r!   r!   r"   r      s    r   )r:   )rp   FNFN)7
__future__r   configparser
contextlibr   rY   rz   typingr   r   rl   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readr7   r5   rG   rH   __annotations__r^   ro   r   r   r!   r!   r!   r"   <module>   sb    




X