o
    V\iB                     @  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
   }/var/www/www-root/data/www/176.119.141.140/sports-predictor/venv/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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  sv   |j d }| j|jks| jd ur(| j|jkr(d| _d| j| j|j|jf | _d S |j d d| _|j s9d| _d S 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                   @  sH   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  sh   | j dkr*t }d|_| jr(d |_ |_|_d|_d|_d|_	d|_
|js(J |S tj| j   S Nr&   T)r'   r   supports_default_metavaluer(   insert_returningupdate_returningdelete_returninguse_insertmanyvaluessupports_multivalues_insertupdate_returning_multifromdelete_returning_multifrom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r(|jj||d n|jj|||jj|jj	|d t
ddt }|j}|sP jd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.Nschema_translate_map)r'   r?   )	cache_keyr'   column_keysfor_executemanyr?   r*   r+   extracted_parametersc                   s   g | ]	} j |d qS )rC   )construct_params).0mcompiledrD   r
   r   
<listcomp>   s    z3CompiledSQL._received_statement.<locals>.<listcomp>)contextr>   execution_options
isinstanceclauseelementr   compilerI   rA   rB   r,   r-   strr    rE   )	r   r   rK   compare_dialectr@   map__received_statementr    _received_parametersr
   rH   r   rS   m   s@   

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)rK   rS   _all_paramsr0   listdictr!   	enumerater   r   _failure_message)r   r   rK   rS   rT   r   
equivalent
all_paramsall_receivedparamidxreceived	param_keyr
   r
   r   r      sH   
	

zCompiledSQL.process_statementc                 C  s:   | j rt| j r|  |}n| j }t|ts|g}|S d S r	   )r   callablerM   rW   )r   rK   r   r
   r
   r   rV      s   

zCompiledSQL._all_paramsc                 C  "   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   expected_paramsr
   r
   r   rZ         zCompiledSQL._failure_messager1   )
r   r   r   r   r0   r>   rS   r   rV   rZ   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,   rO   regex
orig_regexr   r'   r(   )r   rm   r   r'   r(   r
   r
   r   r      s   

zRegexSQL.__init__c                 C  rc   )Nz{Testing for compiled statement ~%r partial params %s, received %%(received_statement)r with params %%(received_parameters)rre   rf   )rn   rg   rh   ri   r
   r
   r   rZ      rk   zRegexSQL._failure_messagec                 C  s   t | j|S r	   )boolrm   match)r   r   r/   r
   r
   r   r0        zRegexSQL._compare_sql)Nr&   F)r   r   r   r   rZ   r0   r
   r
   r
   r   rl      s
    

rl   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	   )rK   r'   r   r
   r
   r   r>     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                   sH   t  |\}}|jD ]}| |jj|r nqtd| ||jjfS )NzICan't locate compiled statement %r in list of statements actually invoked)superrS   r   ru   rK   r   AssertionErrorcompiled_parameters)r   r   rt   received_paramsrs   	__class__r
   r   rS     s   
zDialectSQL._received_statementc                   s   |j }tdd| j}|dd}|dkrtdd|}n0d }|dkr&d	}n |d
kr-d}n|drFtd |dkr=dnd fdd}td||}|dd}|S )Nr*   r+   z::z!!pyformatz	:([\w_]+)z%(\1)sqmark?formatz%snumeric   numeric_dollar$:c                   s    t   S r	   )next)rG   counternum_identifierr
   r   repl7  rq   z4DialectSQL._dialect_adjusted_statement.<locals>.repl)
paramstyler,   r-   r   rg   
startswith	itertoolscount)r   r'   r   r"   r   r
   r   r   _dialect_adjusted_statement"  s"   

z&DialectSQL._dialect_adjusted_statementc                 C  s   |  |jj}||kS r	   )r   rK   r'   r.   r
   r
   r   r0   A  s   zDialectSQL._compare_sqlc                 C  s*   d|  |jjddt|ddf S rd   )r   rK   r'   rg   rh   ri   r
   r
   r   rZ   G  s   zDialectSQL._failure_message)
