U
    ÌZjt:  ã                
   @   sb  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ƒZG d!d"„ d"e  d"d#d$d%d&g¡ƒZG d'd(„ d(eƒZejd)d*„ ƒZdS )+é    Né   )Úevent)Úutil)Úurl)ÚDefaultDialect)Ú_distill_cursor_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   ú_/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/sqlalchemy/testing/assertsql.pyÚprocess_statement   s    zAssertRule.process_statementc                 C   s   dst dƒ‚d S )NFz?All statements are complete, but pending assertion rules remain)ÚAssertionError©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                   @   s   e Zd ZdS )ÚSQLMatchRuleN©r   r   r   r   r   r   r   r   $   s   r   c                   @   s   e Zd Zddd„Zdd„ ZdS )Ú	CursorSQLNTc                 C   s   || _ || _|| _d S r
   )Ú	statementÚparamsr   )r   r   r   r   r   r   r   Ú__init__)   s    zCursorSQL.__init__c                 C   sj   |j d }| j|jks,| jd k	rH| j|jkrHd| j| j|j|jf | _n|j  d¡ d| _|j sfd| _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_statement)NT©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   D   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_sqlI   s    zCompiledSQL._compare_sqlc                 C   sN   | j dkrtƒ }d|_|S | j dkr.ddi}ni }tj | j ¡ ¡ f |ŽS d S )Nr&   TÚ
postgresqlZimplicit_returning)r'   r   Zsupports_default_metavaluer   ÚURLÚcreateÚget_dialect)r   r   r'   r   r   r   r   Ú_compile_dialectM   s    


zCompiledSQL._compile_dialectc           	         s¸   |j }|  |¡}d}d‰d|jkr.|jd }nd}t|jtƒrP|jj||d�‰ n|jj|||jj|jj	|d�‰ t
 ddt ˆ ¡¡}|j}|sœˆ jˆd�g}n‡ ‡fdd	„|D ƒ}||fS )
zxreconstruct the statement and params in terms
        of a target dialect, which for CompiledSQL is just DefaultDialect.NÚschema_translate_map)r'   r4   )Ú	cache_keyr'   Úcolumn_keysÚfor_executemanyr4   r)   r*   ©Úextracted_parametersc                    s   g | ]}ˆ j |ˆd �‘qS )r8   )Úconstruct_params)Ú.0Úm©Úcompiledr9   r   r   Ú
<listcomp>‰   s
   ý ÿz3CompiledSQL._received_statement.<locals>.<listcomp>)Úcontextr3   Úexecution_optionsÚ
isinstanceÚclauseelementr   Úcompiler>   r6   r7   r+   r,   r   Ú	text_typer!   r:   )	r   r   r@   Zcompare_dialectr5   Zmap_Ú_received_statementr!   Ú_received_parametersr   r=   r   rF   \   s>    
ÿ
þûÿÿüzCompiledSQL._received_statementc                 C   sâ   |j }|  |¡\}}|  |¡}|  ||¡}|r¶|d k	r¶t|ƒ}t|ƒ}|rª|rªt| d¡ƒ}	tt|ƒƒD ]8\}
}|	D ] }||ks�|| |	| krt qhqt||
=  qFqhd}qªqF|s²|r¶d}|rÈd| _d | _	n|  
|¡||dœ | _	d S )Nr   FT)r-   Zreceived_parameters)r@   rF   Ú_all_paramsr.   ÚlistÚdictr"   Ú	enumerater   r   Ú_failure_message)r   r   r@   rF   rG   r   Z
equivalentÚ
all_paramsZall_receivedÚparamÚidxZreceivedZ	param_keyr   r   r   r   ’   s@    ÿ
ÿþþzCompiledSQL.process_statementc                 C   s>   | j r6t| j ƒr|   |¡}n| j }t|tƒs2|g}|S d S d S r
   )r   ÚcallablerB   rI   )r   r@   r   r   r   r   rH   Ã   s    

