
    +hx                     l   d dl 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  ej<                          G d de             Z da!e jD                  d        Z# G d de      Z$ G d de       Z% G d de      Z& G d d e      Z' e(       Z)d! Z*d" Z+d# Z,d$ Z- G d% d&e       Z. G d' d(e%ej^                        Z0 G d) d*e0      Z1 G d+ d,e%      Z2 G d- d.e      Z3y)/    N   )
assertions)configschemaeq_)ne_)BasicEntity)ComparableEntity)ComparableMixin)adict)drop_all_tables_from_metadata   )event)util)declarative_base)registry)DeclarativeMeta)sort_tables_and_constraints)visitors)ClauseElementc                      e Zd ZdZdZdZdZdZ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                         d        Z e	j                  dD  cg c]  }dD ]  }dD ]  }|||f	   c}}}}       d        Zyc c}}}} w )TestBase NFc                     |sJ |       y Nr   )selfvalmsgs      N/var/www/html/venv/lib/python3.12/site-packages/sqlalchemy/testing/fixtures.pyassert_zTestBase.assert_7   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.nocache:   0     **$(		!$*		!   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_transA   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.connectionH   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>.gob   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              #   L   K   t        |      }| |j                          y wN)metadata)r   dispose)r   rJ   regs      r!   r   zTestBase.registrys   s     )	s   "$c                 $     |j                          S r   )generate_base)r   r   s     r!   	decl_basezTestBase.decl_basey   s    %x%%''r#   c              #      K   | y wr   r   )r   future_enginer<   s      r!   future_connectionzTestBase.future_connection}   s     
 s   c              #      K   t        | dd       xs t        j                  }t        |      5  d  d d d        y # 1 sw Y   y xY wwr.   r0   r   r&   _push_future_enginer   r2   s     r!   rQ   zTestBase.future_engine   <     dFD)6VYY % 		 	 	   +A;	AA Ac              #   n   K   ddl m 	 	 	 	 	 dfd	}| j                  j                  d       y w)Nr   )enginesc                 B    |i }d|d<   j                  | ||||      S )Nfixturescope)urloptionsfutureasynciotransfer_staticpool)testing_engine)r^   r_   r`   ra   rb   rZ   s        r!   gen_testing_enginez3TestBase.testing_engine.<locals>.gen_testing_engine   s@     (GG))$7 *  r#   r\   )NNNFF) rZ   testing_reaper_drop_testing_engines)r   rd   rZ   s     @r!   rc   zTestBase.testing_engine   s<       %	$ ! 44Y?s   25c                     fd}|S )Nc                      d| d<    di | S )NTra   r   r   )kwrc   s    r!   rD   z)TestBase.async_testing_engine.<locals>.go   s     ByM!'B''r#   r   )r   rc   rD   s    ` r!   async_testing_enginezTestBase.async_testing_engine   s    	( 	r#   c                     t               S r   )fixture_sessionr   s    r!   rm   zTestBase.fixture_session   s      r#   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   r   N)sqlr   MetaDatainstancerJ   r7   in_transactionget_transactionr9   r6   r   r   r&   )r   requestr   rJ   r;   s        r!   rJ   zTestBase.metadata   s      	!"6??$$,!% +.==?2BBDENN/557 -< 
 *(FII> s   BCC$CCC)TF)noneexecuter6   )paramsc                    	
 |j                   \  ddlm}m}m}m
m ddlm	  |d| |d|            t        | dd       xs t        j                  }j                  |       	
fd}|S )	Nr   )TableColumnIntegerfuncselectr   r   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  }|r< | j#                   	j%                               j'                              |       y | j)                         5 } |j#                   	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   
   rv   zCan't operate on closed transaction inside context manager.  Please complete the context manager before emitting further commands.rw      r6      begin_nestedr   r   )r6   r   requirements
savepointsenabled	skip_testr   rw   insertr9   commitr   expect_raises_messagesaexcInvalidRequestErrorhasattrscalarcountselect_fromr1   )subjecttrans_on_subjectexecute_on_subjectr;   nested_transexpected_committedr3   r   r	   r}   r9   second_operationr~   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+9U_9B "# #a'" #a'"!NN6$**,#7#C#CA#FG&
 __& $F4::<$8$D$DQ$GH* m= =#$= $=@9 9U_9 _9b sd   A"P'4BPA6PPDP'%B)PP'<<P3PPP	P'P$	 P''P03P<)param
sqlalchemyrz   r{   r|   r}   r~   re   r	   r0   r   r&   create)r   ru   rJ   rz   r{   r|   r2   r   r   r	   r}   r9   r   r~   r   s           @@@@@@@r!   trans_ctx_manager_fixturez"TestBase.trans_ctx_manager_fixture   sj     4;==0"LCC&(F67$;<dFD)6VYY	v	 v	p r#   r   )__name__
__module____qualname____requires____unsupported_on____only_on____skip_if__"__leave_connections_for_teardown__r"   r   r\   r*   r4   r<   rG   r   rO   rR   rQ   rc   rk   rm   rJ   r   ).0r9   r   r   s   0000r!   r   r   "   s    L  K K
 */& V^^+ + V^^  V^^ ( V^^ * V^^ 
 ^^( ( V^^  V^^ 
 V^^@ @2 V^^  ^^! ! V^^? ?. V^^ *
 
$@
 !!	
  '6
6
6

C
C
s   0Er   c              #      K   ddl m} ddlm} |j	                  |       }t
        j                  j                  ||       | t
        j                  j                  |       y w)Nr   )Enginer   testing)	future.enginer   r   r   _future_facader   _currentpush_enginepop)enginer   r   facades       r!   rU   rU   \  sI      '"""6*F
OO0
L
OO s   A"A$c                   @    e Zd Z ej                  dd      d        Zy)FutureEngineMixinTclassautouser]   c              #      K   t        | dd       xs t        j                  }t        |      5  d  d d d        y # 1 sw Y   y xY wwr.   rT   rV   s     r!   rU   z%FutureEngineMixin._push_future_enginek  rW   rX   N)r   r   r   r   r\   rU   r   r#   r!   r   r   j  s!    V^^D0 1r#   r   c                   n   e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZ ej                  dd      d        Z ej                  dd      d	        Zed
        Zed        Zed        Zed        Zd Zd Zd Zed        Zed        Zed        Zed        Zed        Zed        Z d Z!d Z"ed        Z#y)
TablesTestonceeachNTr   r   c              #      K   | j                   }|j                          |j                          |j                          d  |j	                          y wr   )	__class___init_class_setup_once_tables_setup_once_inserts_teardown_once_metadata_bindr   clss     r!   _setup_tables_test_classz#TablesTest._setup_tables_test_class  s@     nn !((*s   AAfunctionc              #   t   K   | j                          | j                          d  | j                          y wr   )_setup_each_tables_setup_each_inserts_teardown_each_tablesrn   s    r!   _setup_tables_test_instancez&TablesTest._setup_tables_test_instance  s-     !  """$s   68c                     | j                   S r   )_tables_metadatarn   s    r!   tables_test_metadatazTablesTest.tables_test_metadata  s    $$$r#   c                 $   | j                   dk(  r&| j                  dk(  rd| _        | j                  dv sJ t               | _        t               | _        t               | _        | j                         | _        t        j                         | _        y )Nr   r   )r   N)run_define_tablesrun_create_tablesrun_insertsr   othertables	sequences
setup_bindr/   r   rq   r   r   s    r!   r   zTablesTest._init_class  so      F*$$.(.%??n444G	W
>>#!{{}r#   c                     | j                   dk(  rE| j                          | j                  j                         5 }| j	                  |       d d d        y y # 1 sw Y   y xY wNr   r   _load_fixturesr/   r6   insert_data)r   r3   s     r!   r   zTablesTest._setup_once_inserts  sU    ??f$ ! &T%& & %& &   AAc                 ~   | j                   dk(  r| j                  | j                         | j                  dk(  r%| j                  j	                  | j
                         | j                  j                  | j                  j                         | j                  j                  | j                  j                         y y r   
r   define_tablesr   r   
create_allr/   r   updater   
_sequencesr   s    r!   r   zTablesTest._setup_once_tables  s      F*c223$$.$$//9JJc2299:MM  !5!5!@!@A +r#   c                    | j                   dk(  r| j                  | j                         | j                  dk(  r%| j                  j	                  | j
                         | j                  j                  | j                  j                         | j                  j                  | j                  j                         y | j                  dk(  r&| j                  j	                  | j
                         y y Nr   r   rn   s    r!   r   zTablesTest._setup_each_tables  s    !!V+t445%%/%%00;KKt44;;<NN!!$"7"7"B"BC##v-!!,,TYY7 .r#   c                     | j                   dk(  rE| j                          | j                  j                         5 }| j	                  |       d d d        y y # 1 sw Y   y xY wr   r   )r   r3   s     r!   r   zTablesTest._setup_each_inserts  sY    v%!" 'd  &' ' &' 'r   c           	      ~   | j                   dk(  rd| j                  j                          | j                  dk(  r t	        | j
                  | j                         | j
                  j                          n/| j                  dk(  r t	        | j
                  | j                         t        t        j                  dd      }|r|j                  }| j                   dk7  r| j                  dk7  r| j                  dk(  r| j                  j                         5 }t        t        | j
                  j                  j                               D cg c]	  \  }}|| c}}      D ]]  }	 |r9|j!                         5  |j#                  |j%                                d d d        n|j#                  |j%                                _ 	 d d d        y y y y c c}}w # 1 sw Y   xY w# t&        j(                  j*                  $ r5}t-        j.                  d|d|t0        j2                         Y d }~d }~ww xY w# 1 sw Y   y xY w)Nr   r   FzError emptying table z: )file)r   r   clearr   r   r   r/   r0   r   r   r   run_deletesr6   reversedr   valuesr   rw   deleter   r   
