U
    ÌZjÌx  ã                   @   sè  d dl Z d dlZd dlZd dl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 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eƒƒZ da!e j"dd„ ƒZ#G dd„ deƒZ$G dd„ de ƒZ%G dd„ deƒZ&G d d!„ d!eƒZ'e(ƒ Z)d"d#„ Z*d$d%„ Z+d&d'„ Z,d(d)„ Z-G d*d+„ d+e ƒZ.G d,d-„ d-e%ej/ƒZ0G d.d/„ d/e0ƒZ1G d0d1„ d1e%ƒZ2G d2d3„ d3eƒZ3dS )4é    Né   )Ú
assertions)Úconfig©Úschema©Úeq_)Úne_)ÚBasicEntity)ÚComparableEntity)ÚComparableMixin)Úadict)Údrop_all_tables_from_metadataé   )Úevent)Úutil)Údeclarative_base)Úregistry)ÚDeclarativeMeta)Úsort_tables_and_constraints)Úvisitors)ÚClauseElementc                   @   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	 
¡ dd„ ƒZe	 
¡ dd„ ƒZe	 
¡ dd„ ƒZe	 
¡ dd„ ƒZe	j
dd„ ƒZe	 
¡ dd„ ƒZe	j
dd„ d D ƒd!�d"d#„ ƒZdS )%ÚTestBase© NFc                 C   s   |st |ƒ‚d S ©N)ÚAssertionError)ÚselfÚvalÚmsgr   r   ú^/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/sqlalchemy/testing/fixtures.pyÚassert_7   s    zTestBase.assert_c                 c   s"   t jj}d t j_d V  |t j_d S r   ©r   ÚdbZ_compiled_cache©r   Ú_cacher   r   r   Únocache:   s    zTestBase.nocachec              	   c   s0   t | dd ƒptj}| ¡ �}|V  W 5 Q R X d S ©NÚbind)Úgetattrr   r"   Úconnect)r   ÚengÚconnr   r   r   Úconnection_no_transA   s    
zTestBase.connection_no_transc                 c   sJ   t | dd ƒptj}| ¡ }| ¡ }|a|V  d a|jr>| ¡  | ¡  d S r&   )	r(   r   r"   r)   ÚbeginÚ_connection_fixture_connectionZ	is_activeÚrollbackÚclose)r   r*   r+   Útransr   r   r   Ú
connectionH   s    zTestBase.connectionc                 #   sj   g ‰ g ‰d‡ ‡fdd„	}|V  ˆD ]}z|  ¡  W q"   Y q"X q"ˆ D ]}z| ¡  W qF   Y qFX qFd S )NFc                    s   ˆ   | ¡ |rˆ  | ¡ d S r   )Úappend)ÚresultÚconsume©Úto_closeZ
to_consumer   r   Úgob   s    
z/TestBase.close_result_when_finished.<locals>.go)F)Úallr0   )r   r8   Úrr   r6   r   Úclose_result_when_finished]   s    z#TestBase.close_result_when_finishedc                 c   s   t |d�}|V  | ¡  d S ©N)Úmetadata)r   Údispose)r   r=   Úregr   r   r   r   s   s    
zTestBase.registryc                 C   s   |  ¡ S r   )Zgenerate_base)r   r   r   r   r   Ú	decl_basey   s    zTestBase.decl_basec                 c   s
   |V  d S r   r   )r   Úfuture_enginer2   r   r   r   Úfuture_connection}   s    zTestBase.future_connectionc              	   c   s0   t | dd ƒptj}t|ƒ� d V  W 5 Q R X d S r&   ©r(   r   r"   Ú_push_future_engine©r   r*   r   r   r   rA   „   s    
zTestBase.future_enginec                 #   s0   ddl m‰  d‡ fdd„	}|V  ˆ j d¡ d S )Nr   ©ÚenginesFc                    s(   |d kri }d|d< ˆ j | ||||d�S )NÚfixtureÚscope©ÚurlÚoptionsÚfutureÚasyncioZtransfer_staticpool©Útesting_enginerJ   rF   r   r   Úgen_testing_engineŽ   s    ûz3TestBase.testing_engine.<locals>.gen_testing_enginerH   )NNNFF)Ú rG   Ztesting_reaperZ_drop_testing_engines)r   rQ   r   rF   r   rP   Š   s         ûzTestBase.testing_enginec                    s   ‡ fdd„}|S )Nc                     s   d| d< ˆ f | ŽS )NTrN   r   )ÚkwrO   r   r   r8   ¦   s    z)TestBase.async_testing_engine.<locals>.gor   )r   rP   r8   r   rO   r   Úasync_testing_engine¤   s    zTestBase.async_testing_enginec                 C   s   t ƒ S r   )Úfixture_session©r   r   r   r   rU   ¬   s    zTestBase.fixture_sessionc              	   c   st   ddl m} | ¡ }||j_|V  |j`trdt ¡ rdt ¡ }| ¡  t 	¡ � t
|tƒ W 5 Q R X nt
|tjƒ dS )z>Provide bound MetaData for a single test, dropping afterwards.r   r   N)Úsqlr   ÚMetaDataÚinstancer=   r.   Zin_transactionZget_transactionr/   r-   r   r   r"   )r   Úrequestr   r=   r1   r   r   r   r=   °   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>r]   )Úparamsc                    s~   |j \‰‰‰ ddlm}m}m}m‰m‰ ddlm‰ |d||d|ƒƒ‰t	| dd ƒpVt
j}ˆ |¡ ‡ ‡‡‡‡‡‡fdd	„}|S )
Nr   )ÚTableÚColumnÚIntegerÚfuncÚselectr   r   ÚtestÚdatar'   c                    sÜ  |   ¡ ��P}ˆ �r@tjjjs&t d¡ |r4|  ¡ }n| ¡ }|�Æ |r\|  ˆ ¡ ddi¡ n| ˆ ¡ ddi¡ ˆr~| 	¡  n| 
¡  ˆdk�rt tjjd¡�\ ˆdkrÚ|rÄ|  ˆ ¡ ddi¡ qø| ˆ ¡ ddi¡ nˆdkrø|rð|  ¡  n| ¡  W 5 Q R X W 5 Q R X |�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�rVt tjjd¡�Ž ˆdk�r |�rê|  ˆ ¡ ddi¡ n| ˆ ¡ ddi¡ nLˆdk�r*t|dƒ�r |  ¡  n|   ¡  n"ˆd
k�rL|�rD|  ¡  n| ¡  W 5 Q R X W 5 Q R X d}ˆ �rr|d7 }ˆ�s€|d7 }|�r¦ˆ|  ˆˆ ¡ ƒ ˆ¡¡|ƒ n2|  ¡ �$}ˆ| ˆˆ ¡ ƒ ˆ¡¡|ƒ W 5 Q R X d S )Nzsavepoints not enabledri   é
   r[   z‚Can't operate on closed transaction inside context manager.  Please complete the context manager before emitting further commands.r\   é   r-   é   r`   r   r   )r-   r   ÚrequirementsÚ
savepointsÚenabledZ	skip_testr`   r\   Úinsertr/   Úcommitr   Zexpect_raises_messageÚsaÚexcZInvalidRequestErrorÚhasattrZscalarÚcountÚselect_fromr)   )ÚsubjectZtrans_on_subjectZexecute_on_subjectr1   Znested_transZexpected_committedr+   ©r`   r   rf   r/   r_   rg   Útr   r   Úrun_testÞ   s–    




þ ÿ




þ





þ
þz4TestBase.trans_ctx_manager_fixture.<locals>.run_test)ÚparamÚ
sqlalchemyrc   rd   re   rf   rg   rR   r   r(   r   r"   Úcreate)r   rZ   r=   rc   rd   re   r*   rz   r   rx   r   Útrans_ctx_manager_fixtureÈ   s    
xz"TestBase.trans_ctx_manager_fixture)N)Ú__name__Ú
__module__Ú__qualname__Ú__requires__Z__unsupported_on__Z__only_on__Z__skip_if__Z"__leave_connections_for_teardown__r    r   rH   r%   r,   r2   r;   r   r@   rB   rA   rP   rT   rU   r=   r~   r   r   r   r   r   "   sH   












þÿr   c                 c   sF   ddl m} ddlm} | | ¡}tj ||¡ |V  tj |¡ d S )Nr   )ÚEnginer   ©Útesting)	Zfuture.enginerƒ   r|   r…   Z_future_facader   Ú_currentZpush_engineÚpop)Zenginerƒ   r…   Zfacader   r   r   rD   \  s    
rD   c                   @   s"   e Zd Zejddd�dd„ ƒZdS )ÚFutureEngineMixinTÚclass©ZautouserI   c              	   c   s0   t | dd ƒptj}t|ƒ� d V  W 5 Q R X d S r&   rC   rE   r   r   r   rD   k  s    
z%FutureEngineMixin._push_future_engineN)r   r€   r�   r   rH   rD   r   r   r   r   rˆ   j  s   rˆ   c                   @   s  e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZejddd�dd„ ƒZejdd	d�d
d„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZdd„ Zdd„ Zdd„ Zedd„ ƒZedd„ ƒZedd„ ƒZed d!„ ƒZed"d#„ ƒZed$d%„ ƒZ d&d'„ Z!d(d)„ Z"ed*d+„ ƒZ#dS ),Ú
TablesTestÚonceÚeachNTr‰   rŠ   c                 c   s0   | j }| ¡  | ¡  | ¡  d V  | ¡  d S r   )Ú	__class__Ú_init_classÚ_setup_once_tablesÚ_setup_once_insertsÚ_teardown_once_metadata_bind©r   Úclsr   r   r   Ú_setup_tables_test_classŒ  s    z#TablesTest._setup_tables_test_classÚfunctionc                 c   s"   |   ¡  |  ¡  d V  |  ¡  d S r   )Ú_setup_each_tablesÚ_setup_each_insertsÚ_teardown_each_tablesrV   r   r   r   Ú_setup_tables_test_instance™  s    z&TablesTest._setup_tables_test_instancec                 C   s   | j S r   )Ú_tables_metadatarV   r   r   r   Útables_test_metadata¢  s    zTablesTest.tables_test_metadatac                 C   sX   | j dkr(| jdkrd| _| jdks(t‚tƒ | _tƒ | _tƒ | _|  ¡ | _	t
 ¡ | _d S )Nr�   rŒ   )r�   N)Úrun_define_tablesÚrun_create_tablesÚrun_insertsr   r   ÚotherÚtablesÚ	sequencesÚ
