
    ؄_2                        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Z
d)d	Z G d
 de          Zd Zd Zd)dZd)dZ G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Zej        Zd Zd Zd Zd Zd  Zd)d!Zed"             Z d)d#Z!d$ Z"d)d%Z#d)d&Z$d)d'Z%d( Z&dS )*    N   )config   )util)	decorator)inspect_getfullargspecc                 v    t                      }t          | |          }|j                            |           |S N)compound_as_predicateskipsadd	predicatereasonrulepreds       b/var/www/book.euthymeo.com/html/venv/lib/python3.11/site-packages/sqlalchemy/testing/exclusions.pyskip_ifr      3    ::DF++DJNN4K    c                 v    t                      }t          | |          }|j                            |           |S r
   )r   r   failsr   r   s       r   fails_ifr      r   r   c                       e Zd Zd Zd Zd Zd Zed             Zd Z	d Z
d Zd	 Zd
 Zej        d             Zd ZddZddZdS )r   c                 x    t                      | _        t                      | _        t                      | _        d S r
   )setr   r   tagsselfs    r   __init__zcompound.__init__#   s'    UU
UU
EE			r   c                 ,    |                      |          S r
   )r   r    others     r   __add__zcompound.__add__(   s    xxr   c                    t                      }|j                            | j                   |j                            | j                   |j                            | j                   |D ]_}|j                            |j                   |j                            |j                   |j                            |j                   `|S r
   r   r   updater   r   )r    otherscopyr$   s       r   r   zcompound.add+   s    zz
$*%%%
$*%%%	### 	) 	)EJek***Jek***IUZ((((r   c                    t                      }|j                            d | j        D                        |j                            d | j        D                        |j                            | j                   |S )Nc              3   4   K   | ]}t          |          V  d S r
   NotPredicate).0fails     r   	<genexpr>z compound.not_.<locals>.<genexpr>8   *      DD,t,,DDDDDDr   c              3   4   K   | ]}t          |          V  d S r
   r-   )r/   skips     r   r1   z compound.not_.<locals>.<genexpr>9   r2   r   r'   )r    r*   s     r   not_zcompound.not_6   sv    zz
DDDDDDDD
DDDDDDDD	###r   c                 @    |                      t          j                  S r
   )enabled_for_configr   _currentr   s    r   enabledzcompound.enabled=   s    &&v777r   c                 f    | j                             | j                  D ]} ||          r dS dS )NFTr   unionr   )r    r   r   s      r   r7   zcompound.enabled_for_configA   sH    ))$*55 	 	Iy   uu 4r   c                 Z    fd| j                             | j                  D             S )Nc                 P    g | ]"} |          |                               #S  
_as_string)r/   r   r   s     r   
<listcomp>z4compound.matching_config_reasons.<locals>.<listcomp>I   sG     
 
 
y  
  ((
 
 
r   r;   r    r   s    `r   matching_config_reasonsz compound.matching_config_reasonsH   s@    
 
 
 
!Z--dj99
 
 
 	
r   c                     t          | j                            |           o| p| j                            |                    S r
   )boolr   intersection)r    include_tagsexclude_tagss      r   include_testzcompound.include_testO   sK    	&&|444 K!!ITY%;%;L%I%I
 
 	
r   c                     | j                             |j                    | j                            |j                   | j                            |j                   d S r
   )r   r(   r   r   r#   s     r   _extendzcompound._extendU   sP    
%+&&&
%+&&&	$$$$$r   c                      t          |d          r|j                                        |S t           fd            } ||          } |_        |S )N_sa_exclusion_extendc                 <     j         t          j        | g|R i |S r
   )_dor   r8   )fnargskwr    s      r   decoratez#compound.__call__.<locals>.decorate_   s)    48FOR=$==="===r   )hasattrrN   rL   r   )r    rQ   rT   	decorateds   `   r   __call__zcompound.__call__Z   sr    2-.. 	#++D111I		> 	> 	> 	> 
	> HRLL	)-	&r   c              #   L  K   t                      }|j                            | j                            | j                             	 d V  |                    t          j                   d S # t          $ r+}|	                    t          j        |           Y d }~d S d }~ww xY wr
   )
r   r   r(   r   r<   _expect_successr   r8   	Exception_expect_failure)r    	all_failsexs      r   fail_ifzcompound.fail_ifg   s      JJ	tz//
;;<<<	7EEE %%fo66666  	; 	; 	;%%for:::::::::	;s   	A. .
B#8 BB#c                 d   | j         D ]M} ||          r@dt          j                    d|                    |          }t          j        |           N	  ||i |}|                     ||j                   |S # t          $ r(}|                     |||j                   Y d }~d S d }~ww xY w)N'z' : )name)	r   r   get_current_test_namerA   	skip_testrY   __name__rZ   r[   )	r    cfgrQ   rR   rS   r4   msgreturn_valuer]   s	            r   rP   zcompound._dos   s    J 	& 	&DtCyy & &02222OOC(((  %%%	 2t?r??L   2; 777	  	< 	< 	<  br{ ;;;;;;;;;	<s   A= =
B/B**B/blockc           	      f   | j         D ]{} ||          rnt          j        r%t          |                              dd          }nt          |          }t          |d|                    |          d|d            d S |t          j        |t          j
                    d                    d S )	Nzutf-8ignore)errorsz failed as expected (z):  r   )with_traceback)r   r   py2kunicodeencodestrprintrA   raise_sysexc_info)r    r   r]   ra   r0   str_exs         r   r[   zcompound._expect_failure   s    J 	> 	>DtF|| 9 %$R[[///IIFF WWF  44!8!8!8!8&&&B    K3<>>!+<======r   c           
          | j         sd S | j         D ]G} |          r:t          d|dd                    fd| j         D                       d          Hd S )NzUnexpected success for 'z' ( and c              3   B   K   | ]}|                               V  d S r
   r@   )r/   r0   r   s     r   r1   z+compound._expect_success.<locals>.<genexpr>   s@       % %8<DOOF33% % % % % %r   ))r   AssertionErrorjoin)r    r   ra   r0   s    `  r   rY   zcompound._expect_success   s    z 	FJ 
	 
	DtF|| 	$n  % % % %@D
% % %      	
	 
	r   N)rh   )rd   
__module____qualname__r!   r%   r   r5   propertyr9   r7   rD   rJ   rL   rW   
contextlibcontextmanagerr^   rP   r[   rY   r?   r   r   r   r   "   s         
  	 	 	   8 8 X8  
 
 

 
 
% % %
   	7 	7 	7     "> > > >"     r   r   c                 "    t          | g          S r
   )r   )tagnames    r   requires_tagr      s    	??r   c                 V    t                      }|j                            |            |S r
   )r   r   r(   )tagnamescomps     r   r   r      s&    ::DIXKr   c                 Z    t          |           } t          t          |           |          S r
   )r   r   r.   r   r   s     r   only_ifr      s'    i((I<	**F333r   c                 Z    t          |           } t          t          |           |          S r
   )r   r   r.   r   s     r   succeeds_ifr      s'    i((IL++V444r   c                   6    e Zd Zedd            ZddZddZdS )		PredicateNc                 l    t          |t                    r                     |j        |          S t          |t                    r|r|j        ||_        |S t          |t          t          f          rt           fd|D             |          S t          |t                    r	t          | S t          |t          j                  rt          j        d|          }|st          d|z            |                    d          }|                    d          }|                    d          r?t          d |                    d                              d          D                       nd }t          ||||	          S t          j        |          rt'          ||          S J d|z              )Nc                 :    g | ]}                     |          S r?   )as_predicate)r/   r   clss     r   rB   z*Predicate.as_predicate.<locals>.<listcomp>   s'    >>>D!!$''>>>r   z.([\+\w]+)\s*(?:(>=|==|!=|<=|<|>)\s*([\d\.]+))?z(Couldn't locate DB name in predicate: %rr   r      c              3   4   K   | ]}t          |          V  d S r
   )int)r/   ds     r   r1   z)Predicate.as_predicate.<locals>.<genexpr>   s(      AAc!ffAAAAAAr   .)descriptionFzunknown predicate type: %s)
isinstancer   r   r7   r   r   listr   OrPredicatetupleSpecPredicater   string_typesrematch
ValueErrorgroupsplitcallableLambdaPredicate)r   r   r   tokensdbopspecs   `      r   r   zPredicate.as_predicate   s   i**  	C##I$@+NNN	9-- 	C 4y4<(3	%	D#;// 	C>>>>I>>>   	5)) 	C ),,	4#455 	CXA9 F   >J   aBaB <<??AAfll1oo&;&;C&@&@AAAAAA  !R;GGGG]9%% 	C"9k:::B6BBBBr   Fc                      | |          }|r| }| j         |r|j        j                                        nd|r|j        j                                        nd|rdnd|rdnddz  S )Nz<no driver>z<no database>zdoesn't supportzdoes support)driverdatabasedoesnt_supportdoes_support)r   r   urlget_driver_nameget_backend_name)r    r   negatebool_s       r   _format_descriptionzPredicate._format_description   s    V 	JEfim33555!	66888 38L//n.3JNN9J	#
 	#
 	
 		
r   c                     t                      r
   )NotImplementedErrorr    r   r   s      r   rA   zPredicate._as_string   s    !###r   r
   F)NF)rd   r}   r~   classmethodr   r   rA   r?   r   r   r   r      s_        !C !C !C [!CF
 
 
 
$ $ $ $ $ $r   r   c                   $    e Zd ZddZd ZddZdS )BooleanPredicateNc                 ,    || _         |pd|z  | _        d S )Nz
boolean %s)valuer   )r    r   r   s      r   r!   zBooleanPredicate.__init__   s!    
&>,*>r   c                     | j         S r
   )r   rC   s     r   rW   zBooleanPredicate.__call__   s
    zr   Fc                 0    |                      ||          S )Nr   r   r   s      r   rA   zBooleanPredicate._as_string   s    ''v'>>>r   r
   r   rd   r}   r~   r!   rW   rA   r?   r   r   r   r      sK        ? ? ? ?  ? ? ? ? ? ?r   r   c            	           e Zd ZddZej        ej        ej        ej        ej	        ej
        ej        d dZd Zd	dZdS )
r   Nc                 >    || _         || _        || _        || _        d S r
   )r   r   r   r   )r    r   r   r   r   s        r   r!   zSpecPredicate.__init__   s%    	&r   c                 2    | |d         k    o| |d         k    S )Nr   r   r?   )valpairs     r   <lambda>zSpecPredicate.<lambda>  s    SDG^%FtAw r   )<>z==z!=z<=z>=inbetweenc                 r   |j         }d| j         v r| j                             d          \  }}n	| j         d }}|r|j        |k    rdS ||j        |k    rdS | j        Z|
J d            t          |          }t          | j        d          r| j        p| j        | j                 } ||| j                  S dS )N+Fz%DBAPI version specs not supported yetrW   T)	r   r   ra   r   r   _server_versionrU   _opsr   )r    r   enginedialectr   versionopers          r   rW   zSpecPredicate.__call__  s    $'>>"gmmC00OGVV"gtVG 	v{g--5&-6"9"957>>#J>>>%f--G,,8NDIdg<N  4+++4r   Fc                     | j         |                     |          S | j        |r
d| j        z  S d| j        z  S |rd| j        d| j        d| j        S | j        d| j        d| j        S )Nznot %sz%sznot rl   )r   r   r   r   r   r   s      r   rA   zSpecPredicate._as_string(  s    '++F333W_ &$'))dg~% B B)-$'''499EE%)WWWdgggtyyAAr   NNNr   )rd   r}   r~   r!   operatorltgteqnelegecontainsr   rW   rA   r?   r   r   r   r      s        ' ' ' ' [[kkkkFF	 	D  0B B B B B Br   r   c                   $    e Zd ZddZd ZddZdS )r   Nc                     t                    }|d         sfd| _        n| _        |pd| _        |pi | _        |r	|| _        d S j        rj        | _        d S d| _        d S )Nr   c                                  S r
   r?   )r   lambda_s    r   r   z*LambdaPredicate.__init__.<locals>.<lambda>;  s    ggii r   r?   zcustom function)r   r   rR   rS   r   __doc__)r    r   r   rR   rS   r   s    `    r   r!   zLambdaPredicate.__init__8  s    %g..Aw 	#////DLL"DLJB	( 	1*D_ 	1&D0Dr   c                 ,    |                      |          S r
   )r   rC   s     r   rW   zLambdaPredicate.__call__G  s    ||F###r   Fc                 ,    |                      |          S r
   r   r   s      r   rA   zLambdaPredicate._as_stringJ  s    ''///r   r   r   r   r?   r   r   r   r   7  sK        1 1 1 1$ $ $0 0 0 0 0 0r   r   c                   $    e Zd ZddZd ZddZdS )r.   Nc                 "    || _         || _        d S r
   )r   r   )r    r   r   s      r   r!   zNotPredicate.__init__O  s    "&r   c                 .    |                      |           S r
   )r   rC   s     r   rW   zNotPredicate.__call__S  s    >>&))))r   Fc                 v    | j         r|                     ||           S | j                            ||           S r
   )r   r   r   rA   r   s      r   rA   zNotPredicate._as_stringV  s@     	A++FJ???>,,VZ@@@r   r
   r   r   r?   r   r   r.   r.   N  sQ        ' ' ' '* * *A A A A A Ar   r.   c                   2    e Zd ZddZd Zd	dZd Zd	dZdS )
r   Nc                 "    || _         || _        d S r
   )
predicatesr   )r    r   r   s      r   r!   zOrPredicate.__init__^  s    $&r   c                 6    | j         D ]} ||          r dS dS )NTF)r   )r    r   r   s      r   rW   zOrPredicate.__call__b  s4    O 	 	DtF|| ttur   Fc                 b    rd}nd}|                     fd| j        D                       S )Nrx   z or c              3   F   K   | ]}|                                V  dS )r   Nr@   )r/   pr   r   s     r   r1   z(OrPredicate._eval_str.<locals>.<genexpr>m  sD        
  
45ALLL// 
  
  
  
  
  
r   )r|   r   )r    r   r   conjunctions    `` r   	_eval_strzOrPredicate._eval_strh  s]     	!!KK K  
  
  
  
  
9= 
  
  
 
 
 	
r   c                 n    | j         d|                     |          z   S |                     |d          S )NzNot Tr   )r   r   r   rC   s     r   _negation_strzOrPredicate._negation_strq  s:    'D44V<<<<>>&>666r   c                     |r|                      |          S | j        |                     |          S |                     |          S r
   )r   r   r   r   r   s      r   rA   zOrPredicate._as_stringw  sM     	.%%f---+//777~~f---r   r
   r   )rd   r}   r~   r!   rW   r   r   rA   r?   r   r   r   r   ]  sn        ' ' ' '  
 
 
 
7 7 7. . . . . .r   r   c                 J     t          | ||          t          j                  S r
   )r   r   r8   )r   r   r   s      r   _is_excludedr     s     &=R&&v777r   c                     |                                  }t          | j        dd          }|d}|                                 |S )z#Return a server_version_info tuple.server_version_infoNr?   )connectgetattrr   close)r   connr   s      r   r   r     sC     >>Dfn&;TBBGJJLLLNr   c                  4    t          d | D                       S )Nc                 B    g | ]}t                               |          S r?   r   r   r/   r   s     r   rB   zdb_spec.<locals>.<listcomp>  s&    AAAr	..r22AAAr   r   dbss    r   db_specr    s    AASAAABBBr   c                  <    t          t          dd                    S )NFzmark as executer   r   r?   r   r   openr    s    #E+<==>>>r   c                  <    t          t          dd                    S )NTzmarked as skipr  r?   r   r   closedr
    s    #D*:;;<<<r   c                 @    t          t          d| pd                    S )NTzexpected to fail)r   r   )r   s    r   r   r     s!    $T6+G5GHHIIIr   c                 <    t          t          |           d          S )NzFuture feature)r   r   )rQ   args     r   futurer    s    OB'')9:::r   c                 "    t          | |          S r
   )r   r   r   s     r   fails_onr    s    Br   c                  N    t          t          d | D                                 S )Nc                 B    g | ]}t                               |          S r?   r   r  s     r   rB   z.fails_on_everything_except.<locals>.<listcomp>  s&    #M#M#M2I$:$:2$>$>#M#M#Mr   )r   r   r  s    r   fails_on_everything_exceptr    s'    {#M#M#M#M#MNNOOOr   c                 "    t          | |          S r
   )r   r  s     r   r4   r4     s    2vr   c                 x    t          t          fdt          j        |           D                                 S )Nc                 F    g | ]}t                               |          S r?   r   )r/   r   r   s     r   rB   zonly_on.<locals>.<listcomp>  s)    LLLBY##B//LLLr   )r   r   r   to_list)r  r   s    `r   only_onr    sC    LLLL$,s:K:KLLL	
 	
  r   c                 @    t          t          | ||          |          S r
   )r   r   )r   r   r   r   s       r   excluder    s    =R..777r   c                 ^    |s
J d             t          d |D                       |           S )Nzno queries sent!c                 B    g | ]}t                               |          S r?   r   )r/   querys     r   rB   zagainst.<locals>.<listcomp>  s&    KKK%	..u55KKKr   r  )r   queriess     r   againstr     sE    &&&&&&L;KK7KKKLL  r   r
   )'r   r   r   rt    r   r   r   util.compatr   r   r   objectr   r   r   r   r   r   r   r   r   r.   r   r   r   r   r   r  r  r
  r   r  r  r  r4   r  r  r   r?   r   r   <module>r$     s,        				 



                   0 0 0 0 0 0      A A A A Av A A AH    4 4 4 4
5 5 5 5
5$ 5$ 5$ 5$ 5$ 5$ 5$ 5$p	? 	? 	? 	? 	?y 	? 	? 	?6B 6B 6B 6B 6BI 6B 6B 6Br0 0 0 0 0i 0 0 0.A A A A A9 A A A!. !. !. !. !.) !. !. !.H &8 8 8	 	 	C C C? ? ?= = =J J J J ; ; ;       P P P      8 8 8 8    r   