a
    [gA                     @  sT  d dl m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 G dd	 d	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ZG d d! d!ed!g d"ZG d#d$ d$Zejd%d& ZdS )'    )annotationsN   )event)url)DefaultDialect)BaseDDLElementc                   @  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
   j/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/sqlalchemy/testing/assertsql.pyprocess_statement   s    zAssertRule.process_statementc                 C  s   dsJ dd S )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                   @  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  sp   |j d }| j|jks,| jd urN| j|jkrNd| _d| j| j|j|jf | _n|j d d| _|j sld| _d S )Nr   Tz5Testing for exact SQL %s parameters %s received %s %s)
statementsr   r   
parametersr   r   popr   )r   r   stmtr
   r
   r   r   0   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defaultTc                 C  s   || _ || _|| _|| _d S r	   )r   r   dialectenable_returning)r   r   r   r%   r&   r
   r
   r   r   G   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_sqlO   s    zCompiledSQL._compare_sqlc                 C  sl   | j dkrTt }d|_| jrPd |_ |_|_d|_d|_d|_	d|_
|jsPJ |S tj| j   S d S )Nr$   T)r%   r   Zsupports_default_metavaluer&   Zinsert_returningZupdate_returningZdelete_returningZuse_insertmanyvaluesZsupports_multivalues_insertZupdate_returning_multifromZdelete_returning_multifromZinsert_executemany_returningr   URLcreateget_dialect)r   r   r%   r
   r
   r   _compile_dialectS   s    

zCompiledSQL._compile_dialectc           	        s   |j }| |}d}dd|jv 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%   r3   )	cache_keyr%   column_keysfor_executemanyr3   r(   r)   extracted_parametersc                   s   g | ]} j |d qS )r7   )construct_params).0mcompiledr8   r
   r   
<listcomp>   s   z3CompiledSQL._received_statement.<locals>.<listcomp>)contextr2   execution_options
isinstanceclauseelementr   compiler=   r5   r6   r*   r+   strr   r9   )	r   r   r?   Zcompare_dialectr4   Zmap__received_statementr   _received_parametersr
   r<   r   rE   m   s>    

zCompiledSQL._received_statementc                 C  s   |j }| |\}}| |}| ||}|r|d urt|}t|}|r|rt|d}	tt|D ]8\}
}|	D ] }||vs|| |	| krt qhqt||
=  qFqhd}qqF|s|rd}|rd| _d | _	n| 
||||d | _	d S )Nr   FT)r-   Zreceived_parameters)r?   rE   _all_paramsr.   listdictr    	enumerater   r   _failure_message)r   r   r?   rE   rF   r   Z
equivalent
all_paramsZall_receivedparamidxZreceivedZ	param_keyr
   r
   r   r      sF    
zCompiledSQL.process_statementc                 C  s>   | j r6t| j r|  |}n| j }t|ts2|g}|S d S d S r	   )r   callablerA   rH   )r   r?   r   r
   r
   r   rG      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   r   Zexpected_paramsr
   r
   r   rK      s    zCompiledSQL._failure_message)Nr$   T)
r   r   r   r   r.   r2   rE   r   rG   rK   r
   r
   r
   r   r#   F   s    
53r#   c                   @  s&   e Zd Zd
ddZdd Zdd	 ZdS )RegexSQLNr$   Fc                 C  s2   t |  t|| _|| _|| _|| _|| _d S r	   )	r   r   r*   rC   regex
orig_regexr   r%   r&   )r   rW   r   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   rK      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$   F)r   r   r   r   rK   r.   r
   r
   r
   r   rV      s    

rV   c                      sD   e Zd Zdd Zdd Z fddZdd Zd	d
 Zdd Z  Z	S )
DialectSQLc                 C  s   |j jS r	   )r?   r%   r   r
   r
   r   r2     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                   sF   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)superrE   r   r^   r   AssertionErrorr?   Zcompiled_parameters)r   r   r]   Zreceived_paramsr\   	__class__r
   r   rE     s    
