o
    Šågà/  ã                   @  sÐ   d dl m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	 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 e ¡ G dd„ dƒƒZdaG dd„ dƒZdS )é    )ÚannotationsNé   )Ú
assertions)Úconfig)Úeq_)Údrop_all_tables_from_metadataé   )ÚColumn)Úfunc)ÚInteger)Úselect)ÚTable)ÚDeclarativeBase)ÚMappedAsDataclass)Úregistryc                   @  s  e Zd ZdZdZdZdZdZd$dd„Ze	 
¡ dd„ ƒZe	 
¡ dd	„ ƒZe	 
¡ d
d„ ƒZe	 
¡ dd„ ƒZe	 
¡ dd„ ƒZe	j
dd„ ƒZe	j
dd„ ƒZe	 
¡ dd„ ƒZe	 
¡ dd„ ƒZe	 
¡ dd„ ƒZe	 
¡ dd„ ƒZe	 
¡ dd„ ƒZe	j
dd„ d D ƒd!�d"d#„ ƒZdS )%ÚTestBase© NFc                 C  s   |sJ |ƒ‚d S ©Nr   )ÚselfÚvalÚmsgr   r   ú\/var/www/html/flaskapp/venv/lib/python3.10/site-packages/sqlalchemy/testing/fixtures/base.pyÚassert_0   s   zTestBase.assert_c                 c  s$   � t jj}d t j_d V  |t j_d S r   )r   ÚdbÚ_compiled_cache)r   Ú_cacher   r   r   Únocache3   s
   €zTestBase.nocachec                 c  sH   � t | dd ƒp	tj}| ¡ �}|V  W d   ƒ d S 1 sw   Y  d S ©NÚbind)Úgetattrr   r   Úconnect)r   ÚengÚconnr   r   r   Úconnection_no_trans:   s
   €
"ÿzTestBase.connection_no_transc                 c  sL   � t | dd ƒp	tj}| ¡ }| ¡ }|a|V  d a|jr | ¡  | ¡  d S r   )	r   r   r   r    ÚbeginÚ_connection_fixture_connectionÚ	is_activeÚrollbackÚclose)r   r!   r"   Útransr   r   r   Ú
connectionA   s   €zTestBase.connectionc                 #  sd   � g ‰ g ‰d‡ ‡fdd„	}|V  ˆD ]}z|  ¡  W q   Y qˆ D ]}z| ¡  W q"   Y q"d S )NFc                   s    ˆ   | ¡ |rˆ  | ¡ d S d S r   )Úappend)ÚresultÚconsume©Úto_closeÚ
to_consumer   r   Úgo[   s   
ÿz/TestBase.close_result_when_finished.<locals>.go)F)Úallr(   )r   r1   Úrr   r.   r   Úclose_result_when_finishedV   s    €üz#TestBase.close_result_when_finishedc              	   c  s:   � t |tt ¡  t d¡ddd¡id�}|V  | ¡  d S )Né2   ÚmysqlÚmariadbÚoracle)ÚmetadataÚtype_annotation_map)r   ÚstrÚsaÚStringÚwith_variantÚdispose)r   r9   Úregr   r   r   r   l   s   €
ÿÿþzTestBase.registryc                 #  s.   � |‰ G ‡ fdd„dt ƒ}|V  |j ¡  d S )Nc                      s.   e Zd Z” Zee ¡  e d¡ddd¡iZdS )z TestBase.decl_base.<locals>.Baser5   r6   r7   r8   N©	Ú__name__Ú
__module__Ú__qualname__r9   r;   r<   r=   r>   r:   r   ©Ú_mdr   r   ÚBase}   s    
ÿÿrG   )r   r   r?   ©r   r9   rG   r   rE   r   Ú	decl_basey   s
   €zTestBase.decl_basec                 #  s0   � |‰ G ‡ fdd„dt tƒ}|V  |j ¡  d S )Nc                      s,   e Zd Z” Zee ¡  e d¡dd¡iZdS )z#TestBase.dc_decl_base.<locals>.Baser5   r6   r7   NrA   r   rE   r   r   rG   Œ   s    
ÿÿrG   )r   r   r   r?   rH   r   rE   r   Údc_decl_baseˆ   s
   €zTestBase.dc_decl_basec                 c  s   � |V  d S r   r   )r   Úfuture_enginer*   r   r   r   Úfuture_connection—   s   €
