
    D6i.                       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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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l0m1Z1 dd l2m3Z3  ejh                         Z5e5jm                  d!g        G d" d#e"      Z!da7 G d$ d%e!e       Zd&e_8        d1d'Z9i Z:d(e;d)<   ee	 	 	 	 	 	 d2d*              Z<ee	 	 	 	 d3d+              Z<e	 	 	 	 d4d,       Z<e	 	 	 	 d3d-       Z=	 	 	 	 	 d5d.Z> G d/ d0      Z?y)6    )annotationsN)contextmanager)Any)Dict)	Generator)Literal)overload)Columncreate_mock_engine)inspect)MetaData)String)Table)testing)text)config)mock)eq_)FutureEngineMixin)
TablesTest)TestBase)drop_all_tables_from_metadata   )_get_dialect)_get_staging_directory   )EnvironmentContext)MigrationContext)
Operations)sqla_compat)sqla_2ztest.cfgc                  j   e Zd ZeZ ej                         d        Zedd       Z	 ej                         d        Z
 ej                         d        Zej                  d        Zej                  d        Zej                  d        Zej                  d        Z ej                         d	        Zy
)r   c              #    K   d  t               }t        j                  |      D ]  }t        j                  j	                  ||      }t        j                  j                  |      st        j                  j                  |      rt        j                  |       wt        j                  j                  |      st        j                  |        y wN)r   oslistdirpathjoinisfileislinkunlinkisdirshutilrmtree)selflocationfilename	file_paths       [/home/azureuser/techstart-app/venv/lib/python3.12/site-packages/alembic/testing/fixtures.pyclear_staging_dirzTestBase.clear_staging_dir/   s     )+

8, 	)HXx8Iww~~i(BGGNN9,E		)$y)i(	)s   B:C=Cc              #     K   t        j                         }	 t        j                  |       d  t        j                  |       y # t        j                  |       w xY wwr%   )r&   getcwdchdir)r0   dirnamecurrent_dirs      r4   pushdzTestBase.pushd:   s=     iik	"HHWHH[!BHH[!s   A!A A!AA!c              #  T   K   d  t         j                  j                  dd        y w)NALEMBIC_CONFIG)r&   environpopr0   s    r4   pop_alembic_config_envzTestBase.pop_alembic_config_envC   s     


'.s   &(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    )r0   migration_contexts     r4   ops_contextzTestBase.ops_contextH   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r0   
connections     r4   rE   zTestBase.migration_contextM   s    ))TDA
 	
    c                F    t        j                  |t        dd            S )NT)rH   as_sqlrI   rK   rN   s     r4   as_sql_migration_contextz!TestBase.as_sql_migration_contextS   s!    ))TDN
 	
rP   c              #     K   t         j                  j                         5 }|a| d ad d d        y # 1 sw Y   y xY wwr%   )r   dbconnect_connection_fixture_connection)r0   conns     r4   rO   zTestBase.connectionY   s?      YY  	2D-1*J-1*		2 	2 	2s   ?	3	?<?c              #  Z   K   ddfd}| j                   _        yyyw)z'Restore runners for modified operationsNc                R    | j                   j                  j                         | y r%   )_to_impl	_registrycopy)_op_clsop_clssaved_implss    r4   _save_attrsz0TestBase.restore_operations.<locals>._save_attrsj   s"    !**4499;KFrP   )r[   r\   )r0   ra   r_   r`   s     @@r4   restore_operationszTestBase.restore_operationsc   s?      	
 +"9(3FOO% #:s   '+c              #    K   ddl m} |j                         }||j                  _        | |j                  `t
        rft
        j                         rRt
        j                         }|j                          t
        j                         5  t        |t
               ddd       yt        |t        j                         y# 1 sw Y   yxY ww)z>Provide bound MetaData for a single test, dropping afterwards.r   )schemaN)sqlalchemy.sqlrd   r   instancemetadatarW   in_transactionget_transactionrollbackbeginr   r   rU   )r0   requestrd   rg   transs        r4   rg   zTestBase.metadatat   s      	*??$$,!% +.==?2BBDENN/557 -< 
 *(FII> s   B
CC$CC
CN)returnzGenerator[None, None, None])__name__
__module____qualname__r"   is_sqlalchemy_futurer   fixturer5   r   r;   rA   rF   rE   rS   rO   rb   r   rg    rP   r4   r   r   ,   s    !W__) ) " " W__/ / W__0 0 __
 

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

 __2 2 __4 4  V^^? ?rP   r   c                      e Zd Zy)r   N)ro   rp   rq   rt   rP   r4   r   r      s    rP   r   Tc                6    g fd}t        | |      fS )Nc                n    j                  t        | j                  j                                     y N)dialect)appendstrcompilery   )sqlmultiparamsparamsbufengines      r4   dumpzcapture_db.<locals>.dump   s#    

3s{{6>>{:;<rP   r   )ry   r   r   r   s     @@r4   
capture_dbr      s%    
C=  .F3;rP   zDict[Any, Any]_engsc                     y r%   rt   )bytes_iokws     r4   capture_context_bufferr      s     ),rP   c                      y r%   rt   )r   s    r4   r   r      s     *-rP   c               +  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)Nr   Fsqlite)dialect_nameoutput_bufferc                 8     |j                   di   | i |S Nrt   updateargoptconfr   s     r4   rL   z)capture_context_buffer.<locals>.configure   $    

RS C  rP   rL   )
r?   ioBytesIOStringIOr   r   rL   r   patchobject)r   r   rL   r   s   `  @r4   r   r      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)rX   cursor	statement
parameterscontextexecutemanyr   s         r4   bcez*capture_engine_context_buffer.<locals>.bce   s    		)d"#rP   rO   c                 8     |j                   di   | i |S r   r   r   s     r4   rL   z0capture_engine_context_buffer.<locals>.configure   r   rP   rL   )envr   
sqlalchemyr   r   r   rV   listens_forr   r   rL   r   r   r   )	r   r   r   engrX   r   rL   r   r   s	   `      @@r4   capture_engine_context_bufferr      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 r%   linesr@   s    r4   __init__z$op_fixture.<locals>.buffer_.__init__   s	    DJrP   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   rz   )r0   msgrR   s     r4   r   z!op_fixture.<locals>.buffer_.write   s[    ))+C&&B,C ffWb#.ffYC0JJc"rP   c                     y r%   rt   r@   s    r4   flushz!op_fixture.<locals>.buffer_.flush   s    rP   N)ro   rp   rq   r   r   r   )rR   s   r4   buffer_r      s    			#	rP   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 r%   rt   r0   r   s    r4   get_bufzop_fixture.<locals>.ctx.get_buf  s    JrP   c                $    g j                   d d  y r%   r   r   s    r4   clear_assertionsz(op_fixture.<locals>.ctx.clear_assertions  s    CIIaLrP   c                    t        j                  |D cg c]  }t        j                  dd|       c}       y c c}w )Nr   r   )r   r   r   r   )r0   r}   sr   s      r4   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   )r0   r}   stmtr   s      r4   assert_containsz'op_fixture.<locals>.ctx.assert_contains  sI    		 66)R-5II urP   N)ro   rp   rq   r   r   r   r   )r   s   r4   ctxr     s    			D
	rP   r   rR   literal_bindsTc                    t        | t              rt        |       } | j                  sJ t        | j	                              }j                  |       y rx   )
isinstancer{   r   supports_executionr|   r   )r   
multiparamparamr}   r   ctx_dialects       r4   executezop_fixture.<locals>.execute$  sE    $$Dz****dll;l78CIIcNrP   )ry   r   r   )r   r   r   supports_native_boolean#non_native_boolean_check_constraintr   Mockr    alembicop_proxy)ry   rR   r   r   native_booleanrJ   r   r   r   rO   r   r   r   s    `         @@r4   
op_fixturer      s     D"*=N"O $ )C , X -_w'K!.<+ ;?7	 YY{GD
 #_
+z40G"7+GJJNrP   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 r%   )r   rU   rV   rX   r   rL   r   r    r   r   rg   r@   s    r4   setUpzAlterColRoundTripFixture.setUp=  sE    II%%'	#--dii8TXX& 
rP   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)r0   t1t2c1c2s        r4   _compare_typez&AlterColRoundTripFixture._compare_typeC  sQ    C_C_88==--
 	LDFK	L 
 
rP   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)r0   r   s1r   s2r   r   s          r4   _compare_server_defaultz0AlterColRoundTripFixture._compare_server_defaultJ  s[    CB/CB/88==77B
 	OGI2N	O 
 
rP   c                   t        j                  | j                         | j                  j                         5  | j                  j                  | j                         d d d        | j                  j                          y # 1 sw Y   $xY wr%   )r!   %_safe_rollback_connection_transactionrX   rk   rg   drop_allcloser@   s    r4   tearDownz!AlterColRoundTripFixture.tearDownQ  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   rg   r!   _ensure_scope_for_ddlrX   creater   get_columnsr   r   r   r   r   r   r   r   r   r   r   )	r0   from_to_comparecolumntinspold_colnew_cols	            r4   _run_alter_colz'AlterColRoundTripFixture._run_alter_colW  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(r%   )	ro   rp   rq   __requires__r   r   r   r   r  rt   rP   r4   r   r   6  s$    
 %L#LO=
rP   r   )zpostgresql://)r   zLiteral[True]r   r   rn   z!Generator[io.BytesIO, None, None])r   r   rn   z"Generator[io.StringIO, None, None])r   r   rn   z/Generator[io.StringIO | io.BytesIO, None, None])r  FNFN)@
__future__r   configparser
contextlibr   r   r&   r   r.   typingr   r   r   r   r	   r   r
   r   r   r   r   r   r   r   sqlalchemy.testingr   r   sqlalchemy.testing.assertionsr   sqlalchemy.testing.fixturesr   r   SQLAlchemyTablesTestr   SQLAlchemyTestBasesqlalchemy.testing.utilr   r   
assertionsr   r   r   environmentr   	migrationr   
operationsr    utilr!   util.sqla_compatr"   ConfigParsertesting_configreadrW   rr   r   r   __annotations__r   r   r   r   rt   rP   r4   <module>r*     s   "  % 	 	 	        )       % # - 9 J F A  $ ' , ( #  %***,   ZL !^?! ^?B "& 	/ 	 *.  & ~  
,,#&,&,  
,
 
-
-'-  
-
 
4 & 
' 8 Qh^
 ^
rP   