o
    y¬´\v  ã                   @   s   zd dl ZW n ey   ddlmZ Y nw d dlZd dlZd dlZd dlZd dlZzd dl	Z	dZ
W n ey=   dZ
Y nw dd„ Zdd	„ Zd
d„ Zdd„ Ze
r\d dlZdd„ Zdd„ Zdd„ Zdd„ Zdadd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ ZdS )"é    Né   )Úplugin_baseTFc                    s,   |   d¡‰ ‡ fdd„}t |¡ t ¡  d S )NÚ
sqlalchemyc                    st   |  dd ¡‰ˆrG ‡fdd„dtjƒ‰ ˆ |d< |  dd ¡‰ˆr/G ‡ ‡fdd„dtjƒ‰ ˆ |d< ˆj| fi |¤Ž d S )NÚcallbackc                       s   e Zd Z	d‡ fdd„	ZdS )ú=pytest_addoption.<locals>.make_option.<locals>.CallableActionNc                    ó   ˆ |||ƒ d S ©N© ©ÚselfÚparserÚ	namespaceÚvaluesÚoption_string©Ú	callback_r	   úX/var/www/html/env/lib/python3.10/site-packages/sqlalchemy/testing/plugin/pytestplugin.pyÚ__call__   ó   úFpytest_addoption.<locals>.make_option.<locals>.CallableAction.__call__r   )Ú__name__Ú
__module__Ú__qualname__r   r	   r   r	   r   ÚCallableAction   s    ÿr   ÚactionÚzeroarg_callbackc                       s6   e Zd Z			d‡‡ fdd„	Z	d‡fdd„	Z‡  ZS )	r   FNc              	      s"   t ˆ | ƒj||dd|||d� d S )Nr   T)Úoption_stringsÚdestÚnargsÚconstÚdefaultÚrequiredÚhelp)ÚsuperÚ__init__)r   r   r   r    r!   r"   )r   Ú	__class__r	   r   r$   *   s   

ùzFpytest_addoption.<locals>.make_option.<locals>.CallableAction.__init__c                    r   r   r	   r
   )r   r	   r   r   <   r   r   )FFNr   )r   r   r   r$   r   Ú__classcell__r	   )r   r   )r%   r   r   )   s    úÿ)ÚpopÚargparseÚActionÚ	addoption)ÚnameÚkw©Úgroup)r   r   r   r   Úmake_option   s   z%pytest_addoption.<locals>.make_option)Úgetgroupr   Úsetup_optionsÚread_config)r   r/   r	   r-   r   Úpytest_addoption   s   

+r3   c                 C   s„   t | dƒrt | j¡ t | jd ¡ n| jjr'tj 	| jj¡r't 
| jj¡ t | j¡ t tt| jddƒƒ¡ t tjj¡ d S )NÚ
slaveinputÚfollower_identÚ
cov_sourceF)Úhasattrr   Ú!restore_important_follower_configr4   Úconfigure_followerÚoptionÚwrite_identsÚosÚpathÚexistsÚremoveÚ	pre_beginÚset_coverage_flagÚboolÚgetattrÚset_skip_testÚpytestÚskipÚ	Exception)Úconfigr	   r	   r   Úpytest_configureI   s   
ÿÿrI   c                 C   ó   t  ¡  d S r   )r   Ú
post_begin©Úsessionr	   r	   r   Úpytest_sessionstart\   ó   rN   c                 C   rJ   r   )r   Úfinal_process_cleanuprL   r	   r	   r   Úpytest_sessionfinish`   rO   rQ   c                 C   sH   t  | j¡ dt ¡ jdd…  | jd< ddlm} | | jd ¡ d S )Nztest_%sr   é   r5   ©Ú	provision)	r   Ú!memoize_important_follower_configr4   ÚuuidÚuuid4ÚhexÚsqlalchemy.testingrT   Úcreate_follower_db)ÚnoderT   r	   r	   r   Úpytest_configure_nodeg   s   r\   c                 C   s    ddl m} | | jd ¡ d S )Nr   rS   r5   )rY   rT   Údrop_follower_dbr4   )r[   ÚerrorrT   r	   r	   r   Úpytest_testnodedownr   s   r_   c                 C   sü   t  t¡}dd„ |D ƒ|d d …< tdd„ |D ƒƒ}|D ].}t |j|jj¡D ]"}||jurH||j }t	j
|j|jjd� ¡ D ]	}| | ¡ ¡ q>q&qg }	|D ]!}
|
jj|v rj|	 ||
jj ¡ g ||
jj d d …< qN|	 |
¡ qNt|	dd„ d�|d d …< d S )	Nc                 S   s.   g | ]}t |jtjƒr|jjj d ¡s|‘qS )Ú_)Ú
isinstanceÚparentrE   ÚInstancer+   Ú
startswith©Ú.0Úitemr	   r	   r   Ú
<listcomp>„   s    ýüÿz1pytest_collection_modifyitems.<locals>.<listcomp>c                 s   s   � | ]}|j V  qd S r   ©rb   re   r	   r	   r   Ú	<genexpr>Š   s   € z0pytest_collection_modifyitems.<locals>.<genexpr>ri   c                 S   s   | j j j j| j j j| jfS r   )rb   r+   ©rg   r	   r	   r   Ú<lambda>£   s   
ýz/pytest_collection_modifyitems.<locals>.<lambda>)Úkey)ÚcollectionsÚdefaultdictÚlistÚsetr   Úgenerate_sub_testsÚclsrb   ÚmodulerE   ÚClassr   ÚcollectÚextendÚappendÚsorted)rM   rH   ÚitemsÚrebuilt_itemsÚtest_classesÚ
test_classÚsub_clsÚlist_ÚinstÚnewitemsrg   r	   r	   r   Úpytest_collection_modifyitemsx   s:   
þ
ÿ


ÿþ€÷þr‚   c                 C   sX   t  |¡rt |¡rtj|| d�S t  |¡r*t| tjƒr*t 	| j
|¡r*tj|| d�S g S )Nri   )ÚinspectÚisclassr   Ú
want_classrE   ru   Ú
isfunctionra   rc   Úwant_methodrs   ÚFunction)Ú	collectorr+   Úobjr	   r	   r   Úpytest_pycollect_makeitem«   s   ÿ
þýr‹   c                    sR   t ˆ tjƒsd S td u r#tˆ jjƒ ˆ jja‡ fdd„}ˆ jj |¡ tˆ ƒ d S )Nc                      s   t ˆ jjƒ d ad S r   )Úclass_teardownrb   Ú_current_classr	   rk   r	   r   ÚfinalizeÌ   s   z&pytest_runtest_setup.<locals>.finalize)ra   rE   rˆ   r�   Úclass_setuprb   ÚaddfinalizerÚ
test_setup)rg   rŽ   r	   rk   r   Úpytest_runtest_setup»   s   r’   c                 C   s   t | ƒ d S r   )Útest_teardownrk   r	   r	   r   Úpytest_runtest_teardownÖ   s   r”   c                 C   s    t  | | jjj| jj| j¡ d S r   )r   Úbefore_testrb   rt   r   rs   r+   rk   r	   r	   r   r‘   Þ   s   ÿr‘   c                 C   s   t  | ¡ d S r   )r   Ú
after_testrk   r	   r	   r   r“   ä   s   r“   c                 C   ó   t  | j¡ d S r   )r   Ústart_test_classrs   rk   r	   r	   r   r�   è   ó   r�   c                 C   r—   r   )r   Ústop_test_classrs   rk   r	   r	   r   rŒ   ì   r™   rŒ   )Úsqla_plugin_baser   ÚImportErrorÚ r(   rn   rƒ   r<   rE   ÚxdistÚ	has_xdistr3   rI   rN   rQ   rV   r\   r_   r‚   r‹   r�   r’   r”   r‘   r“   r�   rŒ   r	   r	   r	   r   Ú<module>   sB    þÿ23