o
    Šåg>  ã                   @  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©ÚautouseÚscopec                 c  s2   � | 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/flaskapp/venv/lib/python3.10/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  ó   | j S r   )Ú_tables_metadatar(   r!   r!   r"   Útables_test_metadataM   ó   zTablesTest.tables_test_metadatac                 C  sX   | j dkr| jdkrd| _| jdv sJ ‚tƒ | _tƒ | _tƒ | _|  ¡ | _t	 
¡ | _d S )Nr   r   )r   N)Úrun_define_tablesÚrun_create_tablesÚrun_insertsr
   ÚotherÚtablesÚ	sequencesÚ
setup_bindÚbindÚsaÚMetaDatar+   ©r    r!   r!   r"   r   Q   s   


zTablesTest._init_classc                 C  óP   | j dkr&|  ¡  | j ¡ �}|  |¡ W d   ƒ d S 1 sw   Y  d S d S ©Nr   ©r0   Ú_load_fixturesr5   ÚbeginÚinsert_data)r    Úconnr!   r!   r"   r   _   s   
"ÿþzTablesTest._setup_once_insertsc                 C  sV   | j dkr)|  | j¡ | jdkr| j | j¡ | j | jj¡ | j | jj	¡ d S d S r:   ©
r.   Údefine_tablesr+   r/   Ú
create_allr5   r2   Úupdater3   Ú
_sequencesr8   r!   r!   r"   r   f   s   

ûzTablesTest._setup_once_tablesc                 C  sr   | j dkr)|  | j¡ | jdkr| j | j¡ | j | jj¡ | j | jj	¡ d S | jdkr7| j | j¡ d S d S ©Nr   r@   r(   r!   r!   r"   r%   o   s   


ÿzTablesTest._setup_each_tablesc                 C  r9   rE   r;   )r   r?   r!   r!   r"   r&   y   s   
"ÿþzTablesTest._setup_each_insertsc                 C  sr  | j dkr| j ¡  | jdkrt| j| jƒ | j ¡  n| jdkr(t| j| jƒ ttj	ddƒ}|r4|j
}| j dkr³| jdkrµ| jdkr·| j ¡ �a}tdd„ t| jj ¡ ƒD ƒƒD ]H}z'|ry| ¡ � | | ¡ ¡ W d   ƒ n1 ssw   Y  n| | ¡ ¡ W qX tjjy  } ztd||f tjd� W Y d }~qXd }~ww W d   ƒ d S 1 s¬w   Y  d S d S d S d S )Nr   Ú
savepointsFc                 S  s   g | ]
\}}|d u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.   r2   Úclearr/   r   r+   r5   Úgetattrr   ÚrequirementsÚenabledÚrun_deletesr=   Úreversedr   ÚvaluesÚbegin_nestedÚexecuteÚdeleter6   ÚexcÚ
DBAPIErrorÚprintÚsysÚstderr)r   rF   r?   ÚtableÚexr!   r!   r"   r'      sR   







ÿþÿ	
ÿ€€
þ€ÿñ"ÿüz TablesTest._teardown_each_tablesc                 C  sJ   | j r
t| j| jƒ | jdkr|  | j¡ d | j_| jd ur#d | _d S d S r:   )r/   r   r+   r5   Úrun_dispose_bindÚdispose_bindÚrun_setup_bindr8   r!   r!   r"   r   ¨   s   


ÿz'TablesTest._teardown_once_metadata_bindc                 C  s   t jS r   )r   Údbr8   r!   r!   r"   r4   µ   r-   zTablesTest.setup_bindc                 C  s0   t |dƒr| ¡  d S t |dƒr| ¡  d S d S )NÚdisposeÚclose)Úhasattrra   rb   )r    r5   r!   r!   r"   r^   ¹   s
   

ÿzTablesTest.dispose_bindc                 C  ó   d S r   r!   )r    Úmetadatar!   r!   r"   rA   À   ó   zTablesTest.define_tablesc                 C  s   i S r   r!   r8   r!   r!   r"   ÚfixturesÄ   rf   zTablesTest.fixturesc                 C  rd   r   r!   )r    Ú
connectionr!   r!   r"   r>   È   rf   zTablesTest.insert_datac                 C  s   |   | j||¡ d S r   )Úassert_sql_countr5   )r   ÚcountÚfnr!   r!   r"   Ú
sql_count_Ì   ó   zTablesTest.sql_count_c                 C  s   |   | j||¡ d S r   )Ú
assert_sqlr5   )r   Ú	callable_Ú
statementsr!   r!   r"   Úsql_eq_Ï   rm   zTablesTest.sql_eq_c              	     sÞ   i i ‰ }|   ¡  ¡ D ]#\‰}t|ƒdk rqtˆtƒr | jˆ ‰|d ˆ ˆ< |dd… |ˆ< qt| jj ¡ ƒD ]5\‰}ˆdu r@q7ˆˆ vrEq7| j	 
¡ �}| ˆ ¡ ‡ ‡fdd„|ˆ D ƒ¡ W d  ƒ n1 sgw   Y  q7dS )z4Insert rows as represented by the fixtures() method.r   r   r   Nc                   s   g | ]}t tˆ ˆ |ƒƒ‘qS r!   )ÚdictÚzip)rG   Úcolumn_values©Úheadersr[   r!   r"   rJ   ç   s    ÿÿz-TablesTest._load_fixtures.<locals>.<listcomp>)rg   ÚitemsÚlenÚ
isinstanceÚstrr2   r   r+   rR   r5   r=   rT   Úinsert)r    ÚrowsÚdatarI   r?   r!   ru   r"   r<   Ò   s2   



ÿþþÿ€ùzTablesTest._load_fixtures)$Ú__name__Ú
__module__Ú__qualname__r_   r.   r/   r0   rP   r]   r5   r+   r2   r1   r3   r   Úfixturer#   r)   Úpropertyr,   Úclassmethodr   r   r   r%   r&   r'   r   r4   r^   rA   rg   r>   rl   rq   r<   r!   r!   r!   r"   r      sV    






)





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   r`   Ú_compiled_cache)r   Ú_cacher!   r!   r"   Ú_disable_cacheï   s
   €zNoCache._disable_cacheN)r~   r   r€   r   r�   r‡   r!   r!   r!   r"   r„   î   s    r„   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ø   r-   zRemovesEvents._event_fnsc                 K  s,   | j  |||f¡ tj|||fi |¤Ž d S r   )rŠ   Úaddr   Úlisten)r   ÚtargetÚnamerk   Úkwr!   r!   r"   Úevent_listenü   s   zRemovesEvents.event_listenTr$   r   c                 c  s"   � d V  | j D ]}tj|Ž  qd S r   )rŠ   r   Úremove)r   Úkeyr!   r!   r"   Ú_remove_events   s
   €
ÿzRemovesEvents._remove_eventsN)
r~   r   r€   r   Úmemoized_propertyrŠ   r�   r   r�   r“   r!   r!   r!   r"   rˆ   ÷   s    
rˆ   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)Úcomputed_columnsÚ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	rn|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	r¸| |d||dd	d�ƒ¡ |jjj	rº| |d||dd	d�ƒ¡ d S d S d S )Nr   )ÚInteger)Útesting)ÚColumn)ÚComputed)ÚTableÚcomputed_default_tableÚidT)Úprimary_keyÚnormalÚcomputed_colznormal + 42Úwith_defaultÚ42)Úserver_defaultÚcomputed_column_tableÚcomputed_no_flagznormal / 42)ÚschemaÚcomputed_virtualz
normal + 2F)Ú	persistedz
normal / 2Úcomputed_storedznormal - 42znormal * 42)r˜   rž   rŸ   r­   r    r¡   r¢   ÚrequiresÚschemasrO   r   Útest_schemaÚcomputed_columns_virtualÚappend_columnÚcomputed_columns_stored)	r    re   rž   rŸ   r    r¡   r¢   rH   Út2r!   r!   r"   rA     s~   ú	û
ú
	
ýÿ

ýÿ

ýÿ

ýÿ÷z+ComputedReflectionFixtureTest.define_tables)r~   r   r€   r0   rP   Ú__backend__Ú__requires__ÚreÚcompiler™   r�   rƒ   rA   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 u r|j d¡sJ ‚|d u sJ ‚||fS t|j|jƒ tt|jƒt|jƒƒ t|j|jƒD ]\}}|j||d�sDJ ‚q7||fS )NÚnocache©Úcompare_values)	Ú_generate_cache_keyÚ_annotationsÚgetr   r’   Úhashrs   Ú
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r+|  || || |¡\}}|d u r*qn[||  ¡ }||  ¡ }|d u s?|d u r\|d u rM|| j d¡sMJ ‚|d u r[|| j d¡s[J ‚q|j|jkrt	|j
|j
ƒD ]\}	}
|	j|
|d�sv nqit|j|jƒ nt|j|jƒ t|| tƒrêt|| tƒrêg }g }t || ¡D ]}|jdkr«| |¡ qŸt || ¡D ]}|jdkr¿| |¡ q³t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¾   Ú	bindparamc                 S  r*   r   ©r’   ©rÇ   r!   r!   r"   Ú<lambda>§  ó    z8CacheKeyFixture._run_cache_key_fixture.<locals>.<lambda>rÎ   c                 S  r*   r   rÎ   rÏ   r!   r!   r"   rÐ   ©  rÑ   c                 S  r*   r   rÎ   rÏ   r!   r!   r"   rÐ   ­  rÑ   c                 S  r*   r   rÎ   rÏ   r!   r!   r"   rÐ   ¯  rÑ   )Ú	itertoolsÚcombinations_with_replacementÚrangerx   rÌ   rÀ   rÁ   rÂ   r’   rs   rÄ   rÅ   r	   ry   r   r   ÚiterateÚ__visit_name__Úappendr   Úsortedr   Úunique_list)r   r�   r¿   Úcase_aÚcase_brÆ   rÇ   rÈ   rÉ   rÊ   rË   Úassert_a_paramsÚassert_b_paramsÚelemr!   r!   r"   Ú_run_cache_key_fixtureh  sv   ÿÿÿÿÿý
€ÿ

€

€ÿþÿþ€Àz&CacheKeyFixture._run_cache_key_fixturec                 C  sD   |ƒ }|ƒ }t  tt|ƒƒd¡D ]\}}|  || || |¡ qd S )Nr   )rÒ   rÓ   rÔ   rx   rÌ   )r   r�   r¿   rÚ   rÛ   rÆ   rÇ   r!   r!   r"   Ú_run_cache_key_equal_fixture³  s   ÿýz,CacheKeyFixture._run_cache_key_equal_fixtureN)r~   r   r€   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   r|   r!   r!   r"   rå   Ò  s   

z7insertmanyvalues_fixture.<locals>.RandomCursor.fetchallN)r~   r   r€   Ú	__slots__rã   r‚   rä   rå   r!   r!   r!   r"   ÚRandomCursorÄ  s    
rê   c                 3  sD   � ˆrˆ |ƒ}ˆ| |||||ƒD ]}ˆr|j rt d¡ |V  qd S )Nz)Batches were downgraded for sorted INSERT)Úis_downgradedr   Úwarn)rh   râ   Ú	statementÚ
parametersÚgeneric_setinputsizesÚcontextÚbatch)rê   Úorig_dialectÚrandomize_rowsÚwarn_on_downgradedr!   r"   Ú!_deliver_insertmanyvalues_batchesØ  s   €ú

õzCinsertmanyvalues_fixture.<locals>._deliver_insertmanyvalues_batchesc                   s@   t jj| dˆ d�� ˆ| |ƒW  d   ƒ S 1 sw   Y  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û   )rh   ró   rô   rù   rû   r!   )rê   rõ   rú   rò   ró   rô   r"   Úinsertmanyvalues_fixture½  s   
rü   )FF) Ú
__future__r   rÒ   rç   rº   rY   Ú
sqlalchemyr6   Úbaser   r˜   r   r   Ú
assertionsr   r	   r   r
   r   r   r­   r   Úsqlr   Úsql.elementsr   r   r„   rˆ   r•   r¼   rü   r!   r!   r!   r"   Ú<module>   s4    Q	Pgÿ