setup_bindr'   rr   rX   r›   ©r”   r   r   r   r�   ¦  s    


zTablesTest._init_classc              	   C   s6   | j dkr2|  ¡  | j ¡ �}|  |¡ W 5 Q R X d S ©NrŒ   ©rŸ   Ú_load_fixturesr'   r-   Úinsert_data)r”   r+   r   r   r   r‘   ´  s    
zTablesTest._setup_once_insertsc                 C   sR   | j dkrN|  | j¡ | jdkr.| j | j¡ | j | jj¡ | j | jj	¡ d S r¥   ©
r�   Údefine_tablesr›   rž   Ú
create_allr'   r¡   Úupdater¢   Z
_sequencesr¤   r   r   r   r�   »  s    

zTablesTest._setup_once_tablesc                 C   sl   | j dkrP|  | j¡ | jdkr.| j | j¡ | j | jj¡ | j | jj	¡ n| jdkrh| j | j¡ d S ©Nr�   r©   rV   r   r   r   r—   Ä  s    


zTablesTest._setup_each_tablesc              	   C   s6   | j dkr2|  ¡  | j ¡ �}|  |¡ W 5 Q R X d S r­   r¦   )r   r+   r   r   r   r˜   Î  s    
zTablesTest._setup_each_insertsc                 C   sF  | j dkr8| j ¡  | jdkr,t| j| jƒ | j ¡  n| jdkrPt| j| jƒ ttj	ddƒ}|rh|j
}| j dk�rB| jdk�rB| jdk�rB| j ¡ �¦}tdd„ t| jj ¡ ƒD ƒƒD ]€}z:|rä| ¡ � | | ¡ ¡ W 5 Q R X n| | ¡ ¡ W q¶ tjjk
�r4 } ztjd||f tjd� W 5 d }~X Y q¶X q¶W 5 Q R X d S )Nr�   rn   Fc                 S   s   g | ]\}}|d k	r|‘qS r   r   )r^   ry   Úfksr   r   r   ra   é  s   üz4TablesTest._teardown_each_tables.<locals>.<listcomp>zError emptying table %s: %r)Úfile)r�   r¡   Úclearrž   r   r›   r'   r(   r   rm   ro   Úrun_deletesr-   Úreversedr   Úvaluesr`   r\   Údeleterr   rs   Z
DBAPIErrorr   Úprint_ÚsysÚstderr)r   rn   r+   ÚtableÚexr   r   r   r™   Ô  sD    



