o
    y¬´\V  ã                   @   sv   d Z 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m	Z	 da
ejdkZG dd„ de	ƒZdS )	z¹Enhance nose with extra options and behaviors for running SQLAlchemy tests.

Must be run via ./sqla_nose.py so that it is imported in the expected
way (e.g. as a package-less import).

é    Né   )Úplugin_base)ÚPlugin)é   r   c                       s~   e Zd ZdZdZdZejfdd„Z‡ fdd„Z	dd	„ Z
d
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z‡  ZS )ÚNoseSQLAlchemyTÚsqla_testingéd   c                    s6   t  | ||¡ |j‰ ‡ fdd„}t |¡ t ¡  d S )Nc                    sD   |  dd ¡p|  dd ¡‰ ˆ r‡ fdd„}||d< ˆ| fi |¤Ž d S )NÚcallbackÚzeroarg_callbackc                    s   ˆ |||ƒ d S ©N© )ÚoptionÚopt_strÚvalueÚparser©Ú	callback_r   úV/var/www/html/env/lib/python3.10/site-packages/sqlalchemy/testing/plugin/noseplugin.pyÚwrap_2   s   z:NoseSQLAlchemy.options.<locals>.make_option.<locals>.wrap_)Úpop)ÚnameÚkwr   ©Úoptr   r   Úmake_option,   s   ÿz+NoseSQLAlchemy.options.<locals>.make_option)r   ÚoptionsÚ
add_optionr   Úsetup_optionsÚread_config)Úselfr   Úenvr   r   r   r   r   (   s
   
zNoseSQLAlchemy.optionsc                    s8   t t| ƒ ||¡ t |¡ t |j¡ t tj	¡ d S r   )
Úsuperr   Ú	configurer   Ú	pre_beginÚset_coverage_flagÚenable_plugin_coverageÚset_skip_testÚnoseÚSkipTest)r   r   Úconf©Ú	__class__r   r   r"   ;   s   
zNoseSQLAlchemy.configurec                 C   s   ddl ma t ¡  d S )Nr   )Úfixtures)Úsqlalchemy.testingr,   r   Ú
post_begin)r   r   r   r   ÚbeginC   s   zNoseSQLAlchemy.beginc                 C   ó   dS )NÚ r   ©r   Útestr   r   r   ÚdescribeTestI   ó   zNoseSQLAlchemy.describeTestc                 C   r0   )NFr   )r   Úfnr   r   r   ÚwantFunctionL   r5   zNoseSQLAlchemy.wantFunctionc                 C   s0   t rt|jdƒs
dS |jj}n|j}t ||¡S )NÚclsF)Úpy3kÚhasattrÚ__self__r8   Úim_classr   Úwant_method)r   r6   r8   r   r   r   Ú
wantMethodO   s   
zNoseSQLAlchemy.wantMethodc                 C   s
   t  |¡S r   )r   Ú
want_class)r   r8   r   r   r   Ú	wantClassX   s   
zNoseSQLAlchemy.wantClassc                 C   s4   t |jdƒsd S t ||jjj|jj|jjj¡ d S )Nr8   )r:   r3   r   Úbefore_testr8   Ú
__module__ÚmethodÚ__name__r2   r   r   r   Ú
beforeTest[   s   üzNoseSQLAlchemy.beforeTestc                 C   s   t  |¡ d S r   )r   Ú
after_testr2   r   r   r   Ú	afterTeste   s   zNoseSQLAlchemy.afterTestc                 C   ó(   t |tƒrt|tjƒsd S t |¡ d S r   )Ú
isinstanceÚtypeÚ
issubclassr,   ÚTestBaser   Ústart_test_class©r   Úctxr   r   r   ÚstartContexth   ó   zNoseSQLAlchemy.startContextc                 C   rH   r   )rI   rJ   rK   r,   rL   r   Ústop_test_classrN   r   r   r   ÚstopContextm   rQ   zNoseSQLAlchemy.stopContext)rD   rB   Ú__qualname__Úenabledr   ÚscoreÚosÚenvironr   r"   r/   r4   r7   r>   r@   rE   rG   rP   rS   Ú__classcell__r   r   r*   r   r   "   s    	
r   )Ú__doc__Úsqla_plugin_baser   ÚImportErrorr1   rW   Úsysr'   Únose.pluginsr   r,   Úversion_infor9   r   r   r   r   r   Ú<module>   s   þ
