o
    [h                     @   s   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 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 d
dl mZ d
dl mZ d
dlmZ G dd dejZG dd dejZG dd dejZG dd dejZdS )   )assert_raises)config)eq_)fixtures)ne_)provide_metadata)requirements)Column)Table   )exc)Integer)literal_column)select)String)compatc                   @   s:   e Zd ZdZdZdZedd Zej	dd Z
dd	 Zd
S )ExceptionTestzTest basic exception wrapping.

    DBAPIs vary a lot in exception behavior so to actually anticipate
    specific exceptions from real round trips, we need to be conservative.

    eachTc              	   C   s(   t d|tdtdddtdtd d S )N	manual_pkidTFZprimary_keyZautoincrementdata2   r
   r	   r   r   clsmetadata r   /home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/venv/lib/python3.10/site-packages/sqlalchemy/testing/suite/test_dialect.pydefine_tables    s   zExceptionTest.define_tablesc                 C   sz   t j .}| }|| jj ddd tt	j
|j| jj ddd |  W d    d S 1 s6w   Y  d S )N   Zd1r   r   )r   dbconnectbeginexecutetablesr   insertr   r   ZIntegrityErrorrollback)selfconntransr   r   r   test_integrity_error)   s   

"z"ExceptionTest.test_integrity_errorc                 C   s   t j R}z|ttdg J  tjy4 } zt|}t|j	t|v s*J W Y d }~nd }~ww t
jr@t|ts?J nt|tsGJ W d    d S W d    d S 1 sZw   Y  d S )Nu   méil)r   r"   r#   r%   r   r   r   Z
DBAPIErrorstrorigr   Zpy2k
isinstance)r)   r*   errZerr_strr   r   r   test_exception_with_non_ascii<   s   ""z+ExceptionTest.test_exception_with_non_asciiN)__name__
__module____qualname____doc__run_deletes__backend__classmethodr   r   Z$duplicate_key_raises_integrity_errorr,   r1   r   r   r   r   r      s    

r   c                   @   s4   e Zd ZdZdZdd Zdd Zdd Zd	d
 ZdS )IsolationLevelTestTZisolation_levelc                 C   sF   t t}|d }|d }t|d|g}|r| S td d S )Ndefault	supported
AUTOCOMMITz(no non-default isolation level available)r   get_isolation_levelsr   set
differencepopZ	skip_test)r)   levelsr;   r<   sr   r   r    _get_non_default_isolation_levelX   s   
z3IsolationLevelTest._get_non_default_isolation_levelc                 C   s   t tjjjttd  d S )Nr;   )r   r   r"   dialectZdefault_isolation_levelr   r>   )r)   r   r   r   test_default_isolation_leveld   s   z/IsolationLevelTest.test_default_isolation_levelc                 C   s   |   }tj -}| }t|| |j|d t| | |j	|j
 t| | W d    d S 1 s9w   Y  d S )Nr:   )rD   r   r"   r#   get_isolation_levelr   execution_optionsr   rE   reset_isolation_level
connection)r)   Znon_defaultr*   existingr   r   r    test_non_default_isolation_levelj   s   
"z3IsolationLevelTest.test_non_default_isolation_levelc              	   C   s   t t}|d }t|dgD ]Q}tj $}|j|d t|	 | |
 }|  t|	 | W d    n1 s?w   Y  tj }t|	 |d  W d    n1 s]w   Y  qd S )Nr<   r=   r:   r;   )r   r>   r   r?   r@   r"   r#   rH   r   rG   r$   r(   )r)   rB   Z
all_levelslevelr*   r+   r   r   r   test_all_levelsz   s$   

z"IsolationLevelTest.test_all_levelsN)	r2   r3   r4   r7   __requires__rD   rF   rL   rN   r   r   r   r   r9   S   s    r9   c                   @   sD   e Zd ZdZdZdZedd Zdd Zdd	 Z	d
d Z
dd ZdS )AutocommitTestr   )
autocommitTc              	   C   s,   t d|tdtdddtdtddd d S )	N
some_tabler   TFr   r   r   )Ztest_needs_acidr   r   r   r   r   r      s   
zAutocommitTest.define_tablesc                 C   sf   |  }|| jj ddd |  t|t| jjj	j
g|r%dnd  || jj  d S )Nr    z	some datar!   )r$   r%   r&   rR   r'   r(   r   scalarr   cr   delete)r)   r*   rQ   r+   r   r   r   _test_conn_autocommits   s   
z%AutocommitTest._test_conn_autocommitsc                 C   s@   t j }|jdd}| |d |j|j | |d d S )Nr=   r:   TF)r   r"   r#   rH   rV   rE   rI   rJ   )r)   r*   c2r   r   r   test_autocommit_on   s
   
z!AutocommitTest.test_autocommit_onc                 C   s   t j }| |d d S )NF)r   r"   r#   rV   r)   r*   r   r   r   test_autocommit_off   s   
z"AutocommitTest.test_autocommit_offc                 C   sH   t j }|jdd | |d |jtt d d | |d d S )Nr=   r:   Tr;   F)r   r"   r#   rH   rV   r   r>   rY   r   r   r   .test_turn_autocommit_off_via_default_iso_level   s   
z=AutocommitTest.test_turn_autocommit_off_via_default_iso_levelN)r2   r3   r4   r6   rO   r7   r8   r   rV   rX   rZ   r[   r   r   r   r   rP      s    
		rP   c                   @   s   e Zd Zedd ZdS )EscapingTestc              	   C   s   | j }td|tdtd}|tj tj K}||	 t
dd ||	 t
dd t|t|jjg|jjtdkd t|t|jjg|jjtdkd W d	   d	S 1 sgw   Y  d	S )
z|test that the DBAPI accommodates for escaped / nonescaped
        percent signs in a way that matches the compiler

        tr   r   zsome % value)r   zsome %% other valuez'some % value'z'some %% other value'N)r   r
   r	   r   creater   r"   r$   r%   r'   dictr   rS   r   rT   r   wherer   )r)   mr]   r*   r   r   r   test_percent_sign_round_trip   s.   	"z)EscapingTest.test_percent_sign_round_tripN)r2   r3   r4   r   rb   r   r   r   r   r\      s    r\   N) r   r   r   r   r   r   r   Zschemar	   r
   r   r   r   r   r   utilr   Z
TablesTestr   ZTestBaser9   rP   r\   r   r   r   r   <module>   s&   ?>: