o
    8ce#                     @   s  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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( 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#e-Z,d$e,_.d2d&d'Z/i Z0ed(d) Z1ed*d+ Z2	,	-		-	d3d.d/Z3G d0d1 d1e-Z4dS )4    )contextmanagerN)Column)inspect)MetaData)String)Table)testing)text)config)mock)eq_)
TablesTest)TestBase   )_get_dialect   )EnvironmentContext)MigrationContext)
Operations)compat)sqla_compat)configparser)string_types)	text_typecreate_mock_engine)sqla_14ztest.cfgc                   @   s<   e Zd ZdZe dd Zejdd Zejdd ZdS )	r   Fc                 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!   N/var/www/html/gps/gps/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(   3   s   "zTestBase.connectionN)	__name__
__module____qualname__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   9   s    r   )FutureEngineMixinc                   @   s   e Zd ZdZdS )r2   )sqlalchemy_14N)r-   r.   r/   __requires__r!   r!   r!   r"   r2   A   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"   dumpK   s   zcapture_db.<locals>.dumpr   )r7   rA   r!   r>   r"   
capture_dbH   s   
rB   c                  +   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StringIOrJ   r   r&   r   patchobject)rP   r?   r&   r!   rN   r"   capture_context_bufferU   s   
"rX   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"   bcer   s   z*capture_engine_context_buffer.<locals>.bcer(   c                     rG   rH   rI   rK   rN   r!   r"   r&   y   rQ   z0capture_engine_context_buffer.<locals>.configurer&   )envrY   
sqlalchemyrZ   r   rU   r+   listens_forrJ   r   r&   r   rV   rW   )rP   rY   rZ   engr,   rd   r&   r!   )r?   rO   rP   r"   capture_engine_context_bufferg   s   
"ri   defaultFc                    s   i }|rt |d|d< G  fdddt}| G fdddt} r( |d< |r.||d< ts<| d	kr<td
d_nt| |d urJ|_d_ s[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subrn   r8   )r   msgas_sqlr!   r"   r]      s   z!op_fixture.<locals>.buffer_.writec                 S   s   d S r)   r!   ro   r!   r!   r"   flush      z!op_fixture.<locals>.buffer_.flushN)r-   r.   r/   rp   r]   ry   r!   rw   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!   ro   rc   r!   r"   get_buf   rz   zop_fixture.<locals>.ctx.get_bufc                    s   g  j d d < d S r)   rm   ro   rc   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 )rq   rr   )rt   ru   ).0sr!   r!   r"   
<listcomp>   s    z3op_fixture.<locals>.ctx.assert_.<locals>.<listcomp>)r   rn   )r   r;   rc   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 )Nrq   rr   Fz"Could not locate fragment %r in %r)rn   rt   ru   )r   r;   stmtrc   r!   r"   assert_contains   s   
z'op_fixture.<locals>.ctx.assert_containsN)r-   r.   r/   r|   r}   r   r   r!   rc   r!   r"   ctx   s
    r   rx   literal_bindsmariadbmysql)
      r   MariaDBTc                    s:   t | tr	t| } | jsJ t| jd} | d S r6   )
isinstancer   r	   supports_executionr   r:   r]   )r   
multiparamparamr;   )r?   ctx_dialectr!   r"   execute   s
   

zop_fixture.<locals>.execute)r7   r   rF   )r   rW   r   r   r   server_version_infosupports_native_boolean#non_native_boolean_check_constraintr   Mockr   alembicop_proxy)r7   rx   rk   r   native_booleanr%   r{   r   r   r(   ra   r!   )rx   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   metadataro   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   sF   | j   | j| j  W d    n1 sw   Y  | j   d S r)   )r,   beginr   drop_allclosero   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_rj   )r   getr   r   r   r   _ensure_scope_for_ddlr,   creater   get_columnsr   r   r   r   r   r   r   r   r   r	   rL   )	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   )rj   FNFN)5
contextlibr   rS   rt   rf   r   r   r   r   r   r   r	   sqlalchemy.testingr
   r   sqlalchemy.testing.assertionsr   sqlalchemy.testing.fixturesr   SQLAlchemyTablesTestr   SQLAlchemyTestBaser   
assertionsr   environmentr   	migrationr   
operationsr   utilr   r   util.compatr   r   r   util.sqla_compatr   r   ConfigParsertesting_configreadr2   rW   r0   rB   _engsrX   ri   r   r   r!   r!   r!   r"   <module>   s`   




Y