o
    y¬´\V4  ã                   @   sN  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
„ d
eƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd „ d e  d g d!¢¡ƒZG d"d#„ d#eƒZejd$d%„ ƒZdS )&é    Né   )Úevent)Úutil)Úurl)ÚDefaultDialect)Ú_distill_params)Ú_DDLCompilesc                   @   s(   e Zd ZdZdZdZdd„ Zdd„ ZdS )Ú
AssertRuleFNTc                 C   s   d S ©N© ©ÚselfÚexecute_observedr   r   úN/var/www/html/env/lib/python3.10/site-packages/sqlalchemy/testing/assertsql.pyÚprocess_statement   s   zAssertRule.process_statementc                 C   s   J dƒ‚)NFz?All statements are complete, but pending assertion rules remainr   ©r   r   r   r   Úno_more_statements   s   ÿzAssertRule.no_more_statements)Ú__name__Ú
__module__Ú__qualname__Úis_consumedÚerrormessageÚconsume_statementr   r   r   r   r   r   r	      s    r	   c                   @   ó   e Zd ZdS )ÚSQLMatchRuleN©r   r   r   r   r   r   r   r   $   s    r   c                   @   s"   e Zd ZdZddd„Zdd„ ZdS )Ú	CursorSQLFNc                 C   s   || _ || _d S r
   )Ú	statementÚparams)r   r   r   r   r   r   Ú__init__+   ó   
zCursorSQL.__init__c                 C   sp   |j d }| j|jks| jd ur%| j|jkr%d| j| j|j|jf | _d S |j  d¡ d| _|j s6d| _d S d S )Nr   z5Testing for exact SQL %s parameters %s received %s %sT)Ú
statementsr   r   Ú
parametersr   Úpopr   r   )r   r   Ústmtr   r   r   r   /   s    
üÿÿ

ÿzCursorSQL.process_statementr
   )r   r   r   r   r   r   r   r   r   r   r   (   s    
r   c                   @   sF   e Zd Zddd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Z	dS )ÚCompiledSQLNÚdefaultc                 C   s   || _ || _|| _d S r
   )r   r   Údialect)r   r   r   r'   r   r   r   r   E   s   
zCompiledSQL.__init__c                 C   s   t  dd| j¡}||kS ©Nú[\n\t]Ú )ÚreÚsubr   )r   r   Úreceived_statementr$   r   r   r   Ú_compare_sqlJ   s   zCompiledSQL._compare_sqlc                 C   sB   | j dkrtƒ S | j dkrddi}ni }t | j ¡ ¡ di |¤ŽS )Nr&   Ú
postgresqlÚimplicit_returningTr   )r'   r   r   ÚURLÚget_dialect)r   r   r   r   r   r   Ú_compile_dialectN   s   


zCompiledSQL._compile_dialectc                    sª   |j }|  |¡}t|jjtƒr|jjj||j d¡d�‰ n|jjj||jj	|jj
|j d¡d�‰ t ddt ˆ ¡¡}|j}|sHˆ  ¡ g}||fS ‡ fdd„|D ƒ}||fS )zxreconstruct the statement and params in terms
        of a target dialect, which for CompiledSQL is just DefaultDialect.Úschema_translate_map)r'   r4   )r'   Úcolumn_keysÚinliner4   r)   r*   c                    s   g | ]}ˆ   |¡‘qS r   )Úconstruct_params)Ú.0Úm©Úcompiledr   r   Ú
<listcomp>u   s    
ÿz3CompiledSQL._received_statement.<locals>.<listcomp>)Úcontextr3   Ú
isinstancer;   r   r   ÚcompileÚexecution_optionsÚgetr5   r6   r+   r,   r   Ú	text_typer"   r7   )r   r   r=   Úcompare_dialectÚ_received_statementr"   Ú_received_parametersr   r:   r   rD   Y   s4   
ÿþÿü