zTestBase.future_connectionc                 c  s   � d V  d S r   r   )r   r   r   r   rK   ž   s   €
zTestBase.future_enginec                 #  s>   � ddl m‰  	 	 	 			d‡ fdd„	}|V  ˆ j d¡ d S )Nr   ©ÚenginesFc                   s(   |d u ri }d|d< ˆ j | ||||d�S )NÚfixtureÚscope)ÚurlÚoptionsÚasyncioÚtransfer_staticpoolÚ
share_pool©Útesting_engine)rQ   rR   ÚfuturerS   rT   rU   rM   r   r   Úgen_testing_engine¦   s   ûz3TestBase.testing_engine.<locals>.gen_testing_enginerO   )NNNFFF)Ú rN   Útesting_reaperÚ_drop_testing_engines)r   rY   r   rM   r   rW   ¢   s   €úzTestBase.testing_enginec                   s   ‡ fdd„}|S )Nc                    s   d| d< ˆ di | ¤ŽS )NTrS   r   r   )ÚkwrV   r   r   r1   ¿   s   z)TestBase.async_testing_engine.<locals>.gor   )r   rW   r1   r   rV   r   Úasync_testing_engine½   s   zTestBase.async_testing_enginec                 c  sŽ   � ddl m} | ¡ }||j_|V  |j`tr?t ¡ r?t ¡ }| ¡  t 	¡ � t
|tƒ W d  ƒ dS 1 s8w   Y  dS t
|tjƒ dS )z>Provide bound MetaData for a single test, dropping afterwards.r   )ÚschemaN)Úsqlr_   ÚMetaDataÚinstancer9   r%   Úin_transactionÚget_transactionr'   r$   r   r   r   )r   Úrequestr_   r9   r)   r   r   r   r9   Å   s$   €ÿþ
ÿ"ÿzTestBase.metadatac                 C  s*   g | ]}d D ]}dD ]}|||f‘q
qqS ))ÚnoneÚexecuter$   ©TFr   )Ú.0r'   Úsecond_operationÚbegin_nestedr   r   r   Ú
<listcomp>Þ   s    ýüý
ÿzTestBase.<listcomp>rh   )Úparamsc                   sP   |j \‰‰‰ td|tdtƒƒ‰t| dd ƒptj}ˆ |¡ ‡ ‡‡‡fdd„}|S )NÚtestÚdatar   c              
     s:  |   ¡ ��D}ˆ r°tjjjst d¡ |r|  ¡ }n| ¡ }|�q |r-|  ˆ ¡ ddi¡ n
| ˆ ¡ ddi¡ ˆr>| 	¡  n| 
¡  ˆdkr‰t tjjd¡�3 ˆdkrk|r`|  ˆ ¡ ddi¡ n| ˆ ¡ ddi¡ nˆdkrz|rv|  ¡  n| ¡  W d   ƒ n1 s„w   Y  W d   ƒ n1 s“w   Y  |r¥|  ˆ ¡ dd	i¡ n�| ˆ ¡ dd	i¡ n’|r½|  ˆ ¡ ddi¡ n
| ˆ ¡ ddi¡ |rÕˆrÐ|  	¡  n|  
¡  nˆrÜ| 	¡  n| 
¡  ˆdk�rBt tjjd¡�L ˆdk�r|�r|  ˆ ¡ ddi¡ n1| ˆ ¡ ddi¡ n&ˆdk�r!t|dƒ�r|  ¡  n|   ¡  nˆd
k�r2|�r.|  ¡  n| ¡  W d   ƒ n	1 �s=w   Y  W d   ƒ n	1 �sMw   Y  d}ˆ �r[|d7 }ˆ�sb|d7 }|�rvt|  tt ¡ ƒ ˆ¡¡|ƒ d S |  ¡ �}t| tt ¡ ƒ ˆ¡¡|ƒ W d   ƒ d S 1 �s–w   Y  d S )Nzsavepoints not enabledro   é
   rf   z‚Can't operate on closed transaction inside context manager.  Please complete the context manager before emitting further commands.rg   é   r$   é   rk   r   é   )r$   r   ÚrequirementsÚ
savepointsÚenabledÚ	skip_testrk   rg   Úinsertr'   Úcommitr   Úexpect_raises_messager<   ÚexcÚInvalidRequestErrorÚhasattrr   Úscalarr   r
   ÚcountÚselect_fromr    )ÚsubjectÚtrans_on_subjectÚexecute_on_subjectr)   Únested_transÚexpected_committedr"   ©rk   r'   rj   Útr   r   Úrun_testð   s¦   



þÿ
€í€ï)



þ





€ë€·`þ
þ$ÿz4TestBase.trans_ctx_manager_fixture.<locals>.run_test)Úparamr   r	   r   r   r   r   Úcreate)r   re   r9   r!   rˆ   r   r†   r   Útrans_ctx_manager_fixtureÝ   s   
wz"TestBase.trans_ctx_manager_fixturer   )rB   rC   rD   Ú__requires__Ú__unsupported_on__Ú__only_on__Ú__skip_if__Ú"__leave_connections_for_teardown__r   r   rO   r   r#   r*   r4   r   rI   rJ   rL   rK   rW   r^   r9   r‹   r   r   r   r   r      sJ    












þÿr   c                   @  s   e Zd ZdZdS )ÚFutureEngineMixinz alembic's suite still using thisN)rB   rC   rD   Ú__doc__r   r   r   r   r‘   m  s    r‘   )Ú
__future__r   Ú
sqlalchemyr<   rZ   r   r   r   Úutilr   r	   r
   r   r   r   Úormr   r   r   Úmark_base_test_classr   r%   r‘   r   r   r   r   Ú<module>   s(   	  P