B
    \>*                 @   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   :lib/python3.7/site-packages/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__Z__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 )N)_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metadata)r%   r   r   r   r"   ]   s    



zTablesTest._init_classc             C   s   | j dkr|   |   d S )Nr    )r)   _load_fixturesinsert_data)r%   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 )Nr    )r'   define_tablesr/   r(   
create_allr-   r+   update)r%   r   r   r   r#   q   s
    

zTablesTest._setup_once_tablesc             C   s   | j dkrl| j  | jdkr,t| j| j | j  | | j | jdkrZ| j| j | j	| jj n&| jdkrt| j| j | j| j d S )Nr!   )
r'   r+   clearr(   r   r/   r-   r2   r3   r4   )r   r   r   r   _setup_each_tablesy   s    





zTablesTest._setup_each_tablesc             C   s   | j dkr|   |   d S )Nr!   )r)   r0   r1   )r   r   r   r   _setup_each_inserts   s    
zTablesTest._setup_each_insertsc             C   s   | j dkr| jdkr| j n}xft| jjD ]V}y||  W q. t	j
jk
r } ztjd||f tjd W d d }~X Y q.X q.W W d Q R X d S )Nr!   zError emptying table %s: %r)file)r'   run_deletesr-   Zconnectreversedr/   sorted_tablesexecutedeleter.   excZ
DBAPIErrorr   print_sysstderr)r   Zconntableexr   r   r   _teardown_each_tables   s    
z TablesTest._teardown_each_tablesc             C   s   |    |   d S )N)r6   r7   )r   r   r   r   r      s    zTablesTest.setupc             C   s   |    d S )N)rD   )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 )Nr    )r(   r   r/   r-   run_dispose_binddispose_bindrun_setup_bind)r%   r   r   r   _teardown_once_metadata_bind   s    

z'TablesTest._teardown_once_metadata_bindc             C   s   |    d S )N)rH   )r%   r   r   r   teardown_class   s    zTablesTest.teardown_classc             C   s   t jS )N)r   db)r%   r   r   r   r,      s    zTablesTest.setup_bindc             C   s*   t |dr|  nt |dr&|  d S )Ndisposeclose)r   rK   rL   )r%   r-   r   r   r   rF      s    


zTablesTest.dispose_bindc             C   s   d S )Nr   )r%   r/   r   r   r   r2      s    zTablesTest.define_tablesc             C   s   i S )Nr   )r%   r   r   r   fixtures   s    zTablesTest.fixturesc             C   s   d S )Nr   )r%   r   r   r   r1      s    zTablesTest.insert_datac             C   s   |  | j|| d S )N)Zassert_sql_countr-   )r   countfnr   r   r   
sql_count_   s    zTablesTest.sql_count_c             C   s   |  | j|| d S )N)Z
assert_sqlr-   )r   Z	callable_Z
statementsr   r   r   sql_eq_   s    zTablesTest.sql_eq_c                s   i i   }xX|    D ]H\}t|dk r.qttjrD| j |d  < |dd |< qW x@| jjD ]4 kr|qn| j	
  fdd| D  qnW d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)headersrB   r   r   
<listcomp>   s   z-TablesTest._load_fixtures.<locals>.<listcomp>)rM   itemslen
isinstancer   Zstring_typesr+   r/   r;   r-   r<   insert)r%   Zrowsdatar   )rU   rB   r   r0      s    

zTablesTest._load_fixtures)!r   r   r   rG   r'   r(   r)   r9   rE   r-   r/   r+   r*   classmethodr&   r"   r$   r#   r6   r7   rD   r   r   rH   rI   r,   rF   r2   rM   r1   rP   rQ   r0   r   r   r   r   r   <   s:   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 )N)set)r   r   r   r   
_event_fns   s    zRemovesEvents._event_fnsc             K   s(   | j |||f tj|||f| d S )N)r_   addr   Zlisten)r   targetnamerO   kwr   r   r   event_listen   s    zRemovesEvents.event_listenc                s:   x| j D ]}tj|  qW tt| }t|dr6|  d S )Nr   )r_   r   removesuperr]   r   r   )r   keyZsuper_)	__class__r   r   r      s
    

zRemovesEvents.teardown)	r   r   r   r   Zmemoized_propertyr_   rd   r   __classcell__r   r   )rh   r   r]      s   r]   c               @   s   e Zd Zedd ZdS )_ORMTestc             C   s   t jj  t j  d S )N)r.   ormsessionclose_all_sessionsclear_mappers)r%   r   r   r   rI      s    z_ORMTest.teardown_classN)r   r   r   r\   rI   r   r   r   r   rj      s   rj   c               @   s   e Zd ZdS )ORMTestN)r   r   r   r   r   r   r   ro      s   ro   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 )N)r"   classesr	   r#   _setup_once_classes_setup_once_mappersr$   )r%   r   r   r   r&   
  s    
