U
    ÌZj�*  ã                   @   st  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 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G dd „ d ejƒZG d!d"„ d"ejeƒZ G d#d$„ d$ejƒZ!d%S )&é   )Útestingé   )Úassert_raises)Úconfig)Úengines)Úeq_)Úfixtures)Úne_)Úprovide_metadata)Úrequirements)Ú set_default_schema_on_connection)ÚColumn)ÚTableé   )Ú	bindparam)Úevent)Ú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 )ÚExceptionTestz¶Test 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_keyZautoincrementÚdataé2   ©r   r   r   r   ©ÚclsÚmetadata© r$   úh/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/sqlalchemy/testing/suite/test_dialect.pyÚdefine_tables%   s    üzExceptionTest.define_tablesc              	   C   sd   t j ¡ �P}| ¡ }| | jj ¡ dddœ¡ tt	j
|j| jj ¡ dddœƒ | ¡  W 5 Q R X d S )Nr   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 ¡ �Œ}z| ttdƒƒ¡ ds(t‚W nB tjk
rl } z"t	|ƒ}t	|j
ƒt	|ƒks\t‚W 5 d }~X Y nX tjr„t|t	ƒs’t‚nt|t	ƒs’t‚W 5 Q R X d S )Nu   mÃ©ilF)r   r(   r)   r+   r   r   ÚAssertionErrorr   Z
DBAPIErrorÚstrÚorigr   Zpy2kÚ
isinstance)r/   r0   ÚerrZerr_strr$   r$   r%   Útest_exception_with_non_asciiA   s    (z+ExceptionTest.test_exception_with_non_asciiN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úrun_deletesÚ__backend__Úclassmethodr&   r   Z$duplicate_key_raises_integrity_errorr2   r8   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¡}|r8| ¡ 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/   ÚlevelsrB   rC   Úsr$   r$   r%   Ú _get_non_default_isolation_level]   s    
z3IsolationLevelTest._get_non_default_isolation_levelc                 C   s   t tjjjt t¡d ƒ d S )NrB   )r   r   r(   ÚdialectZdefault_isolation_levelr   rE   )r/   r$   r$   r%   Útest_default_isolation_leveli   s    þz/IsolationLevelTest.test_default_isolation_levelc              	   C   sj   |   ¡ }tj ¡ �N}| ¡ }t||ƒ |j|d� t| ¡ |ƒ |j 	|j
¡ t| ¡ |ƒ W 5 Q R X d S )NrA   )rK   r   r(   r)   Úget_isolation_levelr	   Úexecution_optionsr   rL   Úreset_isolation_levelÚ
connection)r/   Znon_defaultr0   Úexistingr$   r$   r%   Ú test_non_default_isolation_levelo   s    
z3IsolationLevelTest.test_non_default_isolation_levelc              
   C   s¢   t  t¡}|d }t|ƒ dg¡D ]z}tj ¡ �>}|j|d� t| 	¡ |ƒ | 
¡ }| ¡  t| 	¡ |ƒ W 5 Q R X tj ¡ �}t| 	¡ |d ƒ W 5 Q R X q"d S )NrC   rD   rA   rB   )r   rE   r   rF   rG   r(   r)   rO   r   rN   r*   r.   )r/   rI   Z
all_levelsÚlevelr0   r1   r$   r$   r%   Útest_all_levels   s    
þz"IsolationLevelTest.test_all_levelsN)	r9   r:   r;   r>   Ú__requires__rK   rM   rS   rU   r$   r$   r$   r%   r@   X   s   r@   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 )ÚAutocommitIsolationTestr   )Ú
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%AutocommitIsolationTest.define_tablesc              	   C   sx   |  ¡ }| | jj ¡ dddœ¡ | ¡  t| t| jjj	j
ƒ¡|rHdnd ƒ |  ¡ � | | jj ¡ ¡ W 5 Q R X d S )Nr   z	some datar'   )r*   r+   r,   rY   r-   r.   r   Úscalarr   Úcr   Údelete)r/   r0   rX   r1   r$   r$   r%   Ú_test_conn_autocommits¨   s    
 ÿ