ÿþý
ÿþÿ	

þz TablesTest._teardown_each_tablesc                 C   sF   | j rt| j| jƒ | jdkr*|  | j¡ d | j_| jd k	rBd | _d S r¥   )rž   r   r›   r'   Úrun_dispose_bindÚdispose_bindÚrun_setup_bindr¤   r   r   r   r’   ý  s    

z'TablesTest._teardown_once_metadata_bindc                 C   s   t jS r   )r   r"   r¤   r   r   r   r£   
  s    zTablesTest.setup_bindc                 C   s*   t |dƒr| ¡  nt |dƒr&| ¡  d S )Nr>   r0   )rt   r>   r0   )r”   r'   r   r   r   r»     s    


zTablesTest.dispose_bindc                 C   s   d S r   r   )r”   r=   r   r   r   rª     s    zTablesTest.define_tablesc                 C   s   i S r   r   r¤   r   r   r   Úfixtures  s    zTablesTest.fixturesc                 C   s   d S r   r   )r”   r2   r   r   r   r¨     s    zTablesTest.insert_datac                 C   s   |   | j||¡ d S r   )Zassert_sql_countr'   )r   ru   Úfnr   r   r   Ú
sql_count_!  s    zTablesTest.sql_count_c                 C   s   |   | j||¡ d S r   )Z
assert_sqlr'   )r   Z	callable_Z
statementsr   r   r   Úsql_eq_$  s    zTablesTest.sql_eq_c              
      sÌ   i i  ‰ }|   ¡  ¡ D ]H\‰}t|ƒdk r,qtˆtjƒrB| jˆ ‰|d ˆ ˆ< |dd… |ˆ< qt| jj 	¡ ƒD ]V\‰}ˆdkr‚qpˆˆ krŒqp| j
 ¡ �*}| ˆ ¡ ‡ ‡fdd„|ˆ D ƒ¡ W 5 Q R X qpdS )z4Insert rows as represented by the fixtures() method.r   r   r   Nc                    s   g | ]}t tˆ ˆ |ƒƒ‘qS r   )ÚdictÚzip)r^   Zcolumn_values©Úheadersr¸   r   r   ra   <  s   ÿz-TablesTest._load_fixtures.<locals>.<listcomp>)r½   ÚitemsÚlenÚ