üÿzCompiledSQL._received_statementc                 C   sê   |j }|  |¡\}}|  |¡}|  ||¡}|r^|d ur^t|ƒ}t|ƒ}|rX|rXt| d¡ƒ}	tt|ƒƒD ]\}
}|	D ]}||vsH|| |	| krJ nq:||
=  nq4d}n|rX|s'|s\|r^d}|rhd| _d | _	d S |  
|¡||dœ | _	d S )Nr   FT)r-   Úreceived_parameters)r=   rD   Ú_all_paramsr.   ÚlistÚdictr#   Ú	enumerater   r   Ú_failure_message)r   r   r=   rD   rE   r   Ú
equivalentÚ
all_paramsÚall_receivedÚparamÚidxÚreceivedÚ	param_keyr   r   r   r   {   sB   ÿ
þû	ê
þzCompiledSQL.process_statementc                 C   s<   | j rt | j ¡r|   |¡}n| j }t|tƒs|g}|S d S r
   )r   r   Úcallabler>   rH   )r   r=   r   r   r   r   rG   ¬   s   
zCompiledSQL._all_paramsc                 C   s   d| j  dd¡|f S )NzzTesting for compiled statement %r partial params %r, received %%(received_statement)r with params %%(received_parameters)rú%z%%)r   Úreplace©r   Úexpected_paramsr   r   r   rK   ¸   s   ýÿzCompiledSQL._failure_message©Nr&   )
r   r   r   r   r.   r3   rD   r   rG   rK   r   r   r   r   r%   D   s    
"1r%   c                   @   s&   e Zd Zddd„Zdd„ Zdd„ ZdS )	ÚRegexSQLNc                 C   s,   t  | ¡ t |¡| _|| _|| _d| _d S rX   )r   r   r+   r?   ÚregexÚ
orig_regexr   r'   )r   rZ   r   r   r   r   r   Â   s
   

zRegexSQL.__init__c                 C   s   d| j |f S )Nz{Testing for compiled statement ~%r partial params %r, received %%(received_statement)r with params %%(received_parameters)r)r[   rV   r   r   r   rK   É   s   þÿzRegexSQL._failure_messagec                 C   s   t | j |¡ƒS r
   )ÚboolrZ   Úmatch)r   r   r-   r   r   r   r.   Ð   s   zRegexSQL._compare_sqlr
   )r   r   r   r   rK   r.   r   r   r   r   rY   Á   s    
