U
    ]g%i>                     @  s  d dl mZ d dlZd dlZd dlZ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 ddlmZ G dd de	ZG dd dZG dd dZG dd deZG dd dZdddZdS )     )annotationsN   )TestBase   )config)mock)eq_)ne_)adict)drop_all_tables_from_metadata   )event)util)sort_tables_and_constraints)visitors)ClauseElementc                   @  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dZ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e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 d&d' Z!d(d) Z"ed*d+ Z#dS ),
TablesTestonceeachNTclassZautousescopec                 c  s0   | j }|  |  |  d V  |  d S N)	__class___init_class_setup_once_tables_setup_once_inserts_teardown_once_metadata_bind)selfcls r    ^/var/www/html/api-medvista/venv/lib/python3.8/site-packages/sqlalchemy/testing/fixtures/sql.py_setup_tables_test_class7   s    z#TablesTest._setup_tables_test_classfunctionc                 c  s"   |    |   d V  |   d S r   )_setup_each_tables_setup_each_inserts_teardown_each_tablesr   r    r    r!   _setup_tables_test_instanceD   s    z&TablesTest._setup_tables_test_instancec                 C  s   | j S r   )_tables_metadatar'   r    r    r!   tables_test_metadataM   s    zTablesTest.tables_test_metadatac                 C  sX   | j dkr(| jdkrd| _| jdks(tt | _t | _t | _|  | _	t
 | _d S )Nr   r   )r   N)run_define_tablesrun_create_tablesrun_insertsAssertionErrorr
   othertables	sequences
setup_bindbindsaZMetaDatar)   r   r    r    r!   r   Q   s    


zTablesTest._init_classc              	   C  s6   | j dkr2|   | j }| | W 5 Q R X d S Nr   r-   _load_fixturesr3   begininsert_data)r   connr    r    r!   r   _   s    
zTablesTest._setup_once_insertsc                 C  sR   | j dkrN| | j | jdkr.| j| j | j| jj | j| jj	 d S r6   
r+   define_tablesr)   r,   Z
create_allr3   r0   updater1   Z
_sequencesr5   r    r    r!   r   f   s    

zTablesTest._setup_once_tablesc                 C  sl   | j dkrP| | j | jdkr.| j| j | j| jj | j| jj	 n| jdkrh| j| j d S Nr   r<   r'   r    r    r!   r$   o   s    


zTablesTest._setup_each_tablesc              	   C  s6   | j dkr2|   | j }| | W 5 Q R X d S r?   r7   )r   r;   r    r    r!   r%   y   s    
zTablesTest._setup_each_insertsc                 C  sD  | j dkr8| j  | jdkr,t| j| j | j  n| jdkrPt| j| j ttj	dd}|rh|j
}| j dkr@| jdkr@| jdkr@| j }tdd t| jj D D ]~}z:|r|  ||  W 5 Q R X n||  W q tjjk
r2 } ztd||f tjd W 5 d }~X Y qX qW 5 Q R X d S )Nr   
savepointsFc                 S  s   g | ]\}}|d k	r|qS r   r    ).0tfksr    r    r!   
<listcomp>   s   z4TablesTest._teardown_each_tables.<locals>.<listcomp>zError emptying table %s: %r)file)r+   r0   clearr,   r   r)   r3   getattrr   requirementsenabledrun_deletesr9   reversedr   valuesZbegin_nestedexecutedeleter4   excZ
DBAPIErrorprintsysstderr)r   r@   r;   tableexr    r    r!   r&      sD    




	

z TablesTest._teardown_each_tablesc                 C  sF   | j rt| j| j | jdkr*| | j d | j_| jd k	rBd | _d S r6   )r,   r   r)   r3   run_dispose_binddispose_bindrun_setup_bindr5   r    r    r!   r      s    

z'TablesTest._teardown_once_metadata_bindc                 C  s   t jS r   )r   dbr5   r    r    r!   r2      s    zTablesTest.setup_bindc                 C  s*   t |dr|  nt |dr&|  d S )Ndisposeclose)hasattrrY   rZ   )r   r3   r    r    r!   rV      s    


zTablesTest.dispose_bindc                 C  s   d S r   r    )r   metadatar    r    r!   r=      s    zTablesTest.define_tablesc                 C  s   i S r   r    r5   r    r    r!   fixtures   s    zTablesTest.fixturesc                 C  s   d S r   r    )r   
connectionr    r    r!   r:      s    zTablesTest.insert_datac                 C  s   |  | j|| d S r   )Zassert_sql_countr3   )r   countfnr    r    r!   
sql_count_   s    zTablesTest.sql_count_c                 C  s   |  | j|| d S r   )Z
assert_sqlr3   )r   Z	callable_Z
statementsr    r    r!   sql_eq_   s    zTablesTest.sql_eq_c              
     s   i i   }|    D ]F\}t|dk r,qttr@| j |d  < |dd |< qt| jj D ]V\}dkrqn krqn| j	
 *}|  fdd| D  W 5 Q R X qndS )z4Insert rows as represented by the fixtures() method.r   r   r   Nc                   s   g | ]}t t  |qS r    )dictzip)rA   Zcolumn_valuesheadersrS   r    r!   rD      s   z-TablesTest._load_fixtures.<locals>.<listcomp>)r]   itemslen
isinstancestrr0   r   r)   rL   r3   r9   rM   insert)r   rowsdatarC   r;   r    re   r!   r8      s,    



zTablesTest._load_fixtures)$__name__
__module____qualname__rW   r+   r,   r-   rJ   rU   r3   r)   r0   r/   r1   r   fixturer"   r(   propertyr*   classmethodr   r   r   r$   r%   r&   r   r2   rV   r=   r]   r:   ra   rb   r8   r    r    r    r!   r      sT   






)





r   c                   @  s"   e Zd Zejddddd ZdS )NoCacheTr#   r   c                 c  s"   t jj}d t j_d V  |t j_d S r   )r   rX   Z_compiled_cache)r   _cacher    r    r!   _disable_cache   s    zNoCache._disable_cacheN)rn   ro   rp   r   rq   rv   r    r    r    r!   rt      s   rt   c                   @  s8   e Zd Zejdd Zdd Zejddddd	 Z	d
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   )ry   addr   listen)r   targetnamer`   kwr    r    r!   event_listen   s    zRemovesEvents.event_listenTr#   r   c                 c  s    d V  | j D ]}tj|  qd S r   )ry   r   remove)r   keyr    r    r!   _remove_events   s    
zRemovesEvents._remove_eventsN)
rn   ro   rp   r   Zmemoized_propertyry   r   r   rq   r   r    r    r    r!   rw      s
   
rw   c                   @  s:   e Zd Zd ZZdZdZedZ	dd Z
edd ZdS )	ComputedReflectionFixtureTestNT)Zcomputed_columnsZtable_reflectionz[\[\]\(\)\s`'\"]*c                 C  s   | j d| S )N )regexpsublower)r   textr    r    r!   	normalize  s    z'ComputedReflectionFixtureTest.normalizec           	      C  sx  ddl m} ddl m} ddlm} ddlm} ddlm} |d||d|d	d
|d||d||d|d|dd |d||d|d	d
|d||d||d}|jjj	r|d||d|d	d
|d||d||dt
jd}|jjj	r(||d||ddd |jjj	r(||d||ddd |jjj	rt||d||dd	d |jjj	rt||d||dd	d d S )Nr   )Integer)testing)Column)Computed)TableZcomputed_default_tableidT)Zprimary_keynormalZcomputed_colznormal + 42Zwith_defaultZ42)Zserver_defaultZcomputed_column_tableZcomputed_no_flagznormal / 42)schemaZcomputed_virtualz
normal + 2F)Z	persistedz
normal / 2Zcomputed_storedznormal - 42znormal * 42)r   r   r   r   r   r   r   requiresZschemasrI   r   Ztest_schemaZcomputed_columns_virtualappend_columnZcomputed_columns_stored)	r   r\   r   r   r   r   r   rB   t2r    r    r!   r=     sz    	
	



z+ComputedReflectionFixtureTest.define_tables)rn   ro   rp   r-   rJ   Z__backend____requires__recompiler   r   rs   r=   r    r    r    r!   r     s   
r   c                   @  s$   e Zd Zdd Zdd Zdd ZdS )CacheKeyFixturec                 C  s   |  }|  }|d kr6|jds(t|d kstnNt|j|j tt|jt|j t|j|jD ]\}}|j	||dshtqh||fS )Nnocachecompare_values)
_generate_cache_key_annotationsgetr.   r   r   hashrd   
bindparamscompare)r   abr   a_keyb_keya_paramb_paramr    r    r!   _compare_equalX  s    zCacheKeyFixture._compare_equalc                 C  s  | }| }t tt|dD ]\}}||krX| || || |\}}|d krVq n||  }||  }|d ks|d kr|d kr|| jdst|d kr || jds tq |j	|j	krt
|j|jD ]\}	}
|	j|
|ds qqt|j	|j	 nt|j	|j	 t|| tr t|| tr g }g }t|| D ]}|jdkrD|| qDt|| D ]}|jdkrp|| qptt|jdd dtt|dd d tt|jd	d dtt|d
d d q d S )Nr   r   r   Z	bindparamc                 S  s   | j S r   r   r   r    r    r!   <lambda>      z8CacheKeyFixture._run_cache_key_fixture.<locals>.<lambda>r   c                 S  s   | j S r   r   r   r    r    r!   r     r   c                 S  s   | j S r   r   r   r    r    r!   r     r   c                 S  s   | j S r   r   r   r    r    r!   r     r   )	itertoolscombinations_with_replacementrangerh   r   r   r   r   r.   r   rd   r   r   r	   ri   r   r   ZiterateZ__visit_name__appendr   sortedr   Zunique_list)r   rq   r   case_acase_br   r   r   r   r   r   Zassert_a_paramsZassert_b_paramselemr    r    r!   _run_cache_key_fixtureh  sx    
        z&CacheKeyFixture._run_cache_key_fixturec                 C  sD   | }| }t tt|dD ]\}}| || || | q d S )Nr   )r   r   r   rh   r   )r   rq   r   r   r   r   r   r    r    r!   _run_cache_key_equal_fixture  s    
 z,CacheKeyFixture._run_cache_key_equal_fixtureN)rn   ro   rp   r   r   r   r    r    r    r!   r   W  s   Kr   Fc                   sJ   | j }|j| jG dd d  fddfdd}|| _d S )Nc                   @  s,   e Zd ZdZdd Zedd Zdd ZdS )	z.insertmanyvalues_fixture.<locals>.RandomCursorcursorc                 S  s
   || _ d S r   r   )r   r   r    r    r!   __init__  s    z7insertmanyvalues_fixture.<locals>.RandomCursor.__init__c                 S  s   | j jS r   )r   descriptionr'   r    r    r!   r     s    z:insertmanyvalues_fixture.<locals>.RandomCursor.descriptionc                 S  s    | j  }t|}t| |S r   )r   fetchalllistrandomshuffle)r   rl   r    r    r!   r     s    

z7insertmanyvalues_fixture.<locals>.RandomCursor.fetchallN)rn   ro   rp   	__slots__r   rr   r   r   r    r    r    r!   RandomCursor  s
   
r   c                 3  sB   r |}| |||||D ]}r6|j r6td |V  qd S )Nz)Batches were downgraded for sorted INSERT)Zis_downgradedr   warn)r^   r   Z	statement
parametersZgeneric_setinputsizescontextbatch)r   orig_dialectrandomize_rowswarn_on_downgradedr    r!   !_deliver_insertmanyvalues_batches  s    

zCinsertmanyvalues_fixture.<locals>._deliver_insertmanyvalues_batchesc              
     s4   t jj| d d | |W  5 Q R  S Q R X d S )Nr   )new)r   patchobject)dialectr   )r   	orig_connr    r!   _exec_insertmany_context  s    z:insertmanyvalues_fixture.<locals>._exec_insertmany_context)r   r   r   )r^   r   r   r   r   r    )r   r   r   r   r   r   r!   insertmanyvalues_fixture  s    r   )FF) 
__future__r   r   r   r   rQ   Z
sqlalchemyr4   baser   r   r   r   Z
assertionsr   r	   r   r
   r   r   r   r   sqlr   Zsql.elementsr   r   rt   rw   r   r   r   r    r    r    r!   <module>   s4    Q	Pg   