isinstancer   Ústring_typesr¡   r   r›   r³   r'   r-   r\   rp   )r”   Úrowsri   r®   r+   r   rÃ   r   r§   '  s,    


ÿþþzTablesTest._load_fixtures)$r   r€   r�   r¼   r�   rž   rŸ   r±   rº   r'   r›   r¡   r    r¢   r   rH   r•   rš   Úpropertyrœ   Úclassmethodr�   r‘   r�   r—   r˜   r™   r’   r£   r»   rª   r½   r¨   r¿   rÀ   r§   r   r   r   r   r‹   r  sT   






)





r‹   c                   @   s"   e Zd Zejddd�dd„ ƒZdS )ÚNoCacheTr–   rŠ   c                 c   s"   t jj}d t j_d V  |t j_d S r   r!   r#   r   r   r   Ú_disable_cacheD  s    zNoCache._disable_cacheN)r   r€   r�   r   rH   rÍ   r   r   r   r   rÌ   C  s   rÌ   c                   @   s8   e Zd Zejdd„ ƒZdd„ Zejddd�dd	„ ƒZ	d
S )ÚRemovesEventsc                 C   s   t ƒ S r   )ÚsetrV   r   r   r   Ú
_event_fnsM  s    zRemovesEvents._event_fnsc                 K   s(   | j  |||f¡ tj|||f|Ž d S r   )rÐ   Úaddr   Úlisten)r   ÚtargetÚnamer¾   rS   r   r   r   Úevent_listenQ  s    zRemovesEvents.event_listenTr–   rŠ   c                 c   s    d V  | j D ]}tj|Ž  qd S r   )rÐ   r   Úremove)r   Úkeyr   r   r   Ú_remove_eventsU  s    
zRemovesEvents._remove_eventsN)
r   r€   r�   r   Zmemoized_propertyrÐ   rÕ   r   rH   rØ   r   r   r   r   rÎ   L  s
   
