
    +h#                    $   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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*  ejV                         Z,e,j[                  dg        G d de      Z G d d ee      Zd!e_.        d*d"Z/i Z0d#e1d$<   ed%        Z2ed&        Z3	 	 	 	 	 d+d'Z4 G d( d)      Z5y),    )annotationsN)contextmanager)Any)Dict)Columncreate_mock_engine)inspect)MetaData)String)Table)testing)text)config)mock)eq_)FutureEngineMixin)
TablesTest)TestBase   )_get_dialect   )EnvironmentContext)MigrationContext)
Operations)sqla_compat)sqla_2ztest.cfgc                      e Zd ZeZ ej                         d        Zej                  d        Zej                  d        Z	ej                  d        Z
y)r   c              #  t   K   |j                  d      5  t        |       d d d        y # 1 sw Y   y xY ww)NT)_per_migration)begin_transactionr   )selfmigration_contexts     K/var/www/html/venv/lib/python3.12/site-packages/alembic/testing/fixtures.pyops_contextzTestBase.ops_context)   s7     000E 	0.//	0 	0 	0s   8,	858c                D    t        j                  |t        d            S )NT)transaction_per_migrationoptsr   	configuredictr"   
connections     r$   r#   zTestBase.migration_context.   s    ))TDA
 	
    c                F    t        j                  |t        dd            S )NT)r'   as_sqlr(   r*   r-   s     r$   as_sql_migration_contextz!TestBase.as_sql_migration_context4   s!    ))TDN
 	
r/   c              #  z   K   t         j                  j                         5 }| d d d        y # 1 sw Y   y xY wwN)r   dbconnect)r"   conns     r$   r.   zTestBase.connection:   s1     YY  	DJ	 	 	s   ;/	;8;N)__name__
__module____qualname__r   is_sqlalchemy_futurer   fixturer%   r#   r2   r.    r/   r$   r   r   &   sk    !W__0 0 __
 

 __
 

 __ r/   r   c                      e Zd Zy)r   N)r8   r9   r:   r=   r/   r$   r   r   @   s    r/   r   Tc                6    g fd}t        | |      fS )Nc                n    j                  t        | j                  j                                     y N)dialect)appendstrcompilerB   )sqlmultiparamsparamsbufengines      r$   dumpzcapture_db.<locals>.dumpJ   s#    

3s{{6>>{:;<r/   r   )rB   rK   rI   rJ   s     @@r$   
capture_dbrL   G   s%    
C=  .F3;r/   zDict[Any, Any]_engsc               +  V   K    j                  dd      rt        j                         }nt        j                         } j	                  d|d       t
        j                   fd}t        j                  j                  t
        d|      5  | d d d        y # 1 sw Y   y xY ww)Nbytes_ioFsqlite)dialect_nameoutput_bufferc                 8     |j                   di   | i |S Nr=   updateargoptconfkws     r$   r+   z)capture_context_buffer.<locals>.configure^   $    

RS C  r/   r+   )
popioBytesIOStringIOrV   r   r+   r   patchobject)r[   rI   r+   rZ   s   `  @r$   capture_context_bufferrc   T   s~     	vvj% jjlkkmIIx#>?''D! 
		-{I	F 	  s   BB)B	B)B&"B)c               +     K   ddl m} ddlm} t	        j
                          |       }|j                         }|j                  |d      fd       } j                  d|i       t        j                   fd}t        j                  j                  t        d	|      5   d d d        y # 1 sw Y   y xY ww)
Nr   )_sqlite_file_dbr   )eventbefore_cursor_executec                .    j                  |dz          y )N
)write)r7   cursor	statement
parameterscontextexecutemanyrI   s         r$   bcez*capture_engine_context_buffer.<locals>.bceq   s    		)d"#r/   r.   c                 8     |j                   di   | i |S rT   rU   rW   s     r$   r+   z0capture_engine_context_buffer.<locals>.configurex   r\   r/   r+   )envre   
sqlalchemyrf   r^   r`   r6   listens_forrV   r   r+   r   ra   rb   )	r[   re   rf   engr7   rp   r+   rI   rZ   s	   `      @@r$   capture_engine_context_bufferrv   f   s     $ 
++-C

C;;=D
t45$ 6$ II|T"#''D! 
		-{I	F 	  s   B B?%B3*	B?3B<8B?c                j   i }|rt        |      |d<    G fdd      } |        G fddt              }r|d<   |r||d<   t        |       ||_        d	_        sfd
}t        j                  |      }	n|d<   d }	 ||	|      }
t        |
      t        j                  _
        |
S )N)naming_conventiontarget_metadatac                  $    e Zd Zd Z fdZd Zy)op_fixture.<locals>.buffer_c                    g | _         y r4   linesr"   s    r$   __init__z$op_fixture.<locals>.buffer_.__init__   s	    DJr/   c                    |j                         }t        j                  dd|      }r.t        j                  dd|      }t        j                  dd|      }| j                  j	                  |       y )N[\n\t] z    z\;\n*$)stripresubr~   rC   )r"   msgr1   s     r$   rj   z!op_fixture.<locals>.buffer_.write   s[    ))+C&&B,C ffWb#.ffYC0JJc"r/   c                     y r4   r=   r   s    r$   flushz!op_fixture.<locals>.buffer_.flush   s    r/   N)r8   r9   r:   r   rj   r   )r1   s   r$   buffer_r{      s    			#	r/   r   c                  6    e Zd Z fdZ fdZ fdZ fdZy)op_fixture.<locals>.ctxc                    S r4   r=   r"   rI   s    r$   get_bufzop_fixture.<locals>.ctx.get_buf   s    Jr/   c                $    g j                   d d  y r4   r}   r   s    r$   clear_assertionsz(op_fixture.<locals>.ctx.clear_assertions   s    CIIaLr/   c                    t        j                  |D cg c]  }t        j                  dd|       c}       y c c}w )Nr   r   )r   r~   r   r   )r"   rF   srI   s      r$   assert_zop_fixture.<locals>.ctx.assert_   s.     		cBBFF9b!4BCBs   <
c                    j                   D ]  }t        j                  dd|      |v s y  J d|dj                          )Nr   r   zCould not locate fragment z in )r~   r   r   )r"   rF   stmtrI   s      r$   assert_containsz'op_fixture.<locals>.ctx.assert_contains   sI    		 66)R-5II ur/   N)r8   r9   r:   r   r   r   r   )rI   s   r$   ctxr      s    			D
	r/   r   r1   literal_bindsTc                    t        | t              rt        |       } | j                  sJ t        | j	                              }j                  |       y rA   )
isinstancerD   r   supports_executionrE   rj   )r   
multiparamparamrF   rI   ctx_dialects       r$   executezop_fixture.<locals>.execute   sE    $$Dz****dll;l78CIIcNr/   )rB   r   rR   )r   r   r   supports_native_boolean#non_native_boolean_check_constraintr   Mockr   alembicop_proxy)rB   r1   rx   r   native_booleanr)   r   r   r   r.   rn   rI   r   s    `         @@r$   
op_fixturer      s     D"*=N"O $ )C , X -_w'K!.<+ ;?7	 YY{GD
 #_
