
    j2                        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 ddlmZ ddlmZ  e	j.                          G d d             Zda G d d      Zy)    )annotations)Callable)SequenceN   )
assertions)config)eq_)drop_all_tables_from_metadata)picklers   )Column)func)Integer)select)Table)DeclarativeBase)MappedAsDataclassregistryc                  p   e Zd ZU dZded<   dZded<   dZded<   dZded	<   d
Zded<   ded<   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 e
j                         d        Z e
j                         d        Z e
j                         d        Z e
j                         d        Z e
j                   e             d        Z e
j                         d        Z e
j                         d        Z e
j                  dD  cg c]  }dD ]  }dD ]  }|||f	   c}}}}       d         Zyc c}}}} w )"TestBase ztuple[str, ...]__requires____unsupported_on__Nztuple[str, ...] | str | None__only_on__z#Sequence[Callable[[], bool]] | None__skip_if__Fbool"__leave_connections_for_teardown____backend__c                    |sJ |       y Nr   )selfvalmsgs      G/tmp/pip-target-jj7clzyk/lib/python/sqlalchemy/testing/fixtures/base.pyassert_zTestBase.assert_6   s    Cs    c              #     K   t         j                  j                  }d t         j                  _        d  |t         j                  _        y wr!   )r   db_compiled_cache)r"   _caches     r%   nocachezTestBase.nocache9   s0     **$(		!$*		!s   A
Ac              #     K   t        | dd       xs t        j                  }|j                         5 }| d d d        y # 1 sw Y   y xY wwNbind)getattrr   r)   connect)r"   engconns      r%   connection_no_transzTestBase.connection_no_trans@   sA     dFD)6VYY[[] 	dJ	 	 	s   0AA 	A A	Ac              #     K   t        | dd       xs t        j                  }|j                         }|j	                         }|a| d a|j                  r|j                          |j                          y wr.   )	r0   r   r)   r1   begin_connection_fixture_connection	is_activerollbackclose)r"   r2   r3   transs       r%   
connectionzTestBase.connectionG   sb      dFD)6VYY{{}

)-&
)-&??NN 	

s   A5A7c              #     K   g g dfd	}| D ]  }	 |j                           D ]  }	 |j                           y #  Y 3xY w#  Y "xY ww)Nc                P    j                  |        |rj                  |        y y r!   )append)resultconsumeto_close
to_consumes     r%   goz/TestBase.close_result_when_finished.<locals>.goa   s%    OOF#!!&) r'   )F)allr:   )r"   rD   rrB   rC   s      @@r%   close_result_when_finishedz#TestBase.close_result_when_finished\   sk     
	*
  	A	
  	A		s2   AAAAAA	AAAc           
   #     K   t        |t        t        j                         j	                  t        j                  d      ddd      i      }| |j                          y w)N2   mysqlmariadboracle)metadatatype_annotation_map)r   strsaStringwith_variantdispose)r"   rM   regs      r%   r   zTestBase.registryr   sO     RYY[--IIbM7Ix!
 	s   A A"c              #  p   K   | G fddt               }| |j                  j                          y w)Nc                  ~    e Zd ZW  Ze ej                         j                   ej                  d      ddd      iZy) TestBase.decl_base.<locals>.BaserI   rJ   rK   rL   N	__name__
__module____qualname__rM   rO   rP   rQ   rR   rN   _mds   r%   BaserW      s;    HYRYY[--BIIbM7Ix#r'   r^   )r   r   rS   r"   rM   r^   r]   s      @r%   	decl_basezTestBase.decl_base   s/     	? 	 
s   36c              #  z   K   | G fddt         t              }| |j                  j                          y w)Nc                  |    e Zd ZW  Ze ej                         j                   ej                  d      dd      iZy)#TestBase.dc_decl_base.<locals>.BaserI   rJ   rK   NrX   r\   s   r%   r^   rc      s9    HYRYY[--BIIbM7I#r'   r^   )r   r   r   rS   r_   s      @r%   dc_decl_basezTestBase.dc_decl_base   s2     	$o 	 
s   8;c              #     K   | y wr!   r   )r"   future_enginer<   s      r%   future_connectionzTestBase.future_connection   s     
    c              #     K   d  y wr!   r   )r"   s    r%   rf   zTestBase.future_engine   s	     rh   c              #  j   K   ddl m 	 	 	 dfd	}| j                  j                  d       y w)Nr   )enginesc                >    |i }d|d<   j                  | ||      S )Nfixturescope)urloptionsasyncio)testing_engine)ro   rp   rq   rk   s      r%   gen_testing_enginez3TestBase.testing_engine.<locals>.gen_testing_engine   s:    
 (GG)) *  r'   rm   )NNF) rk   testing_reaper_drop_testing_engines)r"   rs   rk   s     @r%   rr   zTestBase.testing_engine   s6      	 ! 44Y?s   03c                    fd}|S )Nc                     d| d<    di | S )NTrq   r   r   )kwrr   s    r%   rD   z)TestBase.async_testing_engine.<locals>.go   s     ByM!'B''r'   r   )r"   rr   rD   s    ` r%   async_testing_enginezTestBase.async_testing_engine   s    	( 	r'   )paramsc              #  (   K   |j                    y wr!   )param)r"   requests     r%   r   zTestBase.picklers   s     mm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)sqlr   MetaDatainstancerM   r7   in_transactionget_transactionr9   r6   r
   r   r)   )r"   r~   r   rM   r;   s        r%   rM   zTestBase.metadata   s      	"??$$,!% +.==?2BBDENN/557 -< 
 *(FII> s   B
CC$CC
Cc              #  V   K   ddl m d fd}| J j                  = y w)Nr   r   c                P    | j                   sJ d       | j                  <   | S )Nzname is required)nameimpls)dialect_clsr   r   s    r%   rD   z'TestBase.thirdparty_dialect.<locals>.go   s0    ##D+++4#.HNN4 r'   )dialectsr   r   )r"   rD   r   r   s     @@r%   thirdparty_dialectzTestBase.thirdparty_dialect   s3     (	 NN4 s   %))TF)noneexecuter6   c                    |j                   \  t        d|t        dt                    t	        | dd       xs t
        j                  }j                  |       fd}|S )Ntestdatar/   c           	        | j                         5 }rt        j                  j                  j                  st        j
                  d       |r| j                         }n|j                         }|5  |r#| j                  
j                         ddi       n"|j                  
j                         ddi       r|j                          n|j                          	dk7  rt        j                  t        j                  j                  d      5  	dk(  rH|r#| j                  
j                         ddi       nK|j                  
j                         ddi       n(	dk(  r#|r| j                          n|j                          d d d        d d d        |r$| j                  
j                         dd	i       n|j                  
j                         dd	i       nt|r#| j                  
j                         ddi       n"|j                  
j                         ddi       |r$r| j                          n4| j                          n#r|j                          n|j                          	dk7  rt        j                  t        j                  j                  d      5  	dk(  rH|r#| j                  
j                         ddi       n~|j                  
j                         ddi       n[	dk(  r.t!        |d      r|j                          n9| j                          n(	d
k(  r#|r| j                          n|j                          d d d        d d d        d}r|dz  }s|dz  }|rFt#        | j%                  t'        t)        j*                               j-                  
            |       y | j/                         5 }t#        |j%                  t'        t)        j*                               j-                  
            |       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nzsavepoints not enabledr   
   r   zCan't operate on closed transaction inside context manager.  Please complete the context manager before emitting further commands.r      r6      begin_nestedr      )r6   r   requirements
savepointsenabled	skip_testr   r   insertr9   commitr   expect_raises_messagerP   excInvalidRequestErrorhasattrr	   scalarr   r   countselect_fromr1   )subjecttrans_on_subjectexecute_on_subjectr;   nested_transexpected_committedr3   r   r9   second_operationts          r%   run_testz4TestBase.trans_ctx_manager_fixture.<locals>.run_test  s    ^9E!..99AA(()AB)'.';';'=','9'9';% $=-#OOAHHJE!MM!((*vrlC $(113(//1+v5!+!A!A " : :!D" = $4y#@'9(/,-HHJ)* ).ahhj62,(O%5%@'9(/(<(<(>(-(:(:(<'=#$=R *
VRLAahhj62,? *
VRLAahhj62,?'##,,.#NN,#!NN,!LLN'61'==FF66@ 9  09<#5$+OOAHHJ$M$)MM!((*vrl$K!1W!<#*5'#:$)KKM$+MMO!1^!C#5$+$8$8$:$)$6$6$8+9S^9@ "# #a'" #a'"!NN6$**,#7#C#CA#FG&
 __& $F4::<$8$D$DQ$GH* m= =#$= $=@9 9S^9 ^9` se   A"P;4BP"A6PP"DP;%B)P/P;AQPP""P,	'P;/P8	4P;;QQ)r}   r   r   r   r0   r   r)   create)	r"   r~   rM   r2   r   r   r9   r   r   s	        @@@@r%   trans_ctx_manager_fixturez"TestBase.trans_ctx_manager_fixture   s[     4;==0"L&(F67$;<dFD)6VYY	u	n r'   r!   )rY   rZ   r[   r   __annotations__r   r   r   r   r&   r   rm   r,   r4   r<   rG   r   r`   rd   rg   rf   rr   rz   r   rM   r   r   ).0r9   r   r   s   0000r%   r   r      sV    %'L/& +-, 15K-4 8<K4;
 05&4 V^^+ + V^^  V^^ ( V^^ * V^^
 
 ^^    ^^    V^^  V^^  V^^@ @* V^^  V^^8:& ' V^^? ?. V^^! !" V^^ *
 
$@
 !!	
  '6
6
6



s   F0r   c                      e Zd ZdZy)FutureEngineMixinz alembic's suite still using thisN)rY   rZ   r[   __doc__r   r'   r%   r   r     s    *r'   r   )
__future__r   collections.abcr   r   
sqlalchemyrP   rt   r   r   r	   utilr
   r   r   r   r   r   r   ormr   r   r   mark_base_test_classr   r7   r   r   r'   r%   <module>r      st    # $ $     0       " $  ^ ^ ^B "& + +r'   