o
    i5                     @   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primary_keyautoincrementdata2   r
   r	   r   r   clsmetadata r   `/var/www/edux/Edux_v2/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   d1r   r   )r   dbconnectbeginexecutetablesr   insertr   r   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   
DBAPIErrorstrorigr   py2k
isinstance)r-   r.   err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   $duplicate_key_raises_integrity_errorr0   r8   r   r   r   r    r      s    

r   c                   @   s,   e Zd ZdZdZdd Zdd Zdd Zd	S )
IsolationLevelTestT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pop	skip_test)r-   levelsrD   rE   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 )NrD   )r   r   r%   dialectdefault_isolation_levelr   rG   )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 )NrB   )rN   r   r%   r&   get_isolation_levelr   execution_optionsr   rO   reset_isolation_level
connection)r-   non_defaultr.   existingr   r   r     test_non_default_isolation_levelj   s   
"z3IsolationLevelTest.test_non_default_isolation_levelN)r9   r:   r;   r>   __requires__rN   rQ   rX   r   r   r   r    rA   S   s    rA   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   )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)   r\   r*   r,   r   scalarr   cr   delete)r-   r.   r[   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 )NrF   rB   TF)r   r%   r&   rS   ra   rO   rT   rU   )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&   ra   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 )NrF   rB   TrD   F)r   r%   r&   rS   ra   r   rG   rd   r   r   r    .test_turn_autocommit_off_via_default_iso_level   s   
z=AutocommitTest.test_turn_autocommit_off_via_default_iso_levelN)r9   r:   r;   r=   rY   r>   r?   r!   ra   rc   re   rf   r   r   r   r    rZ   {   s    
		rZ   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   r^   r   r_   r   wherer   )r-   mrh   r.   r   r   r    test_percent_sign_round_trip   s.   	"z)EscapingTest.test_percent_sign_round_tripN)r9   r:   r;   r   rm   r   r   r   r    rg      s    rg   N) r   r   r   r   r   r   r   schemar	   r
   r   r   r   r   r   utilr   
TablesTestr   TestBaserA   rZ   rg   r   r   r   r    <module>   s&   ?(: