U
    ÌZjf  ã                   @   sÂ  zd dl ZW n  ek
r,   ddlmZ Y nX d dlZd dlZ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Zd dlZd dlZejdk ZerÆzd dlZW n  ek
rÄ   ddlmZ Y nX dd„ Zd	d
„ Zdaejdd�dd„ ƒZdd„ Zdd„ Zdd„ ZG dd„ deƒZdd„ Zdd„ Zdd„ Z d8dd„Z!d d!„ Z"da#d"d#„ Z$ej%dd$�d%d&„ ƒZ&d'd(„ Z'da(d)d*„ Z)ejd+d,�d-d.„ ƒZ*ejd/d,�d0d1„ ƒZ+d2d3„ Z,d4d5„ Z-G d6d7„ d7ej.ƒZ/dS )9é    Né   )Úplugin_base)Úupdate_wrapper)é   r   )Úreinvent_fixtures_py2kc                    s,   |   d¡‰ ‡ fdd„}t |¡ t ¡  d S )NZ
sqlalchemyc                    sp   |  dd ¡‰ˆr.G ‡fdd„dtjƒ‰ ˆ |d< |  dd ¡‰ˆr^G ‡ ‡fdd„dtjƒ‰ ˆ |d< ˆj| f|Ž d S )NÚcallbackc                       s   e Zd Zd‡ fdd„	ZdS )ú=pytest_addoption.<locals>.make_option.<locals>.CallableActionNc                    s   ˆ |||ƒ d S ©N© ©ÚselfÚparserÚ	namespaceÚvaluesÚoption_string©Ú	callback_r
   úi/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/sqlalchemy/testing/plugin/pytestplugin.pyÚ__call__&   s    úFpytest_addoption.<locals>.make_option.<locals>.CallableAction.__call__)N)Ú__name__Ú
__module__Ú__qualname__r   r
   r   r
   r   ÚCallableAction%   s    ÿr   ÚactionÚzeroarg_callbackc                       s.   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$   1   s    
ùzFpytest_addoption.<locals>.make_option.<locals>.CallableAction.__init__c                    s   ˆ |||ƒ d S r	   r
   r   )r   r
   r   r   C   s    r   )FFN)N)r   r   r   r$   r   Ú__classcell__r
   )r   r   )r%   r   r   0   s      ú ÿ)ÚpopÚargparseÚActionZ	addoption)ÚnameÚkw©Úgroup)r   r   r   r   Úmake_option!   s    z%pytest_addoption.<locals>.make_option)Zgetgroupr   Zsetup_optionsZread_config)r   r.   r
   r,   r   Úpytest_addoption   s    
+
r/   c                 C   s¦   | j  d¡r| j  tƒ ¡ t| dƒrBt | j¡ t | jd ¡ n&| j	j
rhtj | j	j
¡rht | j	j
¡ t | j	¡ t tt| j	ddƒƒ¡ t t¡ | j	jr¢dad S )NZxdistÚworkerinputÚfollower_identZ
cov_sourceFT)ZpluginmanagerZ	haspluginÚregisterÚ
XDistHooksÚhasattrr   Z!restore_important_follower_configr0   Zconfigure_followerÚoptionZwrite_identsÚosÚpathÚexistsÚremoveZ	pre_beginZset_coverage_flagÚboolÚgetattrZset_fixture_functionsÚPytestFixtureFunctionsÚdump_pyannotateÚDUMP_PYANNOTATE©Úconfigr
   r
   r   Úpytest_configureP   s     
ÿÿ
rA   FT)Úautousec                  c   s.   t rddlm}  |  ¡  d V  t r*|  ¡  d S )Nr   ©Úcollect_types)r>   Úpyannotate_runtimerD   ÚstartÚstoprC   r
   r
   r   Úcollect_types_fixturem   s    rH   c                 C   s   ddl m} | tj¡ d S ©Nr   ©Úasyncio)Úsqlalchemy.testingrK   Z_assume_asyncr   Z
post_begin)ÚsessionrK   r
   r
   r   Úpytest_sessionstartx   s    rN   c                 C   sB   ddl m} | tj¡ | jjjr>ddlm	} | 
| jjj¡ d S )Nr   rJ   rC   )rL   rK   Ú_maybe_async_provisioningr   Zfinal_process_cleanupr@   r5   r=   rE   rD   Z
dump_stats)rM   rK   rD   r
   r
   r   Úpytest_sessionfinish~   s
    
rP   c                    s>   | j jjr:ddlm} tj d¡‰ ‡ fdd„}|j|d� d S )Nr   rC   úlib/sqlalchemyc                    s<   t j t j | ¡¡} dt j | ˆ g¡kr,d S d| kr8d S | S )NrQ   Ztesting)r6   r7   ÚnormpathÚabspathÚ
commonpath)Úfilename©Zlib_sqlalchemyr
   r   Ú_filter�   s    ÿz)pytest_collection_finish.<locals>._filter)Zfilter_filename)	r@   r5   r=   rE   rD   r6   r7   rS   Zinit_types_collection)rM   rD   rW   r
   rV   r   Úpytest_collection_finish‰   s
    
rX   c                   @   s   e Zd Zdd„ Zdd„ ZdS )r3   c                 C   sX   ddl m} ddl m} t |j¡ dt ¡ jdd…  |jd< | 	|j
|jd ¡ d S )Nr   ©Ú	provisionrJ   ztest_%sé   r1   )rL   rZ   rK   r   Z!memoize_important_follower_configr0   ÚuuidÚuuid4ÚhexrO   Zcreate_follower_db)r   ÚnoderZ   rK   r
   r
   r   Úpytest_configure_nodež   s     ÿz XDistHooks.pytest_configure_nodec                 C   s0   ddl m} ddl m} | |j|jd ¡ d S )Nr   rY   rJ   r1   )rL   rZ   rK   rO   Zdrop_follower_dbr0   )r   r_   ÚerrorrZ   rK   r
   r
   r   Úpytest_testnodedown­   s     ÿzXDistHooks.pytest_testnodedownN)r   r   r   r`   rb   r
   r
   r
   r   r3   �   s   r3   c                    sØ   ddl m} t dd„ ¡‰dd„ |D ƒ|d d …< tdd„ |D ƒƒ‰‡ fd	d
„‰ ‡ ‡‡fdd„}| |¡ g }|D ]2}|j}|ˆkr˜| ˆ| |j ¡ qp| 	|¡ qpt
r¼|D ]}t |¡ q¬t|dd„ d�|d d …< d S )Nr   rJ   c                   S   s
   t  t¡S r	   )ÚcollectionsÚdefaultdictÚlistr
   r
   r
   r   Ú<lambda>Å   ó    z/pytest_collection_modifyitems.<locals>.<lambda>c                 S   s4   g | ],}|  tj¡d k	r|  tj¡j d¡s|‘qS )NÚ_)Ú	getparentÚpytestÚClassr*   Ú
startswith©Ú.0Úitemr
   r
   r   Ú
<listcomp>È   s   ýz1pytest_collection_modifyitems.<locals>.<listcomp>c                 s   s   | ]}|  tj¡V  qd S r	   )ri   rj   rk   rm   r
   r
   r   Ú	<genexpr>Ï   s     z0pytest_collection_modifyitems.<locals>.<genexpr>c                 3   s:   |   ¡ D ],}t|tjƒr.ˆ |ƒD ]
}|V  q q|V  qd S r	   )ÚcollectÚ
isinstancerj   Z	Collector)ÚelementZ
inst_or_fnÚel)rr   r
   r   rr   Ñ   s
    
z.pytest_collection_modifyitems.<locals>.collectc                     s|   ˆD ]r} t  | j| j¡D ]\}|| jk	rˆ| j }ttjdtjƒ}|  tj¡}ˆ ||j	|d�ƒD ]}||j
  |¡ q^qqd S )NÚfrom_parent©r*   Úparent)r   Zgenerate_sub_testsÚclsÚmoduler;   rj   rk   ri   ÚModuler   r*   Úappend)Z
test_classZsub_clsZper_cls_dictÚctorrz   Úfn©rr   Zrebuilt_itemsZtest_classesr
   r   Úsetup_test_classesÚ   s     ÿ

ÿz9pytest_collection_modifyitems.<locals>.setup_test_classesc                 S   s    |   tj¡j|   tj¡j| jfS r	   )ri   rj   r{   r*   rk   )ro   r
   r
   r   rf   þ   s    ý)Úkey)rL   rK   rc   rd   ÚsetrO   ry   Úextendr*   r|   Úpy2kr   Z"scan_for_fixtures_to_use_for_classÚsorted)rM   r@   ÚitemsrK   r€   Znewitemsro   Zcls_r
   r   r   Úpytest_collection_modifyitems¶   s0    ÿþ	
þr‡   c                    sŠ   t  |¡r\t ||¡r\ddlm} |jr0t|ƒ}tt	j
dt	j
ƒ‰‡ ‡fdd„tˆ j|ƒD ƒS t  |¡r‚ˆ jd k	r‚t ˆ j|¡r‚d S g S d S )Nr   r?   rv   c                    s   g | ]}ˆ|j ˆ d �‘qS )rw   )r   )rn   Zparametrize_cls©Ú	collectorr}   r
   r   rp     s   ÿz-pytest_pycollect_makeitem.<locals>.<listcomp>)ÚinspectÚisclassr   Z
want_classrL   r@   Ú	any_asyncÚ_apply_maybe_asyncr;   rj   rk   Ú_parametrize_clsrz   Ú
isfunctionry   Zwant_method)r‰   r*   Úobjr@   r
   rˆ   r   Úpytest_pycollect_makeitem  s     
þÿþýr‘   c                 C   s   t | dƒr| j} q t | ¡S )NÚ__wrapped__)r4   r’   rŠ   Úiscoroutinefunction©r~   r
   r
   r   Ú_is_wrapped_coroutine_function  s    
r•   c                    sÐ   ddl m‰  t| ƒ ¡ D ]†\}}t|ƒs2t|tƒrt|ddƒs| d¡rt	|ƒsd}t|tƒrh|j
}d}t‡ fdd„ƒ}||ƒ}|rŒt|ƒ}d|_t| ||ƒ q|rÌ|  ¡ d	d … D ]}|tkr´t|dƒ q´| S )
Nr   rJ   Ú_maybe_async_appliedFZtest_Tc                    s   ˆ j | f|ž|ŽS r	   )Ú_maybe_async©r~   ÚargsÚkwargsrJ   r
   r   Ú
make_async5  s    z&_apply_maybe_async.<locals>.make_asyncr   )rL   rK   Úvarsr†   Úcallablers   Úclassmethodr;   rl   r•   Ú__func__Ú_pytest_fn_decoratorr–   ÚsetattrÚmroÚobjectr�   )r�   Zrecurser*   ÚvalueZis_classmethodr›   Zdo_asyncry   r
   rJ   r   r�   &  s8    ÿÿ
þýü
r�   c                 C   sÚ   d|j kr|gS |j}g }tjdd„ |D ƒŽ D ]¦}i }tdd„ |D ƒ|ƒD ]>\}}|s^tdƒ‚t d|¡}t||jƒD ]\}	}
|
||	< qvqJd 	dd	„ |D ƒ¡}d
|j
|f }t t||f|¡}t| ||ƒ | |¡ q.|S )z6implement a class-based version of pytest parametrize.Ú_sa_parametrizec                 S   s   g | ]\}}|‘qS r
   r
   )rn   ÚargnameÚparamsr
   r
   r   rp   O  s     z$_parametrize_cls.<locals>.<listcomp>c                 S   s   g | ]}|d  ‘qS )r   r
   )rn   Z	_sa_paramr
   r
   r   rp   T  s     z*need argnames for class-based combinationsz,\s*rh   c                 s   s2   | ]*}|j  d ¡D ]}tt dd|¡ƒV  qqdS )ú-z\WÚ N)ÚidÚsplitÚstrÚreÚsub)rn   ÚparamÚtokenr
   r
   r   rq   [  s    þz#_parametrize_cls.<locals>.<genexpr>z%s_%s)Ú__dict__r¥   Ú	itertoolsÚproductÚzipÚ	TypeErrorr­   r«   r   Újoinr   ÚtypeÚ__new__r¡   r|   )rz   ry   r¥   ÚclassesZfull_param_setZcls_variablesr¦   r¯   Zargname_splitÚargÚvalZparametrized_namer*   Znewclsr
   r
   r   rŽ   F  s2    
ÿ ÿ
ürŽ   c                 C   s@   ddl m} t| tjƒr<td kr<| tj| j	¡ |  
tj¡ad S rI   )rL   rK   rs   rj   ÚFunctionÚ_current_classrO   r   Z!start_test_class_outside_fixturesry   ri   rk   ©ro   rK   r
   r
   r   Úpytest_runtest_setupl  s    
þr¿   )Zhookwrapperc              
   c   s  ddl m} ddlm} | tj| ¡ d V  td k	�r|d ksP| t	j
¡tk	�rd az¶z| tj| j¡ W nœ tk
�r } z|tjrô|jsšdtj f|_nZ|jd ràt|jd |ƒràt|jƒ}|d  dtj 7  < t|ƒ|_n| jdtjf7  _‚ W 5 d }~X Y nX W 5 d aX d S )Nr   rJ   )Ústring_typesz__Original test failure__:
éÿÿÿÿz
__Original test failure__:
z__Original test failure__)rL   rK   Zsqlalchemy.utilrÀ   r—   r   Z
after_testr½   ri   rj   rk   Ú_current_reportrO   Z stop_test_class_outside_fixturesry   Ú	ExceptionZfailedr™   Zlongreprtextrs   re   Útuple)ro   ZnextitemrK   rÀ   Úer™   r
   r
   r   Úpytest_runtest_teardown  sH    
þý ÿÿÿ
ÿÿþrÆ   c                 C   s,   ddl m} | tj| | jj| j| j¡ d S rI   )	rL   rK   r—   r   Zbefore_testrz   r   ry   r*   r¾   r
   r
   r   Úpytest_runtest_callµ  s    ûrÇ   c                 C   s   | j dkr| ad S )NÚcall)ÚwhenrÂ   )Úreportr
   r
   r   Úpytest_runtest_logreportÇ  s    
rË   Úclass)Úscopec                 c   sr   ddl m} | j}t|dƒr(| |j¡ tr6t | ¡ d V  trJt 	| ¡ t|dƒr`| |j
¡ | tj|¡ d S )Nr   rJ   Úsetup_test_classÚteardown_test_class)rL   rK   ry   r4   r—   rÎ   r„   r   Zrun_class_fixture_setupZrun_class_fixture_teardownrÏ   r   Zstop_test_class)ÚrequestrK   ry   r
   r
   r   Úsetup_class_methodsÍ  s    



rÑ   Úfunctionc                 c   sž   ddl m} | j}tr t | ¡ t|dƒr6| |j¡ t|dƒrL| |j	¡ d V  | t
j|¡ t|dƒrv| |j¡ t|dƒrŒ| |j¡ tršt | ¡ d S )Nr   rJ   Ú
setup_testÚsetUpÚtearDownÚteardown_test)rL   rK   Úinstancer„   r   Zrun_fn_fixture_setupr4   r—   rÓ   rÔ   r   Zafter_test_fixturesrÕ   rÖ   Zrun_fn_fixture_teardown)rÐ   rK   r   r
   r
   r   Úsetup_test_methodsä  s     





rØ   c                 C   s$   t jjdkrt | ¡S t | ¡S d S )Nr   )ÚsysÚversion_infoÚmajorrŠ   ÚgetfullargspecÚ
getargspecr”   r
   r
   r   rÝ   '  s    
rÝ   c                    s8   ddl m‰ ddlm‰ dd„ ‰ d	‡ ‡‡‡fdd„	}|S )
z:Port of langhelpers.decorator with pytest-specific tricks.r   )Úformat_argspec_plus)Úinspect_getfullargspecc                 S   s   t | |ƒ || S r	   )Úexec)ÚcodeÚenvÚfn_namer
   r
   r   Ú_exec_code_in_env4  s    
