U
    xž^&+  ã                   @   s  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 G dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deeƒZG dd„ deeejƒZG dd„ deƒZdS )é    Né   )Ú
assertions)Úconfig)Úschema)Údrop_all_tables)ÚBasicEntity)ÚComparableEntity)Úadicté   )Úevent)Úutil)Údeclarative_base)ÚDeclarativeMetac                   @   s:   e Zd ZdZdZdZdZdZd	dd„Zdd„ Z	dd„ Z
dS )
ÚTestBase© Nc                 C   s   |st |ƒ‚d S ©N)ÚAssertionError)ÚselfÚvalÚmsgr   r   úC/tmp/pip-install-dq5v43_d/SQLAlchemy/sqlalchemy/testing/fixtures.pyÚassert_/   s    zTestBase.assert_c                 C   s   t | dƒr|  ¡  d S )NÚsetUp)Úhasattrr   ©r   r   r   r   Úsetup3   s    
zTestBase.setupc                 C   s   t | dƒr|  ¡  d S )NÚtearDown)r   r   r   r   r   r   Úteardown7   s    
zTestBase.teardown)N)Ú__name__Ú
__module__Ú__qualname__Z__whitelist__Ú__requires__Z__unsupported_on__Z__only_on__Z__skip_if__r   r   r   r   r   r   r   r      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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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ed"d#„ ƒZd$d%„ Zd&d'„ Zed(d)„ ƒZ dS )*Ú
TablesTestÚonceÚeachNc                 C   s   |   ¡  |  ¡  |  ¡  d S r   )Ú_init_classÚ_setup_once_tablesÚ_setup_once_inserts©Úclsr   r   r   Úsetup_classU   s    zTablesTest.setup_classc                 C   sZ   | j dkr(| jdkrd| _| jdks(t‚tƒ | _tƒ | _|  ¡ | _t	 
¡ | _| j| j_d S )Nr$   r#   )r$   N)Úrun_define_tablesÚrun_create_tablesÚrun_insertsr   r	   ÚotherÚtablesÚ
setup_bindÚbindÚsaZMetaDataÚmetadatar(   r   r   r   r%   ]   s    



zTablesTest._init_classc                 C   s   | j dkr|  ¡  |  ¡  d S ©Nr#   ©r-   Ú_load_fixturesÚinsert_datar(   r   r   r   r'   k   s    
zTablesTest._setup_once_insertsc                 C   sB   | j dkr>|  | j¡ | jdkr.| j | j¡ | j | jj¡ d S r4   ©r+   Údefine_tablesr3   r,   Ú
create_allr1   r/   Úupdater(   r   r   r   r&   q   s
    

zTablesTest._setup_once_tablesc                 C   s\   | j dkr@|  | j¡ | jdkr.| j | j¡ | j | jj¡ n| jdkrX| j | j¡ d S ©Nr$   r8   r   r   r   r   Ú_setup_each_tablesy   s    


zTablesTest._setup_each_tablesc                 C   s   | j dkr|  ¡  |  ¡  d S r<   r5   r   r   r   r   Ú_setup_each_inserts‚   s    
zTablesTest._setup_each_insertsc                 C   sâ   | j dkr8| j ¡  | jdkr,t| j| jƒ | j ¡  n| jdkrPt| j| jƒ | j dkrÞ| jdkrÞ| j ¡ j}t	| jj
ƒD ]V}z| | ¡ ¡ W q| tjjk
rÐ } ztjd||f tjd W 5 d }~X Y q|X q|W 5 Q R X d S )Nr$   zError emptying table %s: %r)Úfile)r+   r/   Úclearr,   r   r3   r1   Úrun_deletesÚconnectÚreversedÚsorted_tablesÚexecuteÚdeleter2   ÚexcZ
DBAPIErrorr   Úprint_ÚsysÚstderr)r   ÚconnÚtableÚexr   r   r   Ú_teardown_each_tables‡   s"    