rY   c                       s4   e Zd Zdd„ Zdd„ Z‡ fdd„Zdd„ Z‡  ZS )	Ú
DialectSQLc                 C   s   |j jS r
   )r=   r'   r   r   r   r   r3   Õ   s   zDialectSQL._compile_dialectc                 C   s   t  dd|¡}||kS r(   )r+   r,   )r   Ú	real_stmtÚreceived_stmtr$   r   r   r   Ú_compare_no_spaceØ   s   zDialectSQL._compare_no_spacec                    sJ   t t| ƒ |¡\}}|jD ]}|  |j|¡r nqtd| ƒ‚||jjfS )NzICan't locate compiled statement %r in list of statements actually invoked)	Úsuperr^   rD   r!   ra   r   ÚAssertionErrorr=   Úcompiled_parameters)r   r   r`   Úreceived_paramsr_   ©Ú	__class__r   r   rD   Ü   s   ÿþ
ÿÿÿzDialectSQL._received_statementc                 C   sz   t  dd| j¡}|jjj}|dkrt  dd|¡}||kS d }|dkr%d}n|dkr,d	}n|d
kr2d }t  d||¡}||kS )Nr)   r*   Úpyformatz	:([\w_]+)z%(\1)sÚqmarkú?Úformatz%sÚnumeric)r+   r,   r   r=   r'   Ú
paramstyle)r   r   r-   r$   rm   Úreplr   r   r   r.   í   s   
÷zDialectSQL._compare_sql)r   r   r   r3   ra   rD   r.   Ú__classcell__r   r   rf   r   r^   Ô   s
    r^   c                   @   ó$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚCountStatementsc                 C   s   || _ d| _d S ©Nr   ©ÚcountÚ_statement_count)r   rt   r   r   r   r     r    zCountStatements.__init__c                 C   s   |  j d7  _ d S )Né   )ru   r   r   r   r   r     s   z!CountStatements.process_statementc                 C   s$   | j | jkrJ d| j | jf ƒ‚d S )NFz,desired statement count %d does not match %drs   r   r   r   r   r   
  s   þÿz"CountStatements.no_more_statementsN)r   r   r   r   r   r   r   r   r   r   rq     s    rq   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚAllOfc                 G   ó   t |ƒ| _d S r
   )ÚsetÚrules©r   rz   r   r   r   r     ó   zAllOf.__init__c                 C   sl   t | jƒD ]%}d |_| |¡ |jr!| j |¡ | jsd| _ d S |js*d | _ d S qt | jƒd j| _d S ©NTr   )rH   rz   r   r   r   Údiscard©r   r   Úruler   r   r   r     s   
ýzAllOf.process_statementN)r   r   r   r   r   r   r   r   r   rw     s    rw   c                       s,   e Zd Zdd„ Zdd„ Z‡ fdd„Z‡  ZS )ÚEachOfc                 G   rx   r
   )rH   rz   r{   r   r   r   r   (  r|   zEachOf.__init__c                 C   s^   | j r%| j d }| |¡ |jr| j  d¡ n|jr|j| _|jr"n| j s| j s-d| _d S d S )Nr   T)rz   r   r   r#   r   r   r   r   r   r   r   +  s   

ø

ÿzEachOf.process_statementc                    s@   | j r| j d js| j d  ¡  d S | j rtt| ƒ ¡  d S d S rr   )rz   r   r   rb   r�   r   rf   r   r   r   9  s
   ÿzEachOf.no_more_statements)r   r   r   r   r   r   ro   r   r   rf   r   r�   '  s    r�   c                   @   ó   e Zd Zdd„ ZdS )ÚOrc                 C   s>   | j D ]}| |¡ |jrd| _ d S qt| j ƒd j| _d S r}   )rz   r   r   rH   r   r   r   r   r   r   A  s   

þzOr.process_statementN)r   r   r   r   r   r   r   r   rƒ   @  ó    rƒ   c                   @   r‚   )ÚSQLExecuteObservedc                 C   s"   || _ || _t||ƒ| _g | _d S r
   )r=   Úclauseelementr   r"   r!   )r   r=   r†   Úmultiparamsr   r   r   r   r   L  s   
zSQLExecuteObserved.__init__N)r   r   r   r   r   r   r   r   r…   K  r„   r…   c                   @   r   )ÚSQLCursorExecuteObservedNr   r   r   r   r   rˆ   S  s    rˆ   )r   r"   r=   Úexecutemanyc                   @   rp   )ÚSQLAsserterc                 C   s
   g | _ d S r
   )Úaccumulatedr   r   r   r   r   ]  s   
zSQLAsserter.__init__c                 C   s   | j | _| ` d S r
   )r‹   Ú_finalr   r   r   r   Ú_close`  s   zSQLAsserter._closec                 G   sh   t |Ž }t| jƒ}|r#| d¡}| |¡ |jrn
|jr!J |jƒ‚|s|r)J dƒ‚|js2| ¡  d S d S )Nr   Fz Additional SQL statements remain)r�   rH   rŒ   r#   r   r   r   r   )r   rz   r€   Úobservedr   r   r   r   Úassert_d  s   



úÿzSQLAsserter.assert_N)r   r   r   r   r�   r�   r   r   r   r   rŠ   \  s    rŠ   c                 #   s–   � t ƒ ‰ g ‰t | d¡‡fdd„ƒ}t | d¡‡ ‡fdd„ƒ}zˆ V  W t | d|¡ t | d|¡ ˆ  ¡  d S t | d|¡ t | d|¡ ˆ  ¡  w )NÚbefore_executec                    s   |||fˆ d d …< d S r
   r   )Úconnr†   r‡   r   )Úorigr   r   Úconnection_execute{  s   z)assert_engine.<locals>.connection_executeÚafter_cursor_executec                    sj   |sd S ˆ j rˆ j d j|u rˆ j d }nt|ˆd ˆd ˆd ƒ}ˆ j  |¡ |j t||||ƒ¡ d S )Néÿÿÿÿr   rv   r   )r‹   r=   r…   Úappendr!   rˆ   )r‘   Úcursorr   r"   r=   r‰   Úobs©Úasserterr’   r   r   Úcursor_execute�  s   ÿÿÿz%assert_engine.<locals>.cursor_execute)rŠ   r   Úlistens_forÚremover�   )Úenginer“   r›   r   r™   r   Úassert_engineu  s   €

þ
rŸ   )ÚcollectionsÚ
contextlibr+   r*   r   r   rž   r   Úengine.defaultr   Úengine.utilr   Úschemar   Úobjectr	   r   r   r%   rY   r^   rq   rw   r�   rƒ   r…   Ú
namedtuplerˆ   rŠ   ÚcontextmanagerrŸ   r   r   r   r   Ú<module>   s:   }.
þÿ	