zCompiledSQL._all_paramsc                 C   s"   d| j  dd¡t|ƒ dd¡f S )NzzTesting for compiled statement
%r partial params %s, received
%%(received_statement)r with params %%(received_parameters)rú%ú%%)r   ÚreplaceÚrepr©r   Zexpected_paramsr   r   r   rL   Ï   s    þýÿzCompiledSQL._failure_message)Nr&   )
r   r   r   r   r.   r3   rF   r   rH   rL   r   r   r   r   r%   C   s   
61r%   c                   @   s&   e Zd Zd	dd„Zdd„ Zdd„ ZdS )
ÚRegexSQLNr&   c                 C   s,   t  | ¡ t |¡| _|| _|| _|| _d S r
   )r   r   r+   rD   ÚregexÚ
orig_regexr   r'   )r   rW   r   r'   r   r   r   r   Ü   s
    
zRegexSQL.__init__c                 C   s"   d| j  dd¡t|ƒ dd¡f S )Nz{Testing for compiled statement ~%r partial params %s, received %%(received_statement)r with params %%(received_parameters)rrQ   rR   )rX   rS   rT   rU   r   r   r   rL   ã   s    þýÿzRegexSQL._failure_messagec                 C   s   t | j |¡ƒS r
   )ÚboolrW   Úmatch)r   r   r-   r   r   r   r.   î   s    zRegexSQL._compare_sql)Nr&   )r   r   r   r   rL   r.   r   r   r   r   rV   Û   s   
rV   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 q>qtd| ƒ‚||jjfS )NzICan't locate compiled statement %r in list of statements actually invoked)	Úsuperr[   rF   r    r^   r   r   r@   Zcompiled_parameters)r   r   r]   Zreceived_paramsr\   ©Ú	__class__r   r   rF   ú   s     ÿþ
ÿÿzDialectSQL._received_statementc                 C   st   t  dd| j¡}|jjj}|dkr2t  dd|¡}n:d }|dkrDd}n|dkrRd	}n|d
kr^d }t  d||¡}||kS )Nr)   r*   Zpyformatz	:([\w_]+)z%(\1)sZqmarkú?Úformatz%sÚnumeric)r+   r,   r   r@   r'   Ú
paramstyle)r   r   r-   r#   re   Úreplr   r   r   r.     s    
zDialectSQL._compare_sql)r   r   r   r3   r^   rF   r.   Ú__classcell__r   r   r`   r   r[   ò   s   r[   c                   @   s$   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   rj   r   r   r   r   !  s    zCountStatements.__init__c                 C   s   |  j d7  _ d S )Né   )rk   r   r   r   r   r   %  s    z!CountStatements.process_statementc                 C   s(   | j | jkr$ds$td| j | jf ƒ‚d S )NFz,desired statement count %d does not match %d)rj   rk   r   r   r   r   r   r   (  s
    þz"CountStatements.no_more_statementsN)r   r   r   r   r   r   r   r   r   r   rh      s   rh   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚAllOfc                 G   s   t |ƒ| _d S r
   )ÚsetÚrules©r   ro   r   r   r   r   1  s    zAllOf.__init__c                 C   sj   t | jƒD ]H}d |_| |¡ |jrB| j |¡ | js<d| _ qfq
|js
d | _ qfq
t | jƒd j| _d S ©NTr   )rI   ro   r   r   r   Údiscard©r   r   Úruler   r   r   r   4  s    
zAllOf.process_statementNr$   r   r   r   r   rm   0  s   rm   c                       s,   e Zd Zdd„ Zdd„ Z‡ fdd„Z‡  ZS )ÚEachOfc                 G   s   t |ƒ| _d S r
   )rI   ro   rp   r   r   r   r   F  s    zEachOf.__init__c                 C   sV   | j rF| j d }| |¡ |jr.| j  d¡ n|jr<|j| _|jr qFq | j sRd| _d S )Nr   T)ro   r   r   r"   r   r   rs   r   r   r   r   I  s    

zEachOf.process_statementc                    s:   | j r"| j d js"| j d  ¡  n| j r6tt| ƒ ¡  d S ri   )ro   r   r   r_   ru   r   r`   r   r   r   W  s    zEachOf.no_more_statements)r   r   r   r   r   r   rg   r   r   r`   r   ru   E  s   ru   c                       s   e Zd Z‡ fdd„Z‡  ZS )ÚConditionalc                    s*   |rt t| ƒj|Ž  nt t| ƒj|Ž  d S r
   )r_   rv   r   )r   Ú	conditionro   Z
else_rulesr`   r   r   r   _  s    zConditional.__init__)r   r   r   r   rg   r   r   r`   r   rv   ^  s   rv   c                   @   s   e Zd Zdd„ ZdS )ÚOrc                 C   s<   | j D ]}| |¡ |jrd| _ q8qt| j ƒd j| _d S rq   )ro   r   r   rI   r   rs   r   r   r   r   g  s    

zOr.process_statementN)r   r   r   r   r   r   r   r   rx   f  s   rx   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚSQLExecuteObservedc                 C   s*   || _ || _t|jt|ƒ|ƒ| _g | _d S r
   )r@   rC   r   Ú
connectionÚtupler!   r    )r   r@   rC   Úmultiparamsr   r   r   r   r   r  s      ÿzSQLExecuteObserved.__init__c                 C   s
   t | jƒS r
   )Ústrr    r   r   r   r   Ú__repr__z  s    zSQLExecuteObserved.__repr__N)r   r   r   r   r~   r   r   r   r   ry   q  s   ry   c                   @   s   e Zd ZdS )ÚSQLCursorExecuteObservedNr   r   r   r   r   r   ~  s   r   r   r!   r@   Úexecutemanyc                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú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   sr   t |Ž }t| jƒ}|rJ| d¡}| |¡ |jr4qJq|jrdst|jƒ‚q|r`dsntd| ƒ‚n|jsn| ¡  d S )Nr   Fz$Additional SQL statements remain:
