
    h#                    J   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jV                         Z,e,j[                  dg        G d de      Z G d d ee      Ze)rd d!lm.Z. n
 G d" d#      Z.d$e._/        d-d%Z0i Z1d&e2d'<   ed(        Z3ed)        Z4	 	 	 	 	 d.d*Z5 G d+ d,      Z6y)/    )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                      e Zd Ze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     c/var/www/html/retail-simulation-api/retail/lib/python3.12/site-packages/alembic/testing/fixtures.pyops_contextzTestBase.ops_context)   s/     000E.// FEEs   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              #  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.connection4   s(     YY DJ !  s   ;/	;8;N)
__name__
__module____qualname__r   is_sqlalchemy_futurer   fixturer%   r#   r+    r,   r$   r   r   &   sS    !W__0 0 __
 

 __ r,   r   c                      e Zd Zy)r   N)r2   r3   r4   r7   r,   r$   r   r   :   s    r,   r   )FutureEngineMixinc                      e Zd ZdZy)r9   )sqlalchemy_14N)r2   r3   r4   __requires__r7   r,   r$   r9   r9   B   s    )r,   r9   Tc                6    g fd}t        | |      fS )Nc                n    j                  t        | j                  j                                     y N)dialect)appendstrcompiler@   )sqlmultiparamsparamsbufengines      r$   dumpzcapture_db.<locals>.dumpL   s#    

3s{{6>>{:;<r,   r   )r@   rI   rG   rH   s     @@r$   
capture_dbrJ   I   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 Nr7   updateargoptconfkws     r$   r)   z)capture_context_buffer.<locals>.configure`   $    

RS C  r,   r)   )
popioBytesIOStringIOrT   r   r)   r   patchobject)rY   rG   r)   rX   s   `  @r$   capture_context_bufferra   V   sv     	vvj% jjlkkmIIx#>?''D! 
		-{I	F	 
G	F	Fs   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)r1   cursor	statement
parameterscontextexecutemanyrG   s         r$   bcez*capture_engine_context_buffer.<locals>.bces   s    		)d"#r,   r+   c                 8     |j                   di   | i |S rR   rS   rU   s     r$   r)   z0capture_engine_context_buffer.<locals>.configurez   rZ   r,   r)   )envrc   
sqlalchemyrd   r\   r^   r0   listens_forrT   r   r)   r   r_   r`   )	rY   rc   rd   engr1   rn   r)   rG   rX   s	   `      @@r$   capture_engine_context_bufferrt   h   s     $ 
++-C

C;;=D
t45$ 6$ II|T"#''D! 
		-{I	F	 
G	F	Fs   B B?%B3*	B?3B<8B?c                   i }|rt        |      |d<    G fdd      } |        G fddt              }r|d<   |r||d<   t        s| d	k(  rt        d
      d_        n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.   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|   rA   )r"   msgas_sqls     r$   rh   z!op_fixture.<locals>.buffer_.write   s[    ))+C&&B,C ffWb#.ffYC0JJc"r,   c                     y r.   r7   r}   s    r$   flushz!op_fixture.<locals>.buffer_.flush   s    r,   N)r2   r3   r4   r~   rh   r   )r   s   r$   buffer_ry      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 r.   r7   r"   rG   s    r$   get_bufzop_fixture.<locals>.ctx.get_buf   s    Jr,   c                $    g j                   d d  y r.   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"   rD   srG   s      r$   assert_zop_fixture.<locals>.ctx.assert_   s2     		cBcBFF9b!4c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"   rD   stmtrG   s      r$   assert_containsz'op_fixture.<locals>.ctx.assert_contains   sD    		66)R-5 "II ur,   N)r2   r3   r4   r   r   r   r   )rG   s   r$   ctxr      s    			D
	r,   r   r   literal_bindsmariadbmysql)
      r   MariaDBTc                    t        | t              rt        |       } | j                  sJ t        | j	                              }j                  |       y r?   )
isinstancerB   r   supports_executionrC   rh   )r   
multiparamparamrD   rG   ctx_dialects       r$   executezop_fixture.<locals>.execute   sE    $$Dz****dll;l78CIIcNr,   )r@   r   rP   )r	   r   r   r   server_version_infosupports_native_boolean#non_native_boolean_check_constraintr   Mockr   alembicop_proxy)r@   r   rv   r   native_booleanr(   r   r   r   r+   rl   rG   r   s    `         @@r$   
op_fixturer      s     D"*=N"O $ )C , X -_w)+"7+*?' #7+!.<+ ;?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 r.   )r   r/   r0   r1   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r.   )r   %_safe_rollback_connection_transactionr1   beginr   drop_allcloser}   s    r$   tearDownz!AlterColRoundTripFixture.tearDown   sT    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typer   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_ddlr1   creater   get_columnsr   r   r   r   r   r   r   r   r   r   rV   )	r"   from_to_comparecolumntinspold_colnew_cols	            r$   _run_alter_colz'AlterColRoundTripFixture._run_alter_col   sU   IIfi(IIffRj)YYz40 99%5t<	
 #t}}f-..tyy9HHTYY499%D&&s+A.G GG  $kk((4 )/(=(=*0//$uT2"ww'7? # 5ggfd+ !  :, tyy!""3'*?GFO%0GFOfkk	
 	FOW[[A	
 	GJZ!IJ$$FOKK	4(KK07* $%**			
 $$0 &&**//		
 		
I :9s   C#JJ(r.   )	r2   r3   r4   r<   r   r   r   r   r   r7   r,   r$   r   r      s$    
 %L#LO7
r,   r   )zpostgresql://)r   FNFN)7
__future__r   configparser
contextlibr   r\   r   typingr   r   rq   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readr9   r5   rJ   rK   __annotations__ra   rt   r   r   r7   r,   r$   <module>r      s   "  % 	 	          % # - J F  $ , ( #  1 & % +**,   ZL !! (	/ 	 =* * *.  & ~   "  4 UpX
 X
r,   