þz TablesTest._teardown_each_tablesc                 C   s   |   ¡  |  ¡  d S r   )r=   r>   r   r   r   r   r   œ   s    zTablesTest.setupc                 C   s   |   ¡  d S r   )rN   r   r   r   r   r       s    zTablesTest.teardownc                 C   sF   | j rt| j| jƒ | jdkr*|  | j¡ d | j_| jd k	rBd | _d S r4   )r,   r   r3   r1   Úrun_dispose_bindÚdispose_bindÚrun_setup_bindr(   r   r   r   Ú_teardown_once_metadata_bind£   s    

z'TablesTest._teardown_once_metadata_bindc                 C   s   |   ¡  d S r   )rR   r(   r   r   r   Úteardown_class°   s    zTablesTest.teardown_classc                 C   s   t jS r   )r   Údbr(   r   r   r   r0   ´   s    zTablesTest.setup_bindc                 C   s*   t |dƒr| ¡  nt |dƒr&| ¡  d S )NÚdisposeÚclose)r   rU   rV   )r)   r1   r   r   r   rP   ¸   s    


zTablesTest.dispose_bindc                 C   s   d S r   r   )r)   r3   r   r   r   r9   ¿   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(   r   r   r   r7   Ç   s    zTablesTest.insert_datac                 C   s   |   | j||¡ d S r   )Zassert_sql_countr1   )r   ÚcountÚfnr   r   r   Ú
sql_count_Ë   s    zTablesTest.sql_count_c                 C   s   |   | j||¡ d S r   )Z
assert_sqlr1   )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| jjD ]4‰ˆˆ krvqh| j	 
ˆ ¡ ‡ ‡fdd„|ˆ D ƒ¡ qhdS )z4Insert rows as represented by the fixtures() method.r
   r   r   Nc                    s   g | ]}t tˆ ˆ |ƒƒ‘qS r   )ÚdictÚzip)Ú.0Zcolumn_values©ÚheadersrL   r   r   Ú
<listcomp>á   s   ÿz-TablesTest._load_fixtures.<locals>.<listcomp>)rW   ÚitemsÚlenÚ
isinstancer   Ústring_typesr/   r3   rD   r1   rE   Úinsert)r)   ZrowsÚdatar   r_   r   r6   Ñ   s"    

þþzTablesTest._load_fixtures)!r   r   r    rQ   r+   r,   r-   rA   rO   r1   r3   r/   r.   Úclassmethodr*   r%   r'   r&   r=   r>   rN   r   r   rR   rS   r0   rP   r9   rW   r7   rZ   r[   r6   r   r   r   r   r"   <   sR   



	






r"   c                       s2   e Zd Zejdd„ ƒZdd„ Z‡ fdd„Z‡  ZS )ÚRemovesEventsc                 C   s   t ƒ S r   )Úsetr   r   r   r   Ú
_event_fnsé   s    zRemovesEvents._event_fnsc                 K   s(   | j  |||f¡ tj|||f|Ž d S r   )rk   Úaddr   Úlisten)r   ÚtargetÚnamerY   Úkwr   r   r   Úevent_listení   s    zRemovesEvents.event_listenc                    s6   | j D ]}tj|Ž  qtt| ƒ}t|dƒr2| ¡  d S )Nr   )rk   r   ÚremoveÚsuperri   r   r   )r   ÚkeyZsuper_©Ú	__class__r   r   r   ñ   s
    


zRemovesEvents.teardown)	r   r   r    r   Zmemoized_propertyrk   rq   r   Ú__classcell__r   r   ru   r   ri   è   s   
ri   c                   @   s   e Zd Zedd„ ƒZdS )Ú_ORMTestc                 C   s   t jj ¡  t j ¡  d S r   )r2   ÚormÚsessionÚclose_all_sessionsÚclear_mappersr(   r   r   r   rS   ú   s    z_ORMTest.teardown_classN)r   r   r    rh   rS   r   r   r   r   rx   ù   s   rx   c                   @   s   e Zd ZdS )ÚORMTestN©r   r   r    r   r   r   r   r}      s   r}   c                   @   s¨   e Zd ZdZdZdZedd„ ƒZedd„ ƒZdd	„ Z	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d„ Zdd„ Zedd„ ƒZedd„ ƒZdS ) Ú
MappedTestr#   r$   Nc                 C   s>   |   ¡  | jd krtƒ | _|  ¡  |  ¡  |  ¡  |  ¡  d S r   )r%   Úclassesr	   r&   Ú_setup_once_classesÚ_setup_once_mappersr'   r(   r   r   r   r*     s    
zMappedTest.setup_classc                 C   s   |   ¡  |  ¡  d S r   )Ú_teardown_once_classrR   r(   r   r   r   rS     s    zMappedTest.teardown_classc                 C   s$   |   ¡  |  ¡  |  ¡  |  ¡  d S r   )r=   Ú_setup_each_classesÚ_setup_each_mappersr>   r   r   r   r   r     s    zMappedTest.setupc                 C   s(   t jj ¡  |  ¡  |  ¡  |  ¡  d S r   )r2   ry   rz   r{   Ú_teardown_each_mappersÚ_teardown_each_classesrN   r   r   r   r   r   $  s    zMappedTest.teardownc                 C   s   | j  ¡  t ¡  d S r   )r€   r@   rx   rS   r(   r   r   r   rƒ   *  s    
zMappedTest._teardown_once_classc                 C   s   | j dkr|  | j¡ d S r4   ©Ú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 r4   ©Úrun_setup_mappersrŠ   Úsetup_mappersr(   r   r   r   r‚   4  s    
zMappedTest._setup_once_mappersc                 C   s   | j dkr|  | j¡ d S r<   rŒ   r   r   r   r   r…   9  s    
zMappedTest._setup_each_mappersc                 C   s   | j dkr|  | j¡ d S r<   rˆ   r   r   r   r   r„   =  s    
zMappedTest._setup_each_classesc                    sl   | j ‰ 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.

        c                       s   e Zd Z‡ fdd„ZdS )z6MappedTest._with_register_classes.<locals>.FindFixturec                    s   | ˆ |< t  | |||¡S r   )ÚtypeÚ__init__©r)   Ú	classnameÚbasesZdict_©Zcls_registryr   r   r   K  s    z?MappedTest._with_register_classes.<locals>.FindFixture.__init__N©r   r   r    r   r   r”   r   r   ÚFindFixtureJ  s   r–   c                   @   s   e Zd ZdS )z0MappedTest._with_register_classes.<locals>._BaseNr~   r   r   r   r   Ú_BaseO  s   r—   c                   @   s   e Zd ZdS )z0MappedTest._with_register_classes.<locals>.BasicNr~   r   r   r   r   ÚBasicR  s   r˜   c                   @   s   e Zd ZdS )z5MappedTest._with_register_classes.<locals>.ComparableNr~   r   r   r   r   Ú
ComparableU  s   r™   N)	r€   r   r   Úwith_metaclassÚobjectr   r   r˜   r™   )r)   rY   r–   r—   r˜   r™   r   r”   r   rŠ   A  s    z!MappedTest._with_register_classesc                 C   s   | j dkrtj ¡  d S r4   )r   r2   ry   r|   r   r   r   r   r†   \  s    
z!MappedTest._teardown_each_mappersc                 C   s   | j dkr| j ¡  d S r4   )r‰   r€   r@   r   r   r   r   r‡   c  s    
z!MappedTest._teardown_each_classesc                 C   s   d S r   r   r(   r   r   r   r‹   g  s    zMappedTest.setup_classesc                 C   s   d S r   r   r(   r   r   r   rŽ   k  s    zMappedTest.setup_mappers)r   r   r    r‰   r   r€   rh   r*   rS   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&   t  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   ZTableZ__table_cls__r   r   r   r   ÚDeclarativeBasic  s   rž   )r3   Ú	metaclassr)   )r€   r   r›   r   r3   rž   rs   rœ   rŠ   r/   r,   r:   r   rT   )r)   rY   r   rž   Z	_DeclBaseru   r”   r   rŠ   x  s    ýz,DeclarativeMappedTest._with_register_classes)	r   r   r    r‰   r   rh   r&   rŠ   rw   r   r   ru   r   rœ   p  s   
rœ   )rI   Z
sqlalchemyr2   Ú r   r   r   Zenginesr   Úentitiesr   r   r   r	   r   Zext.declarativer   r   r›   r   r"   ri   rx   r}   ZAssertsExecutionResultsr   rœ   r   r   r   r   Ú<module>   s(     -l