z/_pytest_fn_decorator.<locals>._exec_code_in_envr
   c                    s¤   ˆ| ƒ}|r|j  |¡ tdd| jd�}| ˆ|dd�¡ d| }ˆ |ˆ| dœ| jƒ}|szt| d| ƒj|_| |_t|| ƒS | j	|_	| j|_t
| d	ƒrœ| j|_|S d S )
NÚ__target_fnÚ	__orig_fn)rå   ræ   r*   F)ÚgroupedzPdef %(name)s(%(args)s):
    return %(__target_fn)s(%(__orig_fn)s, %(apply_kw)s)
)rå   ræ   rŸ   Ú
pytestmark)r™   rƒ   Údictr   Úupdater;   Ú__defaults__r’   r   r   r4   rè   )r~   Úadd_positional_parametersÚspecÚmetadatará   Z	decorated©rä   rÞ   rß   Útargetr
   r   Údecorate8  s6      ÿüÿ  ÿ

z&_pytest_fn_decorator.<locals>.decorate)r
   )Zsqlalchemy.util.langhelpersrÞ   Zsqlalchemy.util.compatrß   )rð   rñ   r
   rï   r   r    .  s
    "r    c                   @   sZ   e Zd Zdd„ Zdd„ Zdd„ eedd„ dœZd	d
