
    ؄_5              	          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  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 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 j        d g d!                    Z G d" d#e          Zej        d$             ZdS )%    N   )event)util)url)DefaultDialect)_distill_params)_DDLCompilesc                   &    e Zd ZdZdZdZd Zd ZdS )
AssertRuleFNTc                     d S N selfexecute_observeds     a/var/www/book.euthymeo.com/html/venv/lib/python3.11/site-packages/sqlalchemy/testing/assertsql.pyprocess_statementzAssertRule.process_statement   s        c                     J d            )NFz?All statements are complete, but pending assertion rules remainr   r   s    r   no_more_statementszAssertRule.no_more_statements   s    	
%	
 	
 	
r   )__name__
__module____qualname__is_consumederrormessageconsume_statementr   r   r   r   r   r   r      sB        KL  
 
 
 
 
r   r   c                       e Zd ZdS )SQLMatchRuleNr   r   r   r   r   r   r   r   $   s        Dr   r   c                        e Zd ZdZddZd ZdS )	CursorSQLFNc                 "    || _         || _        d S r   )	statementparams)r   r$   r%   s      r   __init__zCursorSQL.__init__+   s    "r   c                 "   |j         d         }| j        |j        k    s| j        9| j        |j        k    r)d| j        d| j        d|j        d|j        | _        d S |j                             d           d| _        |j         s	d| _        d S d S )Nr   zTesting for exact SQL z parameters z
 received  T)
statementsr$   r%   
parametersr   popr   r   )r   r   stmts      r   r   zCursorSQL.process_statement/   s    *1->T^++K#t(F(F
 NNNKKKNNNOO  '++A...#D#. .)-&&&. .r   r   )r   r   r   r   r&   r   r   r   r   r"   r"   (   s=           . . . . .r   r"   c                   :    e Zd Zd
dZd Zd Zd Zd Zd Zd	 Z	dS )CompiledSQLNdefaultc                 0    || _         || _        || _        d S r   )r$   r%   dialect)r   r$   r%   r1   s       r   r&   zCompiledSQL.__init__E   s    "r   c                 D    t          j        dd| j                  }||k    S N[\n\t] )resubr$   )r   r   received_statementr,   s       r   _compare_sqlzCompiledSQL._compare_sqlJ   s"    viT^44!T))r   c                     | j         dk    rt                      S | j         dk    rddi}ni } t          j        | j                                                   di |S )Nr/   
postgresqlimplicit_returningTr   )r1   r   r   URLget_dialect)r   r   r%   s      r   _compile_dialectzCompiledSQL._compile_dialectN   si    <9$$!### ||++.56374<((4466@@@@@r   c                 >   |j         }|                     |          }t          |j        j        t
                    r:|j        j                            ||j                            d                    nO|j        j                            ||j        j	        |j        j
        |j                            d                    t          j        ddt          j                            }|j        }|s                                g}nfd|D             }||fS )zxreconstruct the statement and params in terms
        of a target dialect, which for CompiledSQL is just DefaultDialect.schema_translate_map)r1   rA   )r1   column_keysinlinerA   r4   r5   c                 :    g | ]}                     |          S r   )construct_params).0mcompileds     r   
<listcomp>z3CompiledSQL._received_statement.<locals>.<listcomp>u   s4     $ $ $12))!,,$ $ $r   )contextr?   
isinstancerH   r$   r	   compileexecution_optionsgetrB   rC   r6   r7   r   	text_typer*   rE   )r   r   rJ   compare_dialect_received_statementr*   _received_parametersrH   s          @r   rQ   zCompiledSQL._received_statementY   sF    #*//0@AAg&0,?? 	'199'%,%>%B%B*& & :  HH '199'#,8'.%,%>%B%B*& &	 :  H !fYDN84L4LMM%0
 	$,$=$=$?$?#@  $ $ $ $6@$ $ $  #$888r   c                 0   |j         }|                     |          \  }}|                     |          }|                     ||          }|r|t	          |          }t	          |          }|ro|rmt          |                    d                    }	t          t	          |                    D ]'\  }
}|	D ]}||vs||         |	|         k    r n||
=  n(d}n|r|m|s|rd}|rd| _        d | _	        d S | 
                    |          ||dz  | _	        d S )Nr   FT)r8   received_parameters)rJ   rQ   _all_paramsr9   listdictr+   	enumerater   r   _failure_message)r   r   rJ   rQ   rR   r%   
equivalent
all_paramsall_receivedparamidxreceived	param_keys                r   r   zCompiledSQL.process_statement{   s   "*484L4L5
 5
11 !!'**&&'79LMM
 	'!!&\\
#$899  \  !2!233E)243E3E)F)F  X). " "I !* 9 9#+I#6%	:J#J#J % $K !-S 1!E !& &+
- ! \ .  ' '!&J 	#D $D $ 5 5f = =&9';A A !Dr   c                     | j         rPt          j        | j                   r|                      |          }n| j         }t          |t                    s|g}|S d S r   )r%   r   callablerK   rV   )r   rJ   r%   s      r   rU   zCompiledSQL._all_params   s]    ; 		}T[)) %W--fd++ " M4r   c                     d| j                             dd          dt          |                              dd          dS )NzTesting for compiled statement %%% partial params E, received %(received_statement)r with params %(received_parameters)r)r$   replacereprr   expected_paramss     r   rY   zCompiledSQL._failure_message   sL      &&sD1111_%%--c48888	
r   Nr/   )
r   r   r   r&   r9   r?   rQ   r   rU   rY   r   r   r   r.   r.   D   s           
* * *	A 	A 	A 9  9  9D/ / /b
 
 
	
 	
 	
 	
 	
r   r.   c                   "    e Zd ZddZd Zd ZdS )RegexSQLNr/   c                     t                               |            t          j        |          | _        || _        || _        || _        d S r   )r   r&   r6   rL   regex
orig_regexr%   r1   )r   rp   r%   r1   s       r   r&   zRegexSQL.__init__   s@    d###Z&&
r   c                     d| j                             dd          dt          |                              dd          dS )Nz Testing for compiled statement ~rd   re   rf   rg   )rq   rh   ri   rj   s     r   rY   zRegexSQL._failure_message   sL      ''T2222_%%--c48888	
r   c                 P    t          | j                            |                    S r   )boolrp   match)r   r   r8   s      r   r9   zRegexSQL._compare_sql   s!    DJ$$%788999r   rl   )r   r   r   r&   rY   r9   r   r   r   rn   rn      sF           	
 	
 	
: : : : :r   rn   c                   0     e Zd Zd Zd Z fdZd Z xZS )
DialectSQLc                     |j         j        S r   )rJ   r1   r   s     r   r?   zDialectSQL._compile_dialect   s    '//r   c                 :    t          j        dd|          }||k    S r3   )r6   r7   )r   	real_stmtreceived_stmtr,   s       r   _compare_no_spacezDialectSQL._compare_no_space   s     viY//$$r   c                     t          t          |                               |          \  }}|j        D ]}|                     |j        |          r n t          d|z            ||j        j        fS )NzICan't locate compiled statement %r in list of statements actually invoked)	superrw   rQ   r)   r|   r$   AssertionErrorrJ   compiled_parameters)r   r   r{   received_paramsrz   	__class__s        r   rQ   zDialectSQL._received_statement   s    ).*
 *


.
/
/ 	'
 *4 	 	I%%i&9=II  !.0=>  
 .6JJJr   c                    t          j        dd| j                  }|j        j        j        }|dk    rt          j        dd|          }n2d }|dk    rd}n|dk    rd	}n|d
k    rd }t          j        d||          }||k    S )Nr4   r5   pyformatz	:([\w_]+)z%(\1)sqmark?formatz%snumeric)r6   r7   r$   rJ   r1   
paramstyle)r   r   r8   r,   r   repls         r   r9   zDialectSQL._compare_sql   s    viT^44 &-5@
##6,	488DD DW$$x''y((6,d33D!T))r   )r   r   r   r?   r|   rQ   r9   __classcell__r   s   @r   rw   rw      sj        0 0 0% % %K K K K K"* * * * * * *r   rw   c                        e Zd Zd Zd Zd ZdS )CountStatementsc                 "    || _         d| _        d S Nr   count_statement_count)r   r   s     r   r&   zCountStatements.__init__
  s    
 !r   c                 &    | xj         dz  c_         d S )N   )r   r   s     r   r   z!CountStatements.process_statement  s    "r   c                 X    | j         | j        k    rJ d| j         | j        fz              d S )NFz,desired statement count %d does not match %dr   r   s    r   r   z"CountStatements.no_more_statements  sG    :...H
%L     /.r   N)r   r   r   r&   r   r   r   r   r   r   r   	  sA        " " "# # #    r   r   c                       e Zd Zd Zd ZdS )AllOfc                 .    t          |          | _        d S r   )setrulesr   r   s     r   r&   zAllOf.__init__  s    ZZ