zDialectSQL._received_statementc                   s   |j }tdd| j}|dd}|dkr:tdd|}n`d }|dkrLd	}n@|d
krZd}n2|drtd |dkrzdnd fdd}td||}|dd}|S )Nr(   r)   z::z!!Zpyformatz	:([\w_]+)z%(\1)sZqmark?formatz%snumeric   Znumeric_dollar$:c                   s    t   S r	   )next)r;   counterZnum_identifierr
   r   repl5  s    z4DialectSQL._dialect_adjusted_statement.<locals>.repl)
paramstyler*   r+   r   rS   
startswith	itertoolscount)r   r%   rm   r!   rl   r
   rj   r   _dialect_adjusted_statement   s"    

z&DialectSQL._dialect_adjusted_statementc                 C  s   |  |jj}||kS r	   )rq   r?   r%   r,   r
   r
   r   r.   ?  s    zDialectSQL._compare_sqlc                 C  s*   d|  |jjddt|ddf S rP   )rq   r?   r%   rS   rT   rU   r
   r
   r   rK   E  s    zDialectSQL._failure_message)
r   r   r   r2   r^   rE   rq   r.   rK   __classcell__r
   r
   ra   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   rp   _statement_count)r   rp   r
   r
   r   r   T  s    zCountStatements.__init__c                 C  s   |  j d7  _ d S )Nrf   )rv   r   r
   r
   r   r   X  s    z!CountStatements.process_statementc                 C  s(   | j | jkr$ds$J d| j | jf d S )NFz,desired statement count %d does not match %dru   r   r
   r
   r   r   [  s
    z"CountStatements.no_more_statementsN)r   r   r   r   r   r   r
   r
   r
   r   rs   S  s   rs   c                   @  s   e Zd Zdd Zdd ZdS )AllOfc                 G  s   t || _d S r	   )setrulesr   ry   r
   r
   r   r   d  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   )rH   ry   r   r   r   discardr   r   ruler
   r
   r   r   g  s    
zAllOf.process_statementNr"   r
   r
   r
   r   rw   c  s   rw   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	   )rH   ry   rz   r
   r
   r   r   y  s    zEachOf.__init__c                 C  sh   | j sd| _d| _| j rX| j d }|| |jr@| j d n|jrN|j| _|jrqXq| j sdd| _d S )NTFr   )ry   r   r   r   r    r   r}   r
   r
   r   r   |  s    

zEachOf.process_statementc                   s6   | j r"| j d js"| j d   n| j r2t   d S rt   )ry   r   r   r_   r   ra   r
   r   r     s    zEachOf.no_more_statements)r   r   r   r   r   r   rr   r
   r
   ra   r   r   x  s   r   c                      s   e Zd Z fddZ  ZS )Conditionalc                   s"   |rt  j|  nt  j|  d S r	   )r_   r   )r   	conditionry   Z
else_rulesra   r
   r   r     s    zConditional.__init__)r   r   r   r   rr   r
   r
   ra   r   r     s   r   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 r{   )ry   r   r   rH   r   r}   r
   r
   r   r     s    

zOr.process_statementN)r   r   r   r   r
   r
   r
   r   r     s   r   c                   @  s   e Zd Zdd Zdd ZdS )SQLExecuteObservedc                 C  s6   || _ || _|r|| _n|r&|g| _ng | _g | _d S r	   )r?   rB   r   r   )r   r?   rB   multiparamsr   r
   r
   r   r     s    
zSQLExecuteObserved.__init__c                 C  s
   t | jS r	   )rD   r   r   r
   r
   r   __repr__  s    zSQLExecuteObserved.__repr__N)r   r   r   r   r   r
   r
   r
   r   r     s   r   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J |jq|r`dsnJ d| n|jsn|  d S )Nr   Fz$Additional SQL statements remain:
%s)r   rH   r   r    r   r   r   r   )r   ry   r~   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                 #  s   t   g t| dfdd}t| d fdd}z. V  W t| d| t| d|    n&t| d| t| d|    0 d S )NZbefore_executec                   s   |||f d d < d S r	   r
   )connrB   r   r   r@   )origr
   r   connection_execute  s    z)assert_engine.<locals>.connection_executeZ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 )Nr   rf   r   )r   r?   r   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   )
__future__r   collections
contextlibro   r*   r)   r   r   r   Zengine.defaultr   Zschemar   r   r   r   r#   rV   r[   rs   rw   r   r   r   r   
namedtupler   r   contextmanagerr   r
   r
   r
   r   <module>
   s<    (L
	