„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )r<   c                 O   s   t jj||ŽS r	   )rj   ÚskiprÃ   )r   rº   r+   r
   r
   r   Úskip_test_exception^  s    z*PytestFixtureFunctions.skip_test_exceptionc                 C   s   t j dd¡S )NrÑ   rØ   )rj   ÚmarkZusefixtures©r   r
   r
   r   Úmark_base_test_classa  s     ÿz+PytestFixtureFunctions.mark_base_test_classc                 C   s   | S r	   r
   ©r�   r
   r
   r   rf   g  rg   zPytestFixtureFunctions.<lambda>c                 C   s   t | dƒr| jS t| ƒjS )Nr   )r4   r   r·   r÷   r
   r
   r   rf   j  s    ÿ)ÚiÚrÚsÚnc              
      sÐ  ddl m‰ tjjdkr@t|ƒdkrft|d dƒrft|d ƒ}n&t|ƒdkrft|d dƒrft|d ƒ}| dd¡‰‡fd	d
„}| dd¡}g }d‰|�r6| j	‰ t
jddd„ t|ƒD ƒžŽ }‡ fdd„t|ƒD ƒ}|D ]^‰tˆtƒsèˆf‰|ˆƒ\}}	||ƒdd… }
|	�rd‰| |
|	d ‡fdd„|D ƒ¡f¡ qÔnD|D ]>‰tˆtƒ�sPˆf‰|ˆƒ\}}	|	�rfd‰| ||	df¡ �q:g ‰|D ]6\}
}	}ˆ�rœ|
|	f7 }
tj|
d|iŽ}ˆ |¡ �q‚‡‡‡‡fdd„}|S )a  Facade for pytest.mark.parametrize.

        Automatically derives argument names from the callable which in our
        case is always a method on a class with positional arguments.

        ids for parameter sets are derived using an optional template.

        r   ©Ú
exclusionsr   r   Ú__next__ÚnextÚargnamesNc                    s<   g }g }| D ]&}t |ˆ jƒr(| |¡ q| |¡ q||fS r	   )rs   Úcompoundr|   )r™   ÚresultZgathered_exclusionsÚarü   r
   r   Ú_filter_exclusionsƒ  s    z?PytestFixtureFunctions.combinations.<locals>._filter_exclusionsÚid_Fc                 S   s   g | ]\}}|d kr|‘qS ))rû   rù   rú   r  r
   ©rn   ÚidxÚcharr
   r
   r   rp   š  s   þz7PytestFixtureFunctions.combinations.<locals>.<listcomp>c                    s*   g | ]"\}}|ˆ krt  |¡ˆ | f‘qS r
   )ÚoperatorÚ
itemgetterr  )Ú_combination_id_fnsr
   r   rp      s   þTr¨   c                 3   s   | ]\}}||ˆ ƒƒV  qd S r	   r
   )rn   ÚgetterZcomb_fn)rº   r
   r   rq   µ  s    z6PytestFixtureFunctions.combinations.<locals>.<genexpr>rª   c                    sª   t  | ¡r:ˆrtdƒ‚d| jkr&g | _| j ˆ ˆf¡ | S ˆ d krVt| ƒjdd … }nt 	dˆ ¡}ˆr”|dg7 }t
‡fdd„ƒ}dd	„ }|| d
d�} tj |ˆ¡| ƒS d S )Nz5exclusions not supported for class level combinationsr¥   r   z, *Ú_exclusionsc                    s4   |d }|r"ˆ   ¡ j|Ž }|| ƒ} | |dd… |ŽS )NrÁ   r   )r  Úadd)r~   r™   r+   r  Zexlurü   r
   r   Úcheck_exclusionså  s
    zOPytestFixtureFunctions.combinations.<locals>.decorate.<locals>.check_exclusionsc                 S   s   | j  d¡ d S )Nr  )r™   r|   )rí   r
   r
   r   Úprocess_metadataí  s    zOPytestFixtureFunctions.combinations.<locals>.decorate.<locals>.process_metadata)r  )rì   )rŠ   r‹   ÚNotImplementedErrorr±   r¥   r|   rÝ   r™   r­   r«   r    rj   rô   Zparametrize)r~   Z	_argnamesr  r  )r   rý   Úhas_exclusionsÚpytest_paramsr
   r   rñ   Ò  s,    
ÿ

 ÿz5PytestFixtureFunctions.combinations.<locals>.decorate)r   )rL   rý   rÙ   rÚ   rÛ   Úlenr4   re   r'   r  r	  r
  Ú	enumeraters   rÄ   r|   r¶   rj   r¯   )r   Zarg_setsr+   r  r  Ztobuild_pytest_paramsZ_arg_getterZfnsZ	fn_paramsZparam_exclusionsÚ
parametersr¯   rñ   r
   )r  rº   r   rý   r  r  r   Úcombinationso  sn    	 ÿþþ
þ
ÿýÿÿ
$z#PytestFixtureFunctions.combinationsc                 G   s    |d }t j|dd … d|iŽS )Nr   r   rª   )rj   r¯   )r   r  Úidentr
   r
   r   Úparam_identø  s    z"PytestFixtureFunctions.param_identc                    s|   ddl m‰ ddl m‰  t|ƒdkrFt|d ƒrF|d }|dd … }nd }tj|ˆŽ‰‡ ‡‡‡fdd„}|rt||ƒS |S d S )Nr   r?   rJ   r   c                    s6   ˆj rˆ  | ¡} tr*dˆkr*t | ˆ¡ nˆ| ƒ} | S )NrB   )rŒ   Z_maybe_async_wrapperr„   r   Zadd_fixturer”   ©rK   r@   Úfixturer+   r
   r   Úwrap  s    
z,PytestFixtureFunctions.fixture.<locals>.wrap)rL   r@   rK   r  r�   rj   r  )r   rº   r+   r~   r  r
   r  r   r  ü  s    zPytestFixtureFunctions.fixturec                 C   s   t j d¡S )NZPYTEST_CURRENT_TEST)r6   ÚenvironÚgetrõ   r
   r
   r   Úget_current_test_name*  s    z,PytestFixtureFunctions.get_current_test_namec                    s$   ddl m‰  t‡ fdd„ƒ}||ƒS )Nr   rJ   c                    s   ˆ j | f|ž|Ž d S r	   )Z_run_coroutine_functionr˜   rJ   r
   r   rñ   0  s    z3PytestFixtureFunctions.async_test.<locals>.decorate)rL   rK   r    )r   r~   rñ   r
   rJ   r   Ú
async_test-  s    z!PytestFixtureFunctions.async_testN)r   r   r   ró   rö   Úreprr¬   r  r  r  r  r  r   r
   r
   r
   r   r<   ]  s   ü	 
.r<   )T)0Zsqla_plugin_baser   ÚImportErrorr©   r(   rc   Ú	functoolsr   rŠ   r²   r	  r6   r­   rÙ   r\   rj   rÚ   r„   Zsqla_reinvent_fixturesr   r/   rA   r>   r  rH   rN   rP   rX   r£   r3   r‡   r‘   r•   r�   rŽ   r½   r¿   ZhookimplrÆ   rÇ   rÂ   rË   rÑ   rØ   rÝ   r    ZFixtureFunctionsr<   r
   r
   r
   r   Ú<module>   s`   
2


P
 #

5



B/