+z40G"7+GJJNr/   c                  0    e Zd ZdZd Zd Zd Zd ZddZy)	AlterColRoundTripFixture)alter_columnc                    t         j                  j                         | _        t	        j
                  | j                        | _        t        | j                        | _        t               | _
        y r4   )r   r5   r6   r7   r   r+   r   r   r   r   metadatar   s    r$   setUpzAlterColRoundTripFixture.setUp   sE    II%%'	#--dii8TXX& 
r/   c                    t        d|      }t        d|      }| j                  j                  j                  ||      rJ d|d|d       y )NqzType objects  and  didn't compare as equivalent)r   r   implcompare_type)r"   t1t2c1c2s        r$   _compare_typez&AlterColRoundTripFixture._compare_type   sQ    C_C_88==--
 	LDFK	L 
 
r/   c                    t        d||      }t        d||      }| j                  j                  j                  ||||      rJ d|d|d       y )Nr   )server_defaultzserver defaults r   r   )r   r   r   compare_server_default)r"   r   s1r   s2r   r   s          r$   _compare_server_defaultz0AlterColRoundTripFixture._compare_server_default   s[    CB/CB/88==77B
 	OGI2N	O 
 
r/   c                   t        j                  | j                         | j                  j                         5  | j                  j                  | j                         d d d        | j                  j                          y # 1 sw Y   $xY wr4   )r   %_safe_rollback_connection_transactionr7   beginr   drop_allcloser   s    r$   tearDownz!AlterColRoundTripFixture.tearDown   s[    99$))DYY__ 	.MM""499-	.			. 	.s   &BBNc                V   t        |j                  dd      |j                  dt        d            |j                  dd      |j                  dd             }t        d	| j                  |      }t        j                  | j                        5  |j                  | j                         t        | j                        }|j                  d	      d
   }| j                  j                  d	|j                  |j                  |j                  |j                  nd|j                   rdnd|j                  dd       |j                  dd      |j                  dd       |j                  dd       	       d d d        t        | j                        }|j                  d	      d
   }||}t#        |d   d|v r|d   n|j                         | j%                  |d   |j                  dd                t#        |d   |j                  d|j                                | j'                  |d   |j                  dd       |j                  d|d         d|v r|d   j(                         y |j                  %|j                  j*                  j(                         y d        y # 1 sw Y   .xY w)Nnamecolnametype
   nullableTr   )r   r   xr   F)existing_typeexisting_server_defaultexisting_nullabler   r   new_column_nametype_default)r   getr   r   r   r   _ensure_scope_for_ddlr7   creater
   get_columnsr   r   r   r   r   r   r   r   r   r   rX   )	r"   from_to_comparecolumntinspold_colnew_cols	            r$   _run_alter_colz'AlterColRoundTripFixture._run_alter_col   s`   IIfi(IIffRj)YYz40 99%5t<	
 #t}}f-..tyy9 	HHTYY499%D&&s+A.G GG  $kk ,,8 ))*0//$uT2"ww'7? # 5ggfd+ ! 	0 tyy!""3'*?GFO%0GFOfkk	
 	FOW[[A	
 	GJZ!IJ$$FOKK	4(KK0 $w. ()..	
 ,,8 ))--22	
 	
M	 	s   C#JJ(r4   )	r8   r9   r:   __requires__r   r   r   r   r   r=   r/   r$   r   r      s$    
 %L#LO=
r/   r   )zpostgresql://)r   FNFN)6
__future__r   configparser
contextlibr   r^   r   typingr   r   rs   r   r	   r
   r   r   r   r   r   sqlalchemy.testingr   r   sqlalchemy.testing.assertionsr   sqlalchemy.testing.fixturesr   r   SQLAlchemyTablesTestr   SQLAlchemyTestBaser   
assertionsr   environmentr   	migrationr   
operationsr   utilr   util.sqla_compatr   ConfigParsertesting_configreadr;   rL   rM   __annotations__rc   rv   r   r   r=   r/   r$   <module>r      s    "  % 	 	    )       % # - 9 J F  $ , ( #  % +**,   ZL !! 4	/ 	 *.  & ~   "  4 Qh^
 ^
r/   