
    ,YHh&                    @   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 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j^                         Z0e0jc                  dg        G d de      Z G d  d!ee      Zd"e_2        d+d#Z3i Z4d$e5d%<   ed&        Z6ed'        Z7	 	 	 	 	 d,d(Z8 G d) d*      Z9y)-    )annotationsN)contextmanager)Any)Dict)Columncreate_mock_engine)inspect)MetaData)String)Table)testing)text)config)mock)eq_)FutureEngineMixin)
TablesTest)TestBase   )_get_dialect)_get_staging_directory   )EnvironmentContext)MigrationContext)
Operations)sqla_compat)sqla_2ztest.cfgc                     e Zd ZeZ ej                         d        Ze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       Q/var/www/html/planif/env/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)r,   dirnamecurrent_dirs      r0   pushdzTestBase.pushd6   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r,   s    r0   pop_alembic_config_envzTestBase.pop_alembic_config_env?   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   )r,   migration_contexts     r0   ops_contextzTestBase.ops_contextD   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     r0   rA   zTestBase.migration_contextI   s    ))TDA
 	
    c                F    t        j                  |t        dd            S )NT)rD   as_sqlrE   rG   rJ   s     r0   as_sql_migration_contextz!TestBase.as_sql_migration_contextO   s!    ))TDN
 	
rL   c              #  z   K   t         j                  j                         5 }| d d d        y # 1 sw Y   y xY wwr!   )r   dbconnect)r,   conns     r0   rK   zTestBase.connectionU   s1     YY  	DJ	 	 	s   ;/	;8;N)__name__
__module____qualname__r   is_sqlalchemy_futurer   fixturer1   r   r7   r=   rB   rA   rO   rK    rL   r0   r   r   (   s    !W__) ) " " W__/ / W__0 0 __
 

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

 __ rL   r   c                      e Zd Zy)r   N)rT   rU   rV   rY   rL   r0   r   r   [   s    rL   r   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      r0   dumpzcapture_db.<locals>.dumpe   s#    

3s{{6>>{:;<rL   r   )r^   rg   re   rf   s     @@r0   
capture_dbrh   b   s%    
C=  .F3;rL   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 NrY   updateargoptconfkws     r0   rH   z)capture_context_buffer.<locals>.configurey   $    

RS C  rL   rH   )
r;   ioBytesIOStringIOrr   r   rH   r   patchobject)rw   re   rH   rv   s   `  @r0   capture_context_bufferr~   o   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)rS   cursor	statement
parameterscontextexecutemanyre   s         r0   bcez*capture_engine_context_buffer.<locals>.bce   s    		)d"#rL   rK   c                 8     |j                   di   | i |S rp   rq   rs   s     r0   rH   z0capture_engine_context_buffer.<locals>.configure   rx   rL   rH   )envr   
sqlalchemyr   ry   r{   rR   listens_forrr   r   rH   r   r|   r}   )	rw   r   r   engrS   r   rH   re   rv   s	   `      @@r0   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    r0   __init__z$op_fixture.<locals>.buffer_.__init__   s	    DJrL   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   r_   )r,   msgrN   s     r0   r   z!op_fixture.<locals>.buffer_.write   s[    ))+C&&B,C ffWb#.ffYC0JJc"rL   c                     y r!   rY   r<   s    r0   flushz!op_fixture.<locals>.buffer_.flush   s    rL   N)rT   rU   rV   r   r   r   )rN   s   r0   buffer_r      s    			#	rL   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!   rY   r,   re   s    r0   get_bufzop_fixture.<locals>.ctx.get_buf   s    JrL   c                $    g j                   d d  y r!   r   r   s    r0   clear_assertionsz(op_fixture.<locals>.ctx.clear_assertions   s    CIIaLrL   c                    t        j                  |D cg c]  }t        j                  dd|       c}       y c c}w )Nr   r   )r   r   r   r   )r,   rb   sre   s      r0   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,   rb   stmtre   s      r0   assert_containsz'op_fixture.<locals>.ctx.assert_contains   sI    		 66)R-5II urL   N)rT   rU   rV   r   r   r   r   )re   s   r0   ctxr      s    			D
	rL   r   rN   literal_bindsTc                    t        | t              rt        |       } | j                  sJ t        | j	                              }j                  |       y r]   )
isinstancer`   r   supports_executionra   r   )r   
multiparamparamrb   re   ctx_dialects       r0   executezop_fixture.<locals>.execute   sE    $$Dz****dll;l78CIIcNrL   )r^   r   rn   )r   r   r   supports_native_boolean#non_native_boolean_check_constraintr   Mockr   alembicop_proxy)r^   rN   r   r   native_booleanrF   r   r   r   rK   r   re   r   s    `         @@r0   
op_fixturer      s     D"*=N"O $ )C , X -_w'K!.<+ ;?7	 YY{GD
 #_
+z40G"7+GJJNrL   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   rQ   rR   rS   r   rH   r   r   r   r   metadatar<   s    r0   setUpzAlterColRoundTripFixture.setUp   sE    II%%'	#--dii8TXX& 
rL   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        r0   _compare_typez&AlterColRoundTripFixture._compare_type   sQ    C_C_88==--
 	LDFK	L 
 
rL   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          r0   _compare_server_defaultz0AlterColRoundTripFixture._compare_server_default  s[    CB/CB/88==77B
 	OGI2N	O 
 
rL   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_transactionrS   beginr   drop_allcloser<   s    r0   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_ddlrS   creater
   get_columnsr   r   r   r   r   r   r   r   r   r   rt   )	r,   from_to_comparecolumntinspold_colnew_cols	            r0   _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(r!   )	rT   rU   rV   __requires__r   r   r   r   r   rY   rL   r0   r   r      s$    
 %L#LO=
rL   r   )zpostgresql://)r   FNFN):
__future__r   configparser
contextlibr   ry   r"   r   r*   typingr   r   r   r   r	   r
   r   r   r   r   r   sqlalchemy.testingr   r   sqlalchemy.testing.assertionsr   sqlalchemy.testing.fixturesr   r   SQLAlchemyTablesTestr   SQLAlchemyTestBaser   
assertionsr   r   r   environmentr   	migrationr   
operationsr   utilr   util.sqla_compatr   ConfigParsertesting_configreadrW   rh   ri   __annotations__r~   r   r   r   rY   rL   r0   <module>r     s   "  % 	 	 	     )       % # - 9 J F  $ ' , ( #  %***,   ZL !0! 0f	/ 	 *.  & ~   "  4 Qh^
 ^
rL   