r   r   r   r>   ru   rS   r   r0   rZ   __classcell__r
   r
   rz   r   rr     s    rr   c                   @  $   e Zd Zdd Zdd Zdd ZdS )CountStatementsc                 C  s   || _ d| _d S Nr   r   _statement_count)r   r   r
   r
   r   r   V  s   
zCountStatements.__init__c                 C  s   |  j d7  _ d S )Nr   )r   r   r
   r
   r   r   Z  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 %dr   r   r
   r
   r   r   ]  s   z"CountStatements.no_more_statementsN)r   r   r   r   r   r   r
   r
   r
   r   r   U  s    r   c                   @     e Zd Zdd Zdd ZdS )AllOfc                 G     t || _d S r	   )setrulesr   r   r
   r
   r   r   f     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   )rW   r   r   r   r   discardr   r   ruler
   r
   r   r   i  s   
zAllOf.process_statementNr$   r
   r
   r
   r   r   e  s    r   c                      s,   e Zd Zdd Zdd Z fddZ  ZS )EachOfc                 G  r   r	   )rW   r   r   r
   r
   r   r   {  r   zEachOf.__init__c                 C  sp   | j s	d| _d| _| j r.| j d }|| |jr | j d n|jr'|j| _|jr+n| j s| j s6d| _d S d S )NTFr   )r   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   d S d S r   )r   r   r   rv   r   rz   r
   r   r     s
   zEachOf.no_more_statements)r   r   r   r   r   r   r   r
   r
   rz   r   r   z  s    r   c                      s   e Zd Z fddZ  ZS )Conditionalc                   s$   |r
t  j|  d S t  j|  d S r	   )rv   r   )r   	conditionr   
else_rulesrz   r
   r   r     s   zConditional.__init__)r   r   r   r   r   r
   r
   rz   r   r     s    r   c                   @  s   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   )r   r   r   rW   r   r   r
   r
   r   r     s   

zOr.process_statementN)r   r   r   r   r
   r
   r
   r   r     s    r   c                   @  r   )SQLExecuteObservedc                 C  s6   || _ || _|r|| _n
|r|g| _ng | _g | _d S r	   )rK   rN   r    r   )r   rK   rN   multiparamsr   r
   r
   r   r     s   

zSQLExecuteObserved.__init__c                 C  s
   t | jS r	   )rP   r   r   r
   r
   r   __repr__     
zSQLExecuteObserved.__repr__N)r   r   r   r   r   r
   r
   r
   r   r     s    r   c                   @  r   )SQLCursorExecuteObservedNr   r
   r
   r
   r   r     s    r   )r   r    rK   executemanyc                   @  r   )SQLAsserterc                 C  s
   g | _ d S r	   )accumulatedr   r
   r
   r   r     r   zSQLAsserter.__init__c                 C  s   | j | _| ` d S r	   )r   _finalr   r
   r
   r   _close  s   zSQLAsserter._closec                 G  sl   t | }t| j}|r#|d}|| |jrn
|jr!J |j|s|r+J d| |js4|  d S d S )Nr   Fz$Additional SQL statements remain:
%s)r   rW   r   r!   r   r   r   r   )r   r   r   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|    d S t| d| t| d|    w )Nbefore_executec                   s   d| _ |||f d d < d S r#   )_WORKAROUND_ISSUE_13018)connrN   r   r   rL   )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 )Nr   r   r   )r   rK   r   appendr   r   )r   cursorr   r    rK   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_engine  s   


r   )
__future__r   collections
contextlibr   r,   r+   r   r   r   engine.defaultr   schemar   r   r   r   r%   rl   rr   r   r   r   r   r   r   
namedtupler   r   contextmanagerr   r
   r
   r
   r   <module>   s>   	 (N
	