þ
z.AutocommitIsolationTest._test_conn_autocommitsc                 C   s:   |}|j dd�}|  |d¡ |j |j¡ |  |d¡ d S )NrD   rA   TF)rO   r]   rL   rP   rQ   )r/   Úconnection_no_transr0   Úc2r$   r$   r%   Útest_autocommit_on·   s
    z*AutocommitIsolationTest.test_autocommit_onc                 C   s   |}|   |d¡ d S )NF)r]   ©r/   r^   r0   r$   r$   r%   Útest_autocommit_offÀ   s    z+AutocommitIsolationTest.test_autocommit_offc                 C   sB   |}|j dd�}|  |d¡ |j t t¡d d� |  |d¡ d S )NrD   rA   TrB   F)rO   r]   r   rE   r   ra   r$   r$   r%   Ú.test_turn_autocommit_off_via_default_iso_levelÄ   s    ÿÿzFAutocommitIsolationTest.test_turn_autocommit_off_via_default_iso_levelN)r9   r:   r;   r=   rV   r>   r?   r&   r]   r`   rb   rc   r$   r$   r$   r%   rW   –   s   
		rW   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 ¡ �†}| | 	¡ t
dd�¡ | | 	¡ t
dd�¡ t| t|jjƒ |jjtdƒk¡¡dƒ t| t|jjƒ |jjtdƒk¡¡dƒ W 5 Q R X 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   rZ   r   r[   r   Úwherer   )r/   Úmre   r0   r$   r$   r%   Útest_percent_sign_round_tripÔ   s,    ÿÿú	ÿÿúz)EscapingTest.test_percent_sign_round_tripN)r9   r:   r;   r
   rj   r$   r$   r$   r%   rd   Ó   s   rd   c                   @   s4   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú WeCanSetDefaultSchemaWEventsTestT)Zdefault_schema_name_switchc              	   C   s8   t jjj}t ¡ }| ¡ � W 5 Q R X t|jj|ƒ d S ©N)r   r(   rL   Údefault_schema_namer   Útesting_enginer)   r   )r/   rm   Úengr$   r$   r%   Útest_control_caseù   s
    


z2WeCanSetDefaultSchemaWEventsTest.test_control_casec              	   C   sd   t jjj}t ¡ }t |d¡dd„ ƒ}| ¡ �}|j 	|¡}t
|t jƒ W 5 Q R X t
|jj|ƒ d S )Nr)   c                 S   s   t t| tjƒ d S rl   ©r   r   Útest_schema©Údbapi_connectionZconnection_recordr$   r$   r%   Ú
on_connect  s
      ÿzMWeCanSetDefaultSchemaWEventsTest.test_wont_work_wo_insert.<locals>.on_connect)r   r(   rL   rm   r   rn   r   Úlistens_forr)   Ú_get_default_schema_namer   rr   )r/   rm   ro   ru   r0   Úwhat_it_should_ber$   r$   r%   Útest_wont_work_wo_insert  s    



z9WeCanSetDefaultSchemaWEventsTest.test_wont_work_wo_insertc              	   C   s`   t  ¡ }tj|ddd�dd„ ƒ}| ¡ �}|j |¡}t|tj	ƒ W 5 Q R X t|jj
tj	ƒ d S )Nr)   T©r-   c                 S   s   t t| tjƒ d S rl   rq   rs   r$   r$   r%   ru     s
      ÿzRWeCanSetDefaultSchemaWEventsTest.test_schema_change_on_connect.<locals>.on_connect)r   rn   r   rv   r)   rL   rw   r   r   rr   rm   )r/   ro   ru   r0   rx   r$   r$   r%   Útest_schema_change_on_connect  s    

z>WeCanSetDefaultSchemaWEventsTest.test_schema_change_on_connectc              	   C   sˆ   t  ¡ }tj|ddd�dd„ ƒ}| ¡ �F}| ¡ }|j |¡}t|t	j
ƒ | ¡  |j |¡}t|t	j
ƒ W 5 Q R X t|jjt	j
ƒ d S )Nr)   Trz   c                 W   s   t t| tjƒ d S rl   rq   )rt   Úargr$   r$   r%   ru   %  s
      ÿz\WeCanSetDefaultSchemaWEventsTest.test_schema_change_works_w_transactions.<locals>.on_connect)r   rn   r   rv   r)   r*   rL   rw   r   r   rr   r.   rm   )r/   ro   ru   r0   r1   rx   r$   r$   r%   Ú'test_schema_change_works_w_transactions"  s    

zHWeCanSetDefaultSchemaWEventsTest.test_schema_change_works_w_transactionsN)	r9   r:   r;   r>   rV   rp   ry   r{   r}   r$   r$   r$   r%   rk   ô   s   	rk   c                   @   s   e Zd ZdS )Ú&FutureWeCanSetDefaultSchemaWEventsTestN)r9   r:   r;   r$   r$   r$   r%   r~   7  s   r~   c                   @   s>   e Zd ZdZejdddddddd	d
dddddd�dd„ ƒZdS )ÚDifficultParametersTestT)Zboring)zper cent)z
per % cent)z%percent)zpar(ens))zpercent%(ens)yah)zcol:ons)zmore :: %colons%)z	/slashes/)zmore/slashes)zq?marks)Z1param)z1col:onÚname)Úargnamesc              	   C   sÄ   t d|tdtdd�t|tdƒdd�ƒ}| |¡ | | ¡  dd|d	i¡¡ t|j	| ƒ 
|j	| d	k¡}t| |¡d	ƒ t|j	| ƒ 
|j	| t|ƒk¡}| ||d	i¡ ¡ }t|j| d	ƒ d S )
Nre   r   T)r   r   F)Znullabler   z	some name)r   r   r   r   rf   r+   r-   Úvaluesr   r[   rh   r   rZ   r   ÚfirstÚ_mapping)r/   r€   rQ   r#   re   ÚstmtÚrowr$   r$   r%   Útest_round_trip@  s    ü
"z'DifficultParametersTest.test_round_tripN)r9   r:   r;   r>   r   Úcombinationsr‡   r$   r$   r$   r%   r   =  s$   òr   N)"Ú r   r   r   r   r   r   r	   r
   r   Z	provisionr   Zschemar   r   r   r   r   r   r   r   r   Úutilr   Z
TablesTestr   ZTestBaser@   rW   rd   rk   ZFutureEngineMixinr~   r   r$   r$   r$   r%   Ú<module>   s:   ?>=!C
 ÿ