DBAPIErrorr   print_sysstderr)r   r   r3   r   fkstableexs          r!   r   z TablesTest._teardown_each_tables  s   !!V+KK%%/-d.C.CTYYO!!'')##v-)$*?*?KV00,F
#++J ""f,&&&0  F*" d% )D 1188??A)$Q =	  E
%!%!2!2!4 = $U\\^ <= = !LL8  + 1 -= = 66,, >CRH!$ ! s`   6H3	GH3#G5 G(G=H3H3GGH0;+H+&H3+H00H33H<c                     | j                   r t        | j                  | j                         | j                  dk(  r| j                  | j                         d | j                  _        | j                  d | _        y y r   )r   r   r   r/   run_dispose_binddispose_bindrun_setup_bindr   s    r!   r   z'TablesTest._teardown_once_metadata_bind  se      )#*>*>I6)SXX&$(!)CH *r#   c                 "    t         j                  S r   )r   r&   r   s    r!   r   zTablesTest.setup_bind
  s    yyr#   c                 x    t        |d      r|j                          y t        |d      r|j                          y y )NrK   r:   )r   rK   r:   )r   r/   s     r!   r   zTablesTest.dispose_bind  s-    4#LLNT7#JJL $r#   c                      y r   r   )r   rJ   s     r!   r   zTablesTest.define_tables      r#   c                     i S r   r   r   s    r!   fixtureszTablesTest.fixtures  s    	r#   c                      y r   r   )r   r<   s     r!   r   zTablesTest.insert_data  r   r#   c                 >    | j                  | j                  ||       y r   )assert_sql_countr/   )r   r   fns      r!   
sql_count_zTablesTest.sql_count_!  s    diiU3r#   c                 >    | j                  | j                  ||       y r   )
assert_sqlr/   )r   	callable_
statementss      r!   sql_eq_zTablesTest.sql_eq_$  s    		9j9r#   c                 X   i i }}| j                         j                         D ]M  \  }}t        |      dk  rt        |t        j
                        r| j                  |   }|d   ||<   |dd ||<   O t        | j                  j                  j                               D ]w  \  }}|	||vr| j                  j                         5 }|j                  |j                         ||   D cg c]  }t        t        ||   |             c}       ddd       y yc c}w # 1 sw Y   xY w)z4Insert rows as represented by the fixtures() method.r   r   r   N)r   itemslen
isinstancer   string_typesr   r   r   r   r/   r6   rw   r   dictzip)r   headersrowsr   r   r   r3   column_valuess           r!   r   zTablesTest._load_fixtures'  s.    B<<>//1 	#KE44y1}%!2!23

5)!!WGENqr(DK	# 6  ''..0
 	JE3 }G#! TLLN .2%[) S?@ 	 s   "D *D	D D  D)	)$r   r   r   r   r   r   r   r   r   r/   r   r   r   r   r   r\   r   r   propertyr   classmethodr   r   r   r   r   r   r   r   r   r   r   r   r  r	  r   r   r#   r!   r   r   r  s    N   K K DFEIV^^D0
+ 1
+ V^^D
3% 4% % % - - & & B B8''R 
 
          4:  r#   r   c                   @    e Zd Z ej                  dd      d        Zy)NoCacheTr   r   c              #      K   t         j                  j                  }d t         j                  _        d  |t         j                  _        y wr   r%   r(   s     r!   _disable_cachezNoCache._disable_cacheD  r+   r,   N)r   r   r   r   r\   r  r   r#   r!   r  r  C  s!    V^^D
3+ 4+r#   r  c                   j    e Zd Zej                  d        Zd Z ej                  dd      d        Z	y)RemovesEventsc                     t               S r   )setrn   s    r!   
_event_fnszRemovesEvents._event_fnsM  s	    ur#   c                 p    | j                   j                  |||f       t        j                  |||fi | y r   )r  addr   listen)r   targetnamer  rj   s        r!   event_listenzRemovesEvents.event_listenQ  s0    VT2./VT2,,r#   Tr   r   c              #   Z   K   d  | j                   D ]  }t        j                  |   y wr   )r  r   remove)r   keys     r!   _remove_eventszRemovesEvents._remove_eventsU  s(     ?? 	CLL#	s   )+N)
r   r   r   r   memoized_propertyr  r$  r   r\   r(  r   r#   r!   r  r  L  s@    	 - V^^D
3 4r#   r  c                      | j                  dd       | j                  dd       | j                  dt        j                        }t	        j
                  j                  |fi | }t        j                  |       |S )N	autoflushTexpire_on_commitr/   )	
setdefaultr   r   r&   r   ormSession_fixture_sessionsr   )rj   r/   sesss      r!   rm   rm   _  s]    MM+t$MM$d+66&&))$D66>>$%"%D$Kr#   c                  |    t         j                  j                  j                          t        j                          y r   )r   r.  sessionclose_all_sessionsr0  r   r   r#   r!   _close_all_sessionsr5  j  s"    FFNN%%'r#   c                 T    t                t        j                  j                          y r   )r5  r   r.  clear_mappersr   s    r!   stop_test_class_inside_fixturesr8  p  s    FFr#   c                  &    t         rt                y y r   )r0  r5  r   r#   r!   
after_testr:  u  s     r#   c                       e Zd Zy)ORMTestNr   r   r   r   r#   r!   r<  r<  z  s    r#   r<  c                      e Zd ZdZdZdZ ej                  dd      d        Z ej                  dd      d	        Z	e
d
        Ze
d        Ze
d        Zd Zd Ze
d        Ze
d        Zd Zd Ze
d        Ze
d        Zy)
MappedTestr   r   NTr   r   c              #   B  K   | j                   }|j                          |j                  t               |_        |j	                          |j                          |j                          |j                          d  |j                          |j                          y wr   )
r   r   classesr   r   _setup_once_classes_setup_once_mappersr   _teardown_once_classr   r   s     r!   r   z#MappedTest._setup_tables_test_class  sw     nn;;'CK !!!  "((*s   BBr   c              #   D  K   | j                          | j                          | j                          | j                          d  t        j
                  j                  j                          | j                          | j                          | j                          y wr   )r   _setup_each_classes_setup_each_mappersr   r   r.  r3  r4  _teardown_each_mappers_teardown_each_classesr   rn   s    r!   r   z&MappedTest._setup_tables_test_instance  sq     !  "  "  "
))+##%##%""$s   BB c                 8    | j                   j                          y r   )rA  r   r   s    r!   rD  zMappedTest._teardown_once_class  s    r#   c                 Z    | j                   dk(  r| j                  | j                         y y r   run_setup_classes_with_register_classessetup_classesr   s    r!   rB  zMappedTest._setup_once_classes  s)      F*&&s'8'89 +r#   c                     | j                   dk(  r9| j                         \  | _        | _        | j	                  | j
                         y y r   )run_setup_mappers_generate_registrymapper_registrymapperrN  setup_mappersr   s    r!   rC  zMappedTest._setup_once_mappers  sA      F*.1.D.D.F+C&&s'8'89 +r#   c                     | j                   dk7  r1| j                         \  | j                  _        | j                  _        | j                   dk(  r| j                  | j                         y y )Nr   r   )rQ  rR  r   rS  rT  rN  rU  rn   s    r!   rG  zMappedTest._setup_each_mappers  s`    !!V+ '').% !!V+''(:(:; ,r#   c                 Z    | j                   dk(  r| j                  | j                         y y r   rL  rn   s    r!   rF  zMappedTest._setup_each_classes  s)    !!V+''(:(:; ,r#   c                 J    t        | j                        }||j                  fS rI   )r   r   map_imperatively)r   decls     r!   rR  zMappedTest._generate_registry  s#    !5!56T****r#   c                     | j                   J  G fddt              } G d dt        j                  |t                    } G d dt
        |      } G d d	t        |      }|| _        || _         |        y)
zRun a setup method, framing the operation with a Base class
        that will catch new subclasses to be established within
        the "classes" registry.

        Nc                       e Zd Z fdZy)6MappedTest._with_register_classes.<locals>.FindFixturec                 @    | |<   t         j                  | |||       y r   )type__init__r   	classnamebasesdict_cls_registrys       r!   r`  z?MappedTest._with_register_classes.<locals>.FindFixture.__init__  s    *-Y'c9eU;r#   Nr   r   r   r`  re  s   r!   FindFixturer]    s    <r#   rh  c                       e Zd Zy)0MappedTest._with_register_classes.<locals>._BaseNr=  r   r#   r!   _Baserj        r#   rk  c                       e Zd Zy)0MappedTest._with_register_classes.<locals>.BasicNr=  r   r#   r!   Basicrn    rl  r#   ro  c                       e Zd Zy)5MappedTest._with_register_classes.<locals>.ComparableNr=  r   r#   r!   
Comparablerq    rl  r#   rr  )	rA  r_  r   with_metaclassobjectr   r   ro  rr  )r   r  rh  rk  ro  rr  re  s         @r!   rN  z!MappedTest._with_register_classes  sq     {{'''	<$ 	<
	D''V< 		K 		)5 	 	#
r#   c                 `    | j                   dk7  rt        j                  j                          y y r   )rQ  r   r.  r7  rn   s    r!   rH  z!MappedTest._teardown_each_mappers  s'     !!V+FF  " ,r#   c                 X    | j                   dk7  r| j                  j                          y y r   )rM  rA  r   rn   s    r!   rI  z!MappedTest._teardown_each_classes  s%    !!V+LL  ,r#   c                      y r   r   r   s    r!   rO  zMappedTest.setup_classes  r   r#   c                      y r   r   r   s    r!   rU  zMappedTest.setup_mappers  r   r#   )r   r   r   rM  rQ  rA  r   r\   r   r   r  rD  rB  rC  rG  rF  rR  rN  rH  rI  rO  rU  r   r#   r!   r?  r?  ~  s     GV^^D0+ 1+" V^^D
3% 4%   : : : :
<< + +  8#!    r#   r?  c                   @     e Zd ZdZdZed        Ze fd       Z xZS )DeclarativeMappedTestr   c                      y r   r   r   s    r!   r   z(DeclarativeMappedTest._setup_once_tables  r   r#   c                 ^   | j                    G fddt              } G d dt              }t        | j                  ||      }|| _        t        t        | #  |       | j                  j                  r7| j                  r*| j                  j                  t        j                         y y y )Nc                       e Zd Z fdZy)LDeclarativeMappedTest._with_register_classes.<locals>.FindFixtureDeclarativec                 @    | |<   t        j                  | |||       y r   )r   r`  ra  s       r!   r`  zUDeclarativeMappedTest._with_register_classes.<locals>.FindFixtureDeclarative.__init__  s!    *-Y'((iFr#   Nrf  rg  s   r!   FindFixtureDeclarativer~    s	    Gr#   r  c                   $    e Zd Zej                  Zy)FDeclarativeMappedTest._with_register_classes.<locals>.DeclarativeBasicN)r   r   r   r   rz   __table_cls__r   r#   r!   DeclarativeBasicr    s    "LLMr#   r  )rJ   	metaclassr   )rA  r   rt  r   r   r  superrz  rN  r   r   r   r   r&   )r   r  r  r  	_DeclBasere  r   s        @r!   rN  z,DeclarativeMappedTest._with_register_classes  s    {{	G_ 	G
	)v 	) %)), 
	  ) 	#S@D&&3+@+@  ++FII6 ,A&r#   )	r   r   r   rM  rQ  r  r   rN  __classcell__)r   s   @r!   rz  rz    s5      7 7r#   rz  c                   V    e Zd ZdxZZdZdZ ej                  d      Z	d Z
