o
    ‹åge.  ã                   @   s”   d dl 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ƒZdS )é    Né   )ÚMigrationContext)Úassert_raises)Úconfig)Úeq_)Úis_)Úis_false)Úis_not_)Úis_true)Úne_)ÚTestBasec                   @   s¼   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zejjdd „ ƒZejjd!d"„ ƒZd#d$„ Zd%d&„ Zd'd(„ ZdS ))ÚMigrationTransactionTestTNc                 C   s`   t j ¡  | _}| dd¡r%tj|j|d�| _t	 
¡  | j_| jj_| jS tj||d�| _| jS )NÚas_sqlF)ÚdialectÚopts)Ú
connectionr   )r   ÚdbÚconnectÚconnÚgetr   Ú	configurer   ÚcontextÚioÚStringIOÚoutput_bufferÚimpl)Úselfr   r   © r   úb/var/www/html/flaskapp/venv/lib/python3.10/site-packages/alembic/testing/suite/test_environment.pyÚ_fixture   s   ÿÿýÿz!MigrationTransactionTest._fixturec                 C   s   | j r
| j  ¡  d S d S )N)r   Úclose)r   r   r   r   Úteardown_method$   s   ÿz(MigrationTransactionTest.teardown_methodc                 C   sR   |   dddœ¡}t| j ¡ ƒ |jdd�}t| j ¡ ƒ | ¡  t| j ¡ ƒ d S ©NT©Útransaction_per_migrationÚtransactional_ddl©Ú_per_migration)r   r   r   Úin_transactionÚbegin_transactionr
   Úrollback©r   r   Úproxyr   r   r   Útest_proxy_transaction_rollback(   s   ÿz8MigrationTransactionTest.test_proxy_transaction_rollbackc                 C   sD   |   dddœ¡}|jdd�}t| j ¡ ƒ | ¡  t| j ¡ ƒ d S r"   ©r   r)   r
   r   r(   Úcommitr   r+   r   r   r   Útest_proxy_transaction_commit3   s   ÿz6MigrationTransactionTest.test_proxy_transaction_commitc                 C   s`   |   dddœ¡}|jdd�}t| j ¡ ƒ |� W d   ƒ n1 s"w   Y  t| j ¡ ƒ d S r"   )r   r)   r
   r   r(   r   r+   r   r   r   Ú,test_proxy_transaction_contextmanager_commit<   s   ÿÿzEMigrationTransactionTest.test_proxy_transaction_contextmanager_commitc                    sR   |   dddœ¡}|jdd�‰ t| j ¡ ƒ ‡ fdd„}tt|ƒ t| j ¡ ƒ d S )NTr#   r&   c                      s"   ˆ � t dƒ‚1 s
w   Y  d S )NÚhi)Ú	Exceptionr   ©r,   r   r   ÚgoM   s   ÿzSMigrationTransactionTest.test_proxy_transaction_contextmanager_rollback.<locals>.go)r   r)   r
   r   r(   r   r3   r   )r   r   r5   r   r4   r   Ú.test_proxy_transaction_contextmanager_rollbackF   s   ÿ
zGMigrationTransactionTest.test_proxy_transaction_contextmanager_rollbackc                 C   ó„   |   dddœ¡}|jdd�}t| j ¡ ƒ |� t| j ¡ ƒ | ¡  t| j ¡ ƒ W d   ƒ n1 s4w   Y  t| j ¡ ƒ d S r"   )r   r)   r
   r   r(   r*   r   r+   r   r   r   Ú7test_proxy_transaction_contextmanager_explicit_rollbackT   ó   ÿýzPMigrationTransactionTest.test_proxy_transaction_contextmanager_explicit_rollbackc                 C   r7   r"   r.   r+   r   r   r   Ú5test_proxy_transaction_contextmanager_explicit_commitb   r9   zNMigrationTransactionTest.test_proxy_transaction_contextmanager_explicit_commitc              	   C   s®   |   dddœ¡}t| j ¡ ƒ | ¡ �3 t| j ¡ ƒ |jdd�� t| j ¡ ƒ W d   ƒ n1 s3w   Y  t| j ¡ ƒ W d   ƒ n1 sIw   Y  t| j ¡ ƒ d S r"   ©r   r   r   r(   r)   r
   ©r   r   r   r   r   Ú0test_transaction_per_migration_transactional_ddlp   ó   ÿ
ÿûzIMigrationTransactionTest.test_transaction_per_migration_transactional_ddlc              	   C   s®   |   dddœ¡}t| j ¡ ƒ | ¡ �3 t| j ¡ ƒ |jdd�� t| j ¡ ƒ W d   ƒ n1 s3w   Y  t| j ¡ ƒ W d   ƒ n1 sIw   Y  t| j ¡ ƒ d S )NTFr#   r&   r;   r<   r   r   r   Ú4test_transaction_per_migration_non_transactional_ddl   r>   zMMigrationTransactionTest.test_transaction_per_migration_non_transactional_ddlc              	   C   s¬   |   ddi¡}t| j ¡ ƒ | ¡ �3 t| j ¡ ƒ |jdd�� t| j ¡ ƒ W d   ƒ n1 s2w   Y  t| j ¡ ƒ W d   ƒ n1 sHw   Y  t| j ¡ ƒ d S )Nr%   Tr&   r;   r<   r   r   r   Ú*test_transaction_per_all_transactional_ddlŽ   ó   
ÿûzCMigrationTransactionTest.test_transaction_per_all_transactional_ddlc              	   C   s¬   |   ddi¡}t| j ¡ ƒ | ¡ �3 t| j ¡ ƒ |jdd�� t| j ¡ ƒ W d   ƒ n1 s2w   Y  t| j ¡ ƒ W d   ƒ n1 sHw   Y  t| j ¡ ƒ d S )Nr%   FTr&   r;   r<   r   r   r   Ú.test_transaction_per_all_non_transactional_ddl›   rA   zGMigrationTransactionTest.test_transaction_per_all_non_transactional_ddlc              	   C   sÌ   |   ddi¡}| d¡ | ¡ �- | d¡ |jdd�� | d¡ W d   ƒ n1 s,w   Y  | d¡ W d   ƒ n1 s@w   Y  | d¡ |jjr[|  dd	dddd
d¡ d S |  ddddd¡ d S )Nr   Tústep 1ústep 2r&   ústep 3ústep 4ústep 5ÚBEGINÚCOMMIT©r   Úexecuter)   r   r%   Ú_assert_impl_stepsr<   r   r   r   Ú test_transaction_per_all_sqlmode¨   s.   


ÿû
ù

ÿz9MigrationTransactionTest.test_transaction_per_all_sqlmodec              	   C   sÎ   |   dddœ¡}| d¡ | ¡ �- | d¡ |jdd�� | d¡ W d   ƒ n1 s-w   Y  | d¡ W d   ƒ n1 sAw   Y  | d¡ |jjr\|  ddd	dd
dd¡ d S |  ddddd¡ d S )NT)r   r$   rC   rD   r&   rE   rF   rG   rH   rI   rJ   r<   r   r   r   Ú&test_transaction_per_migration_sqlmodeÃ   s2   ÿ


ÿû
ù

ÿz?MigrationTransactionTest.test_transaction_per_migration_sqlmodec              
   C   s<  |   ddi¡}t| j ¡ ƒ | ¡ �{ t| j ¡ ƒ |jdd��W t| j ¡ ƒ | ¡ �* | jr8t|j	| jƒ nt
|j	| jƒ t| j ¡ ƒ t|j	jd dƒ W d   ƒ n1 sYw   Y  t|j	j dd ¡dƒ t| j ¡ ƒ W d   ƒ n1 szw   Y  t| j ¡ ƒ W d   ƒ n1 s�w   Y  t| j ¡ ƒ d S )Nr$   Tr&   Úisolation_levelÚ
AUTOCOMMIT)r   r   r   r(   r)   r
   Úautocommit_blockÚis_sqlalchemy_futurer   r   r	   r   Ú_execution_optionsr   r   r<   r   r   r   Útest_autocommit_blockà   s:   

ÿüõÿüåá z.MigrationTransactionTest.test_autocommit_blockc                 C   s¾   |   ddi¡}t| j ¡ ƒ | ¡ �1 t|j ¡ ƒ | jr%t|j| jƒ nt	|j| jƒ t| j ¡ ƒ t
|jjd dƒ W d   ƒ n1 sFw   Y  t|jj dd ¡dƒ t| j ¡ ƒ d S )Nr$   TrO   rP   )r   r   r   r(   rQ   r
   r   rR   r   r	   r   rS   r   r   r<   r   r   r   Ú$test_autocommit_block_no_transaction  s$   

þôþz=MigrationTransactionTest.test_autocommit_block_no_transactionc                 C   sÞ   |   ddddœ¡}| ¡ �K | d¡ |jdd��+ | d¡ | ¡ � | d¡ W d   ƒ n1 s3w   Y  | d¡ W d   ƒ n1 sGw   Y  | d¡ W d   ƒ n1 s[w   Y  |  dd	dd
dd	dd
d¡	 d S )NT©r$   r%   r   rC   r&   rD   rE   rF   rG   rH   rI   ©r   r)   rK   rQ   rL   r<   r   r   r   Ú/test_autocommit_block_transactional_ddl_sqlmode&  s8   ýÿ



ÿúö÷zHMigrationTransactionTest.test_autocommit_block_transactional_ddl_sqlmodec              
   C   sÖ   |   ddddœ¡}| ¡ �K | d¡ |jdd��+ | d¡ | ¡ � | d¡ W d   ƒ n1 s3w   Y  | d¡ W d   ƒ n1 sGw   Y  | d	¡ W d   ƒ n1 s[w   Y  |  ddddd	¡ d S )
NTFrV   rC   r&   rD   rE   rF   rG   rW   r<   r   r   r   Ú2test_autocommit_block_nontransactional_ddl_sqlmodeG  s(   ýÿ



ÿúö
ÿzKMigrationTransactionTest.test_autocommit_block_nontransactional_ddl_sqlmodec                 G   st   | j j ¡ }t ¡  | j j_}|D ]}|dkr| j j ¡  q|dkr)| j j ¡  q| j j |¡ qt	|| ¡ ƒ d S )NrH   rI   )
r   r   Úgetvaluer   r   r   Ú
emit_beginÚemit_commitÚ_execr   )r   ÚstepsÚto_checkÚbufÚstepr   r   r   rL   `  s   z+MigrationTransactionTest._assert_impl_steps)Ú__name__Ú
__module__Ú__qualname__Ú__backend__r   r   r!   r-   r0   r1   r6   r8   r:   r=   r?   r@   rB   rM   rN   r   ÚrequirementsÚautocommit_isolationrT   rU   rX   rY   rL   r   r   r   r   r      s0    	

'
!r   )r   Ú	migrationr   Útestingr   r   r   r   r   r	   r
   r   Útesting.fixturesr   r   r   r   r   r   Ú<module>   s    