U
    ovg                     @  s  d dl mZ 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 G dd deZG dd dee	ejZG dd deZG dd dZe Zdd Zdd Z dd  Z!d!d" Z"dS )#    )annotations)AnyN   )TestBase)
TablesTest   )
assertions)config)schema)BasicEntity)ComparableEntity)adict   )orm)DeclarativeBase)events)registryc                   @  s   e Zd Zejdd ZdS )ORMTestc                 C  s   t  S N)fixture_sessionself r   C/tmp/pip-unpacked-wheel-uqd9otp_/sqlalchemy/testing/fixtures/orm.pyr      s    zORMTest.fixture_sessionN)__name__
__module____qualname__r	   fixturer   r   r   r   r   r      s   r   c                   @  s   e Zd ZU dZdZdZded< 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 )$
MappedTestonceeachNr   classesTclass)autouseZscopec                 c  sZ   | j }|  |jd kr t |_|  |  |  |  d V  |  |	  d S r   )
	__class__Z_init_classr!   r   _setup_once_tables_setup_once_classes_setup_once_mappersZ_setup_once_inserts_teardown_once_classZ_teardown_once_metadata_bind)r   clsr   r   r   _setup_tables_test_class*   s    
z#MappedTest._setup_tables_test_classfunctionc                 c  sL   |    |   |   |   d V  tj  |   |   | 	  d S r   )
Z_setup_each_tables_setup_each_classes_setup_each_mappersZ_setup_each_insertsr   sessionclose_all_sessions_teardown_each_mappers_teardown_each_classesZ_teardown_each_tablesr   r   r   r   _setup_tables_test_instance<   s    
z&MappedTest._setup_tables_test_instancec                 C  s   | j   d S r   )r!   clearr)   r   r   r   r(   J   s    zMappedTest._teardown_once_classc                 C  s   | j dkr| | j d S Nr   run_setup_classes_with_register_classessetup_classesr4   r   r   r   r&   N   s    
zMappedTest._setup_once_classesc                 C  s*   | j dkr&|  \| _| _| | j d S r5   )run_setup_mappers_generate_registrymapper_registrymapperr8   setup_mappersr4   r   r   r   r'   S   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=   r8   r>   r   r   r   r   r-   Y   s    

zMappedTest._setup_each_mappersc                 C  s   | j dkr| | j d S )Nr    r6   r   r   r   r   r,   c   s    
zMappedTest._setup_each_classesc                 C  s   t | jd}||jfS )N)metadata)r   _tables_metadataZmap_imperatively)r)   declr   r   r   r;   g   s    zMappedTest._generate_registryc                   sR   | j  G  fddd}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dd fddZ  ZS )z0MappedTest._with_register_classes.<locals>._BaseNonereturnc                   s$   d k	st | | j< t   d S r   AssertionErrorr   super__init_subclass__r4   r$   cls_registryr   r   rH   v   s    
zBMappedTest._with_register_classes.<locals>._Base.__init_subclass__)r   r   r   rH   __classcell__r   rJ   r$   r   _Baseu   s   rN   c                   @  s   e Zd ZdS )z0MappedTest._with_register_classes.<locals>.BasicNr   r   r   r   r   r   r   Basic{   s   rP   c                   @  s   e Zd ZdS )z5MappedTest._with_register_classes.<locals>.ComparableNrO   r   r   r   r   
Comparable~   s   rQ   N)r!   r   r   rP   rQ   )r)   fnrN   rP   rQ   r   rL   r   r8   l   s    z!MappedTest._with_register_classesc                 C  s   | j dkrt  d S r5   )r:   r   clear_mappersr   r   r   r   r0      s    
z!MappedTest._teardown_each_mappersc                 C  s   | j dkr| j  d S r5   )r7   r!   r3   r   r   r   r   r1      s    
z!MappedTest._teardown_each_classesc                 C  s   d S r   r   r4   r   r   r   r9      s    zMappedTest.setup_classesc                 C  s   d S r   r   r4   r   r   r   r>      s    zMappedTest.setup_mappers)r   r   r   r7   r:   r!   __annotations__r	   r   r*   r2   classmethodr(   r&   r'   r-   r,   r;   r8   r0   r1   r9   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   r4   r   r   r   r%      s    z(DeclarativeMappedTest._setup_once_tablesc                   sN    j G  fdddt}| _t |  jjrJ jrJ jt	j
 d S )Nc                      sN   e Zd ZejZjZee	
 e	
ddddiZdd fddZ  ZS )	z?DeclarativeMappedTest._with_register_classes.<locals>._DeclBase2   ZmysqlZmariadboraclerB   rC   c                   s(   d k	st | | j< t jf | d S r   rE   )r)   kwrI   r   r   rH      s    
zQDeclarativeMappedTest._with_register_classes.<locals>._DeclBase.__init_subclass__)r   r   r   r
   ZTableZ__table_cls__r@   r?   strsaStringZwith_variantZtype_annotation_maprH   rK   r   r)   rJ   rM   r   	_DeclBase   s       r^   )r!   r   ZDeclarativeBasicrG   r8   r@   ZtablesZrun_create_tablesZ
create_allr	   db)r)   rR   r^   rM   r]   r   r8      s    z,DeclarativeMappedTest._with_register_classes)	r   r   r   r7   r:   rU   r%   r8   rK   r   r   rM   r   rV      s   
rV   c                   @  s    e Zd Zejdddd ZdS )RemoveORMEventsGloballyT)r#   c                 c  s<   d V  t j  t j  t j  t j  t j  d S r   )
orm_eventsZMapperEvents_clearZInstanceEventsZSessionEventsZInstrumentationEventsZQueryEventsr   r   r   r   _remove_listeners   s    



z)RemoveORMEventsGlobally._remove_listenersN)r   r   r   r	   r   rc   r   r   r   r   r`      s   
r`   c                  K  sB   |  dd |  dd | dtj}tj|f| }t| |S )NZ	autoflushTZexpire_on_commitbind)
setdefaultpopr	   r_   r   Session_fixture_sessionsadd)rY   rd   sessr   r   r   r      s    
r   c                   C  s   t   t  d S r   )r   r/   rh   r3   r   r   r   r   r/      s    r/   c                 C  s   t   t  d S r   )r/   r   rS   r4   r   r   r   stop_test_class_inside_fixtures   s    rk   c                   C  s   t r
t  d S r   )rh   r/   r   r   r   r   
after_test   s    rl   )#
__future__r   typingr   Z
sqlalchemyr[   baser   Zsqlr    r   r	   r
   entitiesr   r   utilr   r   r   r   ra   r   r   ZAssertsExecutionResultsr   rV   r`   setrh   r   r/   rk   rl   r   r   r   r   <module>   s.   x$