U
    [h                     @  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   E./venv/lib/python3.8/site-packages/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   Z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_classesr3   r   r   r   r&   N   s    
zMappedTest._setup_once_classesc                 C  s*   | j dkr&|  \| _| _| | j d S r4   )run_setup_mappers_generate_registrymapper_registrymapperr7   setup_mappersr3   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    )r9   r:   r$   r;   r<   r7   r=   r   r   r   r   r-   Y   s    

zMappedTest._setup_each_mappersc                 C  s   | j dkr| | j d S )Nr    r5   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)   Z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__r3   r$   cls_registryr   r   rF   v   s    
zBMappedTest._with_register_classes.<locals>._Base.__init_subclass__)r   r   r   rF   __classcell__r   rH   r$   r   _Baseu   s   rL   c                   @  s   e Zd ZdS )z0MappedTest._with_register_classes.<locals>.BasicNr   r   r   r   r   r   r   Basic{   s   rN   c                   @  s   e Zd ZdS )z5MappedTest._with_register_classes.<locals>.ComparableNrM   r   r   r   r   
Comparable~   s   rO   N)r!   r   r   rN   rO   )r)   fnrL   rN   rO   r   rJ   r   r7   l   s    z!MappedTest._with_register_classesc                 C  s   | j dkrt  d S r4   )r9   r   clear_mappersr   r   r   r   r/      s    
z!MappedTest._teardown_each_mappersc                 C  s   | j dkr| j  d S r4   )r6   r!   r2   r   r   r   r   r0      s    
z!MappedTest._teardown_each_classesc                 C  s   d S r   r   r3   r   r   r   r8      s    zMappedTest.setup_classesc                 C  s   d S r   r   r3   r   r   r   r=      s    zMappedTest.setup_mappers)r   r   r   r6   r9   r!   __annotations__r	   r   r*   r1   classmethodr(   r&   r'   r-   r,   r:   r7   r/   r0   r8   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   r3   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mariadbZoracler@   rA   c                   s(   d k	st | | j< t jf | d S r   rC   )r)   kwrG   r   r   rF      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_maprF   rI   r   r)   rH   rK   r   	_DeclBase   s       r[   )r!   r   ZDeclarativeBasicrE   r7   r?   ZtablesZrun_create_tablesZ
create_allr	   db)r)   rP   r[   rK   rZ   r   r7      s    z,DeclarativeMappedTest._with_register_classes)	r   r   r   r6   r9   rS   r%   r7   rI   r   r   rK   r   rT      s   
rT   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MapperEventsZ_clearZInstanceEventsZSessionEventsZInstrumentationEventsZQueryEventsr   r   r   r   _remove_listeners   s    



z)RemoveORMEventsGlobally._remove_listenersN)r   r   r   r	   r   r_   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   ZSession_fixture_sessionsadd)rV   r`   Zsessr   r   r   r      s    
r   c                   C  s   t   t  d S r   )r   r.   rc   r2   r   r   r   r   r.      s    r.   c                 C  s   t   t  d S r   )r.   r   rQ   r3   r   r   r   stop_test_class_inside_fixtures   s    re   c                   C  s   t r
t  d S r   )rc   r.   r   r   r   r   
after_test   s    rf   )#Z
__future__r   typingr   Z
sqlalchemyrX   baser   Zsqlr    r   r	   r
   Zentitiesr   r   utilr   r   r   r   r^   r   r   ZAssertsExecutionResultsr   rT   r]   setrc   r   r.   re   rf   r   r   r   r   <module>   s.   x$