zMappedTest.setup_classc             C   s   |    |   d S )N)_teardown_once_classrH   )r%   r   r   r   rI     s    zMappedTest.teardown_classc             C   s$   |    |   |   |   d S )N)r6   _setup_each_classes_setup_each_mappersr7   )r   r   r   r   r     s    zMappedTest.setupc             C   s(   t jj  |   |   |   d S )N)r.   rk   rl   rm   _teardown_each_mappers_teardown_each_classesrD   )r   r   r   r   r   !  s    zMappedTest.teardownc             C   s   | j   t  d S )N)rq   r5   rj   rI   )r%   r   r   r   rt   '  s    
zMappedTest._teardown_once_classc             C   s   | j dkr| | j d S )Nr    )run_setup_classes_with_register_classessetup_classes)r%   r   r   r   rr   ,  s    
zMappedTest._setup_once_classesc             C   s   | j dkr| | j d S )Nr    )run_setup_mappersrz   setup_mappers)r%   r   r   r   rs   1  s    
zMappedTest._setup_once_mappersc             C   s   | j dkr| | j d S )Nr!   )r|   rz   r}   )r   r   r   r   rv   6  s    
zMappedTest._setup_each_mappersc             C   s   | j dkr| | j d S )Nr!   )ry   rz   r{   )r   r   r   r   ru   :  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 )
zRun 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 )N)type__init__)r%   	classnamebasesdict_)cls_registryr   r   r   H  s    z?MappedTest._with_register_classes.<locals>.FindFixture.__init__N)r   r   r   r   r   )r   r   r   FindFixtureG  s   r   c               @   s   e Zd ZdS )z0MappedTest._with_register_classes.<locals>._BaseN)r   r   r   r   r   r   r   _BaseL  s   r   c               @   s   e Zd ZdS )z0MappedTest._with_register_classes.<locals>.BasicN)r   r   r   r   r   r   r   BasicO  s   r   c               @   s   e Zd ZdS )z5MappedTest._with_register_classes.<locals>.ComparableN)r   r   r   r   r   r   r   
ComparableR  s   r   N)	rq   r~   r   Zwith_metaclassobjectr   r   r   r   )r%   rO   r   r   r   r   r   )r   r   rz   >  s    z!MappedTest._with_register_classesc             C   s   | j dkrtj  d S )Nr    )r|   r.   rk   rn   )r   r   r   r   rw   Y  s    
z!MappedTest._teardown_each_mappersc             C   s   | j dkr| j  d S )Nr    )ry   rq   r5   )r   r   r   r   rx   `  s    
z!MappedTest._teardown_each_classesc             C   s   d S )Nr   )r%   r   r   r   r{   d  s    zMappedTest.setup_classesc             C   s   d S )Nr   )r%   r   r   r   r}   h  s    zMappedTest.setup_mappers)r   r   r   ry   r|   rq   r\   r&   rI   r   r   rt   rr   rs   rv   ru   rz   rw   rx   r{   r}   r   r   r   r   rp     s"   rp   c               @   s,   e Zd ZdZdZedd Zedd ZdS )DeclarativeMappedTestr    c             C   s   d S )Nr   )r%   r   r   r   r#   q  s    z(DeclarativeMappedTest._setup_once_tablesc                sf   | j  G  fdddt}G dd dt}t| j||d}|| _|  | jjrb| jrb| 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 | |||S )N)r   r   )r%   r   r   r   )r   r   r   r   z  s    zUDeclarativeMappedTest._with_register_classes.<locals>.FindFixtureDeclarative.__init__N)r   r   r   r   r   )r   r   r   FindFixtureDeclarativey  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   )r/   	metaclassr%   )rq   r   r   r   r/   r   r+   r(   r3   r   rJ   )r%   rO   r   r   Z	_DeclBaser   )r   r   rz   u  s    z,DeclarativeMappedTest._with_register_classesN)r   r   r   ry   r|   r\   r#   rz   r   r   r   r   r   m  s   r   )r@   Z
sqlalchemyr.    r   r   r   Zenginesr   Zentitiesr   r   r   r	   r   Zext.declarativer   r   r   r   r   r]   rj   ro   ZAssertsExecutionResultsrp   r   r   r   r   r   <module>   s(     *l