rÎ   c                  K   sD   |   dd¡ |   dd¡ |  dtj¡}tjj|f| Ž}t |¡ |S )NZ	autoflushTZexpire_on_commitr'   )	Ú
setdefaultr‡   r   r"   rr   ÚormÚSessionÚ_fixture_sessionsrÑ   )rS   r'   Úsessr   r   r   rU   _  s    
rU   c                   C   s   t jj ¡  t ¡  d S r   )rr   rÚ   ÚsessionÚclose_all_sessionsrÜ   r°   r   r   r   r   Ú_close_all_sessionsj  s    rà   c                 C   s   t ƒ  tj ¡  d S r   )rà   rr   rÚ   Úclear_mappersr¤   r   r   r   Ústop_test_class_inside_fixturesp  s    râ   c                   C   s   t r
tƒ  d S r   )rÜ   rà   r   r   r   r   Ú
after_testu  s    rã   c                   @   s   e Zd ZdS )ÚORMTestN©r   r€   r�   r   r   r   r   rä   z  s   rä   c                   @   s¸   e Zd ZdZdZdZejddd�dd„ ƒZejdd	d�d
d„ ƒZ	e
dd„ ƒZe
dd„ ƒZe
dd„ ƒZdd„ Zdd„ Ze
dd„ ƒZe
dd„ ƒZdd„ Zdd„ Ze
dd„ ƒZe
d d!„ ƒZdS )"Ú
MappedTestrŒ   r�   NTr‰   rŠ   c                 c   sZ   | j }| ¡  |jd kr tƒ |_| ¡  | ¡  | ¡  | ¡  d V  | ¡  | 	¡  d S r   )
rŽ   r�   Úclassesr   r�   Ú_setup_once_classesÚ_setup_once_mappersr‘   Ú_teardown_once_classr’   r“   r   r   r   r•   ‡  s    
z#MappedTest._setup_tables_test_classr–   c                 c   sN   |   ¡  |  ¡  |  ¡  |  ¡  d V  tjj ¡  |  ¡  |  	¡  |  
¡  d S r   )r—   Ú_setup_each_classesÚ_setup_each_mappersr˜   rr   rÚ   rÞ   rß   Ú_teardown_each_mappersÚ_teardown_each_classesr™   rV   r   r   r   rš   ™  s    z&MappedTest._setup_tables_test_instancec                 C   s   | j  ¡  d S r   )rç   r°   r¤   r   r   r   rê   §  s    zMappedTest._teardown_once_classc                 C   s   | j dkr|  | j¡ d S r¥   ©Úrun_setup_classesÚ_with_register_classesÚsetup_classesr¤   r   r   r   rè   «  s    
zMappedTest._setup_once_classesc                 C   s*   | j dkr&|  ¡ \| _| _|  | j¡ d S r¥   )Úrun_setup_mappersÚ_generate_registryÚmapper_registryÚmapperrñ   Úsetup_mappersr¤   r   r   r   ré   °  s    
zMappedTest._setup_once_mappersc                 C   s8   | j dkr|  ¡ \| j_| j_| j dkr4|  | j¡ d S )NrŒ   r�   )ró   rô   rŽ   rõ   rö   rñ   r÷   rV   r   r   r   rì   ¶  s    
ý
zMappedTest._setup_each_mappersc                 C   s   | j dkr|  | j¡ d S r­   rï   rV   r   r   r   rë   À  s    
zMappedTest._setup_each_classesc                 C   s   t | jd�}||jfS r<   )r   r›   Zmap_imperatively)r”   Údeclr   r   r   rô   Ä  s    zMappedTest._generate_registryc                    sx   | j ‰ ˆ dk	st‚G ‡ fdd„dtƒ}G dd„ dt |t¡ƒ}G dd„ dt|ƒ}G dd	„ d	t|ƒ}|| _|| _	|ƒ  dS )
z¥Run a setup method, framing the operation with a Base class
        that will catch new subclasses to be established within
        the "classes" registry.

        Nc                       s   e Zd Z‡ fdd„ZdS )z6MappedTest._with_register_classes.<locals>.FindFixturec                    s   | ˆ |< t  | |||¡ d S r   )ÚtypeÚ__init__©r”   Ú	classnameÚbasesZdict_©Zcls_registryr   r   rú   Õ  s    z?MappedTest._with_register_classes.<locals>.FindFixture.__init__N©r   r€   r�   rú   r   rþ   r   r   ÚFindFixtureÔ  s   r   c                   @   s   e Zd ZdS )z0MappedTest._with_register_classes.<locals>._BaseNrå   r   r   r   r   Ú_BaseÙ  s   r  c                   @   s   e Zd ZdS )z0MappedTest._with_register_classes.<locals>.BasicNrå   r   r   r   r   ÚBasicÜ  s   r  c                   @   s   e Zd ZdS )z5MappedTest._with_register_classes.<locals>.ComparableNrå   r   r   r   r   Ú
