o
    g                     @  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   Y/var/www/html/api-tag/env/lib/python3.10/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)autousescopec                 c  s\    | j }|  |jd u rt |_|  |  |  |  d V  |  |	  d S r   )
	__class___init_classr!   r   _setup_once_tables_setup_once_classes_setup_once_mappers_setup_once_inserts_teardown_once_class_teardown_once_metadata_bind)r   clsr   r   r   _setup_tables_test_class*   s   
z#MappedTest._setup_tables_test_classfunctionc                 c  sN    |    |   |   |   d V  tj  |   |   | 	  d S r   )
_setup_each_tables_setup_each_classes_setup_each_mappers_setup_each_insertsr   sessionclose_all_sessions_teardown_each_mappers_teardown_each_classes_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     | j dkr| | j d S d S Nr   run_setup_classes_with_register_classessetup_classesr;   r   r   r   r(   N   s   
zMappedTest._setup_once_classesc                 C  s.   | j dkr|  \| _| _| | j d S d S r=   )run_setup_mappers_generate_registrymapper_registrymapperr@   setup_mappersr;   r   r   r   r)   S   s   
zMappedTest._setup_once_mappersc                 C  s<   | j dkr|  \| j_| j_| j dkr| | j d S d S )Nr   r    )rB   rC   r%   rD   rE   r@   rF   r   r   r   r   r2   Y   s   

zMappedTest._setup_each_mappersc                 C  r<   )Nr    r>   r   r   r   r   r1   c   s   
zMappedTest._setup_each_classesc                 C  s   t | jd}||jfS )N)metadata)r   _tables_metadatamap_imperatively)r-   declr   r   r   rC   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 fddZ  ZS )z0MappedTest._with_register_classes.<locals>._BasereturnNonec                   s$   d usJ | | j < t   d S r   r   super__init_subclass__r;   r%   cls_registryr   r   rO   v   s   
zBMappedTest._with_register_classes.<locals>._Base.__init_subclass__rK   rL   )r   r   r   rO   __classcell__r   rQ   r%   r   _Baseu   s    rV   c                   @     e Zd ZdS )z0MappedTest._with_register_classes.<locals>.BasicNr   r   r   r   r   r   r   Basic{       rY   c                   @  rW   )z5MappedTest._with_register_classes.<locals>.ComparableNrX   r   r   r   r   
Comparable~   rZ   r[   N)r!   r   r   rY   r[   )r-   fnrV   rY   r[   r   rT   r   r@   l   s   
z!MappedTest._with_register_classesc                 C  s   | j dkrt  d S d S r=   )rB   r   clear_mappersr   r   r   r   r6      s   
z!MappedTest._teardown_each_mappersc                 C  s   | j dkr| j  d S d S r=   )r?   r!   r:   r   r   r   r   r7      s   
z!MappedTest._teardown_each_classesc                 C     d S r   r   r;   r   r   r   rA         zMappedTest.setup_classesc                 C  r^   r   r   r;   r   r   r   rF      r_   zMappedTest.setup_mappers)r   r   r   r?   rB   r!   __annotations__r	   r   r.   r9   classmethodr+   r(   r)   r2   r1   rC   r@   r6   r7   rA   rF   r   r   r   r   r   !   s4   
 








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  r^   r   r   r;   r   r   r   r'      r_   z(DeclarativeMappedTest._setup_once_tablesc                   sV    j G  fdddt}| _t |  jjr' jr) jt	j
 d S d S d S )Nc                      sJ   e Zd ZejZjZee	
 e	
ddddiZd	 fddZ  ZS )
z?DeclarativeMappedTest._with_register_classes.<locals>._DeclBase2   mysqlmariadboraclerK   rL   c                   s,   d usJ | | j < t jdi | d S )Nr   rM   )r-   kwrP   r   r   rO      s   
zQDeclarativeMappedTest._with_register_classes.<locals>._DeclBase.__init_subclass__rR   )r   r   r   r
   Table__table_cls__rH   rG   strsaStringwith_varianttype_annotation_maprO   rS   r   r-   rQ   rU   r   	_DeclBase   s    
rp   )r!   r   DeclarativeBasicrN   r@   rH   tablesrun_create_tables
create_allr	   db)r-   r\   rp   rU   ro   r   r@      s   z,DeclarativeMappedTest._with_register_classes)	r   r   r   r?   rB   ra   r'   r@   rS   r   r   rU   r   rb      s    
rb   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_eventsMapperEvents_clearInstanceEventsSessionEventsInstrumentationEventsQueryEventsr   r   r   r   _remove_listeners   s   



z)RemoveORMEventsGlobally._remove_listenersN)r   r   r   r	   r   r~   r   r   r   r   rv      s    
rv   c                  K  sF   |  dd |  dd | dtj}tj|fi | }t| |S )N	autoflushTexpire_on_commitbind)
setdefaultpopr	   ru   r   Session_fixture_sessionsadd)rg   r   sessr   r   r   r      s   
r   c                   C  s   t   t  d S r   )r   r5   r   r:   r   r   r   r   r5      s   r5   c                 C  s   t   t  d S r   )r5   r   r]   r;   r   r   r   stop_test_class_inside_fixtures   s   r   c                   C  s   t rt  d S d S r   )r   r5   r   r   r   r   
after_test   s   
r   )#
__future__r   typingr   
sqlalchemyrk   baser   sqlr    r   r	   r
   entitiesr   r   utilr   r   r   r   rw   r   r   AssertsExecutionResultsr   rb   rv   setr   r   r5   r   r   r   r   r   r   <module>   s0   x$