ed        Zy)ComputedReflectionFixtureTestNT)computed_columnstable_reflectionz[\[\]\(\)\s`'\"]*c                 V    | j                   j                  d|      j                         S )Nre   )regexpsublower)r   texts     r!   	normalizez'ComputedReflectionFixtureTest.normalize&  s     {{r4(..00r#   c                    ddl m} ddl m} ddlm} ddlm} ddlm}  |d| |d|d	
       |d|       |d| |d             |d|d              |d| |d|d	
       |d|       |d| |d                  }|j                  j                  j                  r: |d| |d|d	
       |d|       |d| |d            t        j                        }|j                  j                  j                  rb|j                   |d| |dd                   |j                  j                  j                  r!j                   |d| |dd                   |j                  j                  j                  rd|j                   |d| |dd	                   |j                  j                  j                  r"j                   |d| |dd	                   y y y )Nr   )r|   r   )r{   )Computed)rz   computed_default_tableidT)primary_keynormalcomputed_colznormal + 42with_default42)server_defaultcomputed_column_tablecomputed_no_flagznormal / 42r   computed_virtualz
normal + 2F)	persistedz
normal / 2computed_storedznormal - 42znormal * 42)re   r|   r   r   r{   r  rz   requiresschemasr   r   test_schemacomputed_columns_virtualappend_columncomputed_columns_stored)	r   rJ   r|   r   r{   r  rz   r   t2s	            r!   r   z+ComputedReflectionFixtureTest.define_tables)  s   #%"$4d38W%>7H],CD>74@	
 #4d38W%%w0GH
 ##++'tW$7x))7H]4KL))B 44<<OO&\U; ''//  * ? 33;;OO%]d; ''//  ) $? 0 <r#   )r   r   r   r   r   __backend__r   recompiler  r  r  r   r   r#   r!   r  r    sB     $$K+K;LRZZ,-F1 A Ar#   r  c                       e Zd Zd Zd Zd Zy)CacheKeyFixturec                    |j                         }|j                         }|%|j                  j                  d      sJ |J ||fS t        |j                  |j                         t        t        |j                        t        |j                               t        |j                  |j                        D ]  \  }}|j                  ||      rJ  ||fS )Nr*   compare_values)	_generate_cache_key_annotationsgetr	   r'  hashr  
bindparamscompare)r   abr  a_keyb_keya_paramb_params           r!   _compare_equalzCacheKeyFixture._compare_equalo  s    %%'%%'=>>%%i000= = e| 		599%UYYeii1$'(8(8%:J:J$K O w~NNNOe|r#   c           	      2    |       } |       }t        j                  t        t        |            d      D ]]  \  }}||k(  r | j	                  ||   ||   |      \  }}|,||   j                         }||   j                         }||E| ||   j                  j                  d      sJ | ||   j                  j                  d      sJ |j                  |j                  k(  r^t        |j                  |j                        D ]  \  }	}
|	j                  |
|      r nB t        |j                  |j                         n t        |j                  |j                         t        ||   t              sGt        ||   t              s\g }g }t        j                   ||         D ]#  }|j"                  dk(  s|j%                  |       % t        j                   ||         D ]#  }|j"                  dk(  s|j%                  |       % t'        t)        |j                  d       t)        t+        j,                  |      d              t'        t)        |j                  d       t)        t+        j,                  |      d	              ` y )
Nr   r*   r  	bindparamc                     | j                   S r   r'  r  s    r!   <lambda>z8CacheKeyFixture._run_cache_key_fixture.<locals>.<lambda>  
    155 r#   r  c                     | j                   S r   r  r  s    r!   r  z8CacheKeyFixture._run_cache_key_fixture.<locals>.<lambda>  
     r#   c                     | j                   S r   r  r  s    r!   r  z8CacheKeyFixture._run_cache_key_fixture.<locals>.<lambda>  r  r#   c                     | j                   S r   r  r  s    r!   r  z8CacheKeyFixture._run_cache_key_fixture.<locals>.<lambda>  r  r#   )	itertoolscombinations_with_replacementranger  r  r  r  r  r'  r  r  r  r
   r  r   r   iterate__visit_name__r?   r	   sortedr   unique_list)r   r\   r  case_acase_br  r  r  r  r  r  assert_a_paramsassert_b_paramselems                 r!   _run_cache_key_fixturez&CacheKeyFixture._run_cache_key_fixture  sn   ;;#f+
 E	DAq Av#221Ivay. u =q	557q	557=EM}%ay5599)DDD}%ay5599)DDD99		),/((%*:*:- 2(  '#N  /   "2 EIIuyy1		599-
 &)]3
q	=9 #%"$$,,VAY7 5D**k9'..t45 %,,VAY7 5D**k9'..t45 5++A((9 5++A((9AE	r#   c                      |       } |       }t        j                  t        t        |            d      D ]  \  }}| j	                  ||   ||   |         y )Nr   )r  r  r  r  r  )r   r\   r  r  r  r  r  s          r!   _run_cache_key_equal_fixturez,CacheKeyFixture._run_cache_key_equal_fixture  sZ    ;;#f+
 	FDAq q	6!9nE	Fr#   N)r   r   r   r  r  r  r   r#   r!   r  r  n  s    "IVFr#   r  )4
contextlibr  r  r   r   r   re   r   r   r   r	   r
   entitiesr   r   r   r   r   r   r   r.  r   r   orm.decl_apir   r   rp   r   sql.elementsr   mark_base_test_classrt  r   r7   contextmanagerrU   r   r   r  r  r  r0  rm   r5  r8  r:  r<  AssertsExecutionResultsr?  rz  r  r  r   r#   r!   <module>r     s8     	 
       ! & %  /   "  * 0  ( sv s sl	 "&  
! 
! N Nb+f +F   E 

	h 	yZ?? yx!7J !7HMJ M`dFf dFr#   