Comparableß  s   r  )
rç   r   rù   r   Úwith_metaclassÚobjectr
   r   r  r  )r”   r¾   r   r  r  r  r   rþ   r   rñ   É  s    z!MappedTest._with_register_classesc                 C   s   | j dkrtj ¡  d S r¥   )ró   rr   rÚ   rá   rV   r   r   r   rí   æ  s    
z!MappedTest._teardown_each_mappersc                 C   s   | j dkr| j ¡  d S r¥   )rð   rç   r°   rV   r   r   r   rî   í  s    
z!MappedTest._teardown_each_classesc                 C   s   d S r   r   r¤   r   r   r   rò   ñ  s    zMappedTest.setup_classesc                 C   s   d S r   r   r¤   r   r   r   r÷   õ  s    zMappedTest.setup_mappers)r   r€   r�   rð   ró   rç   r   rH   r•   rš   rË   rê   rè   ré   rì   rë   rô   rñ   rí   rî   rò   r÷   r   r   r   r   ræ   ~  s2   








ræ   c                       s4   e Zd ZdZdZedd„ ƒZe‡ fdd„ƒZ‡  ZS )ÚDeclarativeMappedTestrŒ   c                 C   s   d S r   r   r¤   r   r   r   r�   þ  s    z(DeclarativeMappedTest._setup_once_tablesc                    sp   | j ‰ G ‡ fdd„dtƒ}G dd„ dtƒ}t| j||d�}|| _tt| ƒ |¡ | jj	rl| j
rl| j tj¡ d S )Nc                       s   e Zd Z‡ fdd„ZdS )zLDeclarativeMappedTest._with_register_classes.<locals>.FindFixtureDeclarativec                    s   | ˆ |< t  | |||¡ d S r   )r   rú   rû   rþ   r   r   rú     s    zUDeclarativeMappedTest._with_register_classes.<locals>.FindFixtureDeclarative.__init__Nrÿ   r   rþ   r   r   ÚFindFixtureDeclarative  s   r  c                   @   s   e Zd ZejZdS )zFDeclarativeMappedTest._with_register_classes.<locals>.DeclarativeBasicN)r   r€   r�   r   rc   Z__table_cls__r   r   r   r   ÚDeclarativeBasic  s   r  )r=   Ú	metaclassr”   )rç   r   r  r   r›   r  Úsuperr  rñ   r¡   rž   r«   r   r"   )r”   r¾   r  r  Z	_DeclBase©rŽ   rþ   r   rñ     s    ýz,DeclarativeMappedTest._with_register_classes)	r   r€   r�   rð   ró   rË   r�   rñ   Ú__classcell__r   r   r  r   r  ú  s   
r  c                   @   s:   e Zd Zd ZZdZdZe d¡Z	dd„ Z
edd„ ƒZdS )	ÚComputedReflectionFixtureTestNT)Zcomputed_columnsZtable_reflectionz[\[\]\(\)\s`'\"]*c                 C   s   | j  d|¡ ¡ S )NrR   )ÚregexpÚsubÚlower)r   Útextr   r   r   Ú	normalize&  s    z'ComputedReflectionFixtureTest.normalizec           	      C   sx  ddl m} ddl m} ddlm} ddlm} ddlm} |d||d|d	d
�|d|ƒ|d||dƒƒ|d|dd�ƒ |d||d|d	d
�|d|ƒ|d||dƒƒƒ}|jjj	rÜ|d||d|d	d
�|d|ƒ|d||dƒƒt
jd�}|jjj	�r(| |d||ddd�ƒ¡ |jjj	�r(| |d||ddd�ƒ¡ |jjj	�rt| |d||dd	d�ƒ¡ |jjj	�rt| |d||dd	d�ƒ¡ d S )Nr   )re   r„   )rd   )ÚComputed)rc   Zcomputed_default_tableÚidT)Zprimary_keyÚnormalZcomputed_colznormal + 42Zwith_defaultZ42)Zserver_defaultZcomputed_column_tableZcomputed_no_flagznormal / 42r   Zcomputed_virtualz
normal + 2F)Z	persistedz
normal / 2Zcomputed_storedznormal - 42znormal * 42)rR   re   r…   r   rd   r  rc   ÚrequiresZschemasro   r   Ztest_schemaZcomputed_columns_virtualÚappend_columnZcomputed_columns_stored)	r”   r=   re   r…   rd   r  rc   ry   Út2r   r   r   rª   )  sz    ú	û
ú	
ýÿ
ýÿ
ýÿ
ýÿz+ComputedReflectionFixtureTest.define_tables)r   r€   r�   rŸ   r±   Z__backend__r‚   ÚreÚcompiler  r  rË   rª   r   r   r   r   r    s   
r  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚCacheKeyFixturec                 C   sŒ   |  ¡ }|  ¡ }|d kr6|j d¡s(t‚|d ks„t‚nNt|j|jƒ tt|jƒt|jƒƒ t|j|jƒD ]\}}|j	||d�sht‚qh||fS )Nr%   ©Úcompare_values)
Ú_generate_cache_keyÚ_annotationsÚgetr   r   r×   ÚhashrÂ   Ú
bindparamsÚcompare)r   ÚaÚbr  Úa_keyÚb_keyÚa_paramÚb_paramr   r   r   Ú_compare_equalo  s    zCacheKeyFixture._compare_equalc                 C   sè  |ƒ }|ƒ }t  tt|ƒƒd¡D �]À\}}||krX|  || || |¡\}}|d krVq nº||  ¡ }||  ¡ }|d ks€|d krº|d krœ|| j d¡sœt‚|d kr || j d¡s t‚q |j	|j	k�rt
|j|jƒD ]\}	}
|	j|
|d�sÖ �qqÖt|j	|j	ƒ nt|j	|j	ƒ t|| tƒr t|| tƒr g }g }t || ¡D ]}|jdk�rD| |¡ �qDt || ¡D ]}|jdk�rp| |¡ �qptt|jdd„ d�tt |¡dd„ d�ƒ tt|jd	d„ d�tt |¡d
d„ d�ƒ q d S )Nr   r%   r  Z	bindparamc                 S   s   | j S r   ©r×   ©r%  r   r   r   Ú<lambda>¿  ó    z8CacheKeyFixture._run_cache_key_fixture.<locals>.<lambda>r+  c                 S   s   | j S r   r+  r,  r   r   r   r-  Á  r.  c                 S   s   | j S r   r+  r,  r   r   r   r-  Å  r.  c                 S   s   | j S r   r+  r,  r   r   r   r-  Ç  r.  )Ú	itertoolsÚcombinations_with_replacementÚrangerÆ   r*  r  r  r   r   r×   rÂ   r"  r#  r	   rÇ   r   r   ZiterateZ__visit_name__r3   r   Úsortedr   Zunique_list)r   rH   r  Úcase_aÚcase_br$  r%  r&  r'  r(  r)  Zassert_a_paramsZassert_b_paramsÚelemr   r   r   Ú_run_cache_key_fixture€  sx    
 ÿ  ÿ ÿ ÿ ÿ ÿþ ÿþz&CacheKeyFixture._run_cache_key_fixturec                 C   sD   |ƒ }|ƒ }t  tt|ƒƒd¡D ]\}}|  || || |¡ q d S )Nr   )r/  r0  r1  rÆ   r*  )r   rH   r  r3  r4  r$  r%  r   r   r   Ú_run_cache_key_equal_fixtureË  s    
 ÿz,CacheKeyFixture._run_cache_key_equal_fixtureN)r   r€   r�   r*  r6  r7  r   r   r   r   r  n  s   Kr  )4Ú
contextlibr/  r  r¶   r|   rr   rR   r   r   r   r   r	   Úentitiesr
   r   r   r   r   r   r   rÚ   r   r   Zorm.decl_apir   r   rW   r   Zsql.elementsr   Zmark_base_test_classr  r   r.   ÚcontextmanagerrD   rˆ   r‹   rÌ   rÎ   rÏ   rÜ   rU   rà   râ   rã   rä   ZAssertsExecutionResultsræ   r  r  r  r   r   r   r   Ú<module>   sX     8
 R	|$P