%s)	ru   rI   rƒ   r"   r   r   r   r   r   )r   ro   rt   Zobservedr   r   r   r   Úassert_�  s    


zSQLAsserter.assert_N)r   r   r   r   r„   r…   r   r   r   r   r�   ‡  s   r�   c                 #   sr   t ƒ ‰ g ‰t | d¡‡fdd„ƒ}t | d¡‡ ‡fdd„ƒ}z
ˆ V  W 5 t | d|¡ t | d|¡ ˆ  ¡  X d S )NZbefore_executec                    s   |||fˆ d d …< d S r
   r   )ÚconnrC   r|   r   rA   )Úorigr   r   Úconnection_execute¦  s    z)assert_engine.<locals>.connection_executeZafter_cursor_executec                    sj   |sd S ˆ j r*ˆ j d j|kr*ˆ j d }n&t|ˆd ˆd ˆd ƒ}ˆ j  |¡ |j t||||ƒ¡ d S )Néÿÿÿÿr   rl   r   )r‚   r@   ry   Úappendr    r   )r†   Úcursorr   r!   r@   r€   Zobs©Zasserterr‡   r   r   Úcursor_execute®  s"    ÿþ   ÿÿz%assert_engine.<locals>.cursor_execute)r�   r   Zlistens_forÚremover„   )Úenginerˆ   r�   r   rŒ   r   Úassert_engine   s    


r�   ) ÚcollectionsÚ
contextlibr+   r*   r   r   r�   r   Zengine.defaultr   Zengine.utilr   Zschemar   Úobjectr	   r   r   r%   rV   r[   rh   rm   ru   rv   rx   ry   Ú
namedtupler   r�   Úcontextmanagerr�   r   r   r   r   Ú<module>   s<    .

þÿ	