r   c                 :   t          | j                  D ]a}d |_        |                    |           |j        r+| j                            |           | j        sd| _         d S |j        s
d | _         d S bt          | j                  d         j        | _        d S NTr   )rV   r   r   r   r   discardr   r   rules      r   r   zAllOf.process_statement  s    $$ 	A 	AD $D""#3444 
""4(((z ,'+D$& $(!
 !%TZ 0 0 3 @Dr   N)r   r   r   r&   r   r   r   r   r   r     s7             A A A A Ar   r   c                   *     e Zd Zd Zd Z fdZ xZS )EachOfc                 .    t          |          | _        d S r   )rV   r   r   s     r   r&   zEachOf.__init__/  s    %[[


r   c                     | j         rf| j         d         }|                    |           |j        r| j                             d           n|j        r|j        | _        |j        rn| j         f| j         s	d| _        d S d S )Nr   T)r   r   r   r+   r   r   r   s      r   r   zEachOf.process_statement2  s    j 	:a=D""#3444 6
q!!!!" 6$($5!%  j 	 z 	$#D	$ 	$r   c                     | j         r3| j         d         j        s!| j         d                                          d S | j         r)t          t          |                                            d S d S r   )r   r   r   r~   r   )r   r   s    r   r   zEachOf.no_more_statements@  sq    : 	5djm7 	5JqM,,.....Z 	5&$2244444	5 	5r   )r   r   r   r&   r   r   r   r   s   @r   r   r   .  sV        ! ! !$ $ $5 5 5 5 5 5 5 5 5r   r   c                       e Zd Zd ZdS )Orc                     | j         D ](}|                    |           |j        r
d| _         d S )t          | j                   d         j        | _        d S r   )r   r   r   rV   r   r   s      r   r   zOr.process_statementH  sk    J 	A 	AD""#3444 #'  !%TZ 0 0 3 @Dr   N)r   r   r   r   r   r   r   r   r   G  s(        A A A A Ar   r   c                       e Zd Zd ZdS )SQLExecuteObservedc                 Z    || _         || _        t          ||          | _        g | _        d S r   )rJ   clauseelementr   r*   r)   )r   rJ   r   multiparamsr%   s        r   r&   zSQLExecuteObserved.__init__S  s-    *)+v>>r   N)r   r   r   r&   r   r   r   r   r   R  s#            r   r   c                       e Zd ZdS )SQLCursorExecuteObservedNr    r   r   r   r   r   Z  s         	Dr   r   )r$   r*   rJ   executemanyc                        e Zd Zd Zd Zd ZdS )SQLAsserterc                     g | _         d S r   )accumulatedr   s    r   r&   zSQLAsserter.__init__d  s    r   c                 "    | j         | _        | ` d S r   )r   _finalr   s    r   _closezSQLAsserter._closeg  s    &r   c                 *   t          | }t          | j                  }|rJ|                    d          }|                    |           |j        rn|j        rJ |j                    |J|r
J d            |j        s|                                 d S d S )Nr   Fz Additional SQL statements remain)r   rV   r   r+   r   r   r   r   )r   r   r   observedr$   s        r   assert_zSQLAsserter.assert_k  s    u~$$ 	0 QI""9--- 0" 0/d////  	0  	&<<<<<! 	&##%%%%%	& 	&r   N)r   r   r   r&   r   r   r   r   r   r   r   c  sA            & & & & &r   r   c              #     K   t                      g t          j        | d          fd            }t          j        | d          fd            }	 V  t          j        | d|           t          j        | d|                                            d S # t          j        | d|           t          j        | d|                                            w xY w)Nbefore_executec                     |||fd d <   d S r   r   )connr   r   r%   origs       r   connection_executez)assert_engine.<locals>.connection_execute  s      f4QQQr   after_cursor_executec                 2   |sd S j         r"j         d         j        |u rj         d         }n>t          |d         d         d                   }j                             |           |j                            t          ||||                     d S )Nr   r   r   )r   rJ   r   appendr)   r   )	r   cursorr$   r*   rJ   r   obsasserterr   s	          r   cursor_executez%assert_engine.<locals>.cursor_execute  s      	F  	-$R(0G;;&r*CC$Wd1gtAwQHHC '',,,$:w 	
 	
 	
 	
 	
r   )r   r   listens_forremover   )enginer   r   r   r   s      @@r   assert_enginer   |  s     }}HD
v/005 5 5 5 105
 v566
 
 
 
 
 76
*V3^DDDV-/ABBB 	V3^DDDV-/ABBBs   B AC)collections
contextlibr6   r5   r   r   r   r   engine.defaultr   engine.utilr   schemar	   objectr   r   r"   r.   rn   rw   r   r   r   r   r   
namedtupler   r   contextmanagerr   r   r   r   <module>r      s           				                   + + + + + + ) ) ) ) ) ) ! ! ! ! ! !
 
 
 
 
 
 
 
 	 	 	 	 	: 	 	 	. . . . . . . .8}
 }
 }
 }
 }
, }
 }
 }
@: : : : :{ : : :.+* +* +* +* +* +* +* +*\    j    A A A A AJ A A A*5 5 5 5 5Z 5 5 52A A A A A A A A       	 	 	 	 	K"=== 	 	 	& & & & && & & &2 & & & & &r   