a
    f	gZ!  ã                   @   s  d 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	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eddœdd„Ze	jdddd„ ƒZeddœdd„Zeeeeef  dœdd„Zeddœdd„ZdgZeee dœdd„Zeee dœdd„ZdS ) z3Version info, help messages, tracing configuration.é    N)ÚAction)ÚList)ÚOptional)ÚUnion)ÚConfig)ÚExitCode)Ú	PrintHelp)ÚParserc                       s,   e Zd ZdZd‡ fdd„	Zd	dd„Z‡  ZS )
Ú
HelpActiona}  An argparse Action that will raise an exception in order to skip the
    rest of the argument parsing when --help is passed.

    This prevents argparse from quitting due to missing required arguments
    when any are defined, for example by ``pytest_addoption``.
    This is similar to the way that the builtin argparse --help option is
    implemented by raising SystemExit.
    NFc                    s   t ƒ j||d|d|d d S )NTr   )Úoption_stringsÚdestÚconstÚdefaultÚnargsÚhelp)ÚsuperÚ__init__)Úselfr   r   r   r   ©Ú	__class__© úU/var/www/html/llm_bihealth/app/venv/lib/python3.9/site-packages/_pytest/helpconfig.pyr      s    úzHelpAction.__init__c                 C   s&   t || j| jƒ t|jddƒr"t‚d S )NZafter_preparseF)Úsetattrr   r   ÚgetattrÚ_parserr   )r   ÚparserÚ	namespaceÚvaluesÚoption_stringr   r   r   Ú__call__$   s    zHelpAction.__call__)NFN)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Ú__classcell__r   r   r   r   r
      s   	
r
   )r   Úreturnc              	   C   sŽ   |   d¡}|jddddddd |jd	d
tddd |jdddg ddd |jdddddd |jddddddd d! |jd"d#d$dd%d& d S )'NZdebugconfigz	--versionz-VÚcountr   ÚversionzoDisplay pytest version and information about plugins. When given twice, also display information about plugins.)Úactionr   r   r   z-hz--helpr   z(Show help message and configuration info)r(   r   r   z-pÚappendZpluginsÚnamez‰Early-load given plugin module name or entry point (multi-allowed). To avoid loading of plugins, use the `no:` prefix, e.g. `no:doctest`.)r(   r   r   Úmetavarr   z--traceconfigz--trace-configÚ
store_trueFz)Trace considerations of conftest.py files)r(   r   r   z--debugÚstoreú?zpytestdebug.logÚdebugZDEBUG_FILE_NAMEzšStore internal tracing debug information in this log file. This file is opened with 'w' and truncated as a result, care advised. Default: pytestdebug.log.)r(   r   r   r   r+   r   z-oz--override-iniZoverride_iniz^Override ini option with "option=value" style, e.g. `-o xfail_strict=True -o cache_dir=cache`.)r   r(   r   )ZgetgroupZ	addoptionZ
_addoptionr
   )r   Úgroupr   r   r   Úpytest_addoption,   s^    
ú	ûú
ûùûr1   T)Zhookwrapperc               	   #   s¨   d V } |   ¡ ‰ ˆ jjr¤ˆ jj}t|ddd‰ˆ dtjd tt	t
jƒ¡t ¡ ˆ jjf ¡ ˆ jj ˆj¡ ˆ j ¡ ‰t
j d| ¡ d dœ‡ ‡‡fdd	„}ˆ  |¡ d S )
NÚwzutf-8)Úencodingz.versions pytest-%s, python-%s
cwd=%s
args=%s

Ú.z'writing pytest debug information to %s
)r%   c                      s2   ˆ  ¡  tj dˆj ¡ ˆ jj d ¡ ˆƒ  d S )Nz%wrote pytest debug information to %s
)ÚcloseÚsysÚstderrÚwriter*   ÚtraceÚrootÚ	setwriterr   ©ÚconfigZ	debugfileZundo_tracingr   r   Úunset_tracing{   s    z+pytest_cmdline_parse.<locals>.unset_tracing)Z
get_resultÚoptionr/   Úopenr8   ÚpytestÚ__version__ÚjoinÚmapÚstrr6   Úversion_infoÚosÚgetcwdZinvocation_paramsÚargsr9   r:   r;   ÚpluginmanagerZenable_tracingr7   Zadd_cleanup)ÚoutcomeÚpathr>   r   r<   r   Úpytest_cmdline_parsed   s&    üþÿ

rM   )r=   r%   c                 C   sf   | j jdkrLtj d tjtj¡¡ t	| ƒ}|rb|D ]}tj |d ¡ q4ntj dtj› d¡ d S )Né   z,This is pytest version {}, imported from {}
Ú
zpytest )
r?   r'   r6   Ústdoutr8   ÚformatrA   rB   Ú__file__Úgetpluginversioninfo)r=   Ú
plugininfoÚliner   r   r   Úshowversion„   s    ÿÿrV   c                 C   s@   | j jdkrt| ƒ dS | j jr<|  ¡  t| ƒ |  ¡  dS d S )Nr   )r?   r'   rV   r   Z_do_configureÚshowhelpZ_ensure_unconfigure)r=   r   r   r   Úpytest_cmdline_main“   s    rX   c                 C   sú  dd l }| j d¡}|j}| | jj ¡ ¡ | ¡  | d¡ | ¡  |j	}d}d| }| jj
D ]ú}| jj| \}}	}
|	d u r‚d}	|d u r˜td|› ƒ‚|› d|	› d	}| d
| ¡ t|ƒ}||d krü| ¡  |j||||dd}|D ]}| |¡ qêq`| d|| d  ¡ |j||| dd}|r`| |d ¡ |dd … D ]}| || ¡ qDq`| ¡  | d¡ g d¢}|D ]"\}}| d|d›d|› ¡ qz| ¡  | ¡  | d¡ | d¡ | d¡ |j dg ¡D ]}|jd|j dd qÚd S )Nr   ZterminalreporterzY[pytest] ini-options in the first pytest.ini|tox.ini|setup.cfg|pyproject.toml file found:é   ú Ústringz!help argument cannot be None for z (z):z  %sé   F)Úinitial_indentÚsubsequent_indentÚbreak_on_hyphensé   )r_   rN   zEnvironment variables:))ZPYTEST_ADDOPTSzExtra command line options)ZPYTEST_PLUGINSz.Comma-separated plugins to load during startup)ZPYTEST_DISABLE_PLUGIN_AUTOLOADz"Set to disable plugin auto-loading)ZPYTEST_DEBUGz1Set to enable debug tracing of pytest's internalsú  z<24z/to see available markers type: pytest --markersz1to see available fixtures type: pytest --fixtureszˆ(shown according to specified file_or_dir or current dir if not specified; fixtures with leading '_' are only shown with the '-v' optionÚwarningsz
warning : T)Zred)ÚtextwraprJ   Z
get_pluginZ_twr8   r   Z	optparserÚformat_helprU   Z	fullwidthZ	_ininamesZ_inidictÚ	TypeErrorÚlenÚwrapÚstatsÚgetÚmessage)r=   rc   ÚreporterZtwÚcolumnsZ
indent_lenÚindentr*   r   Útyper   ÚspecZspec_lenZ	helplinesrU   ÚwrappedÚvarsZwarningreportr   r   r   rW   Ÿ   sj    ÿû


ÿrW   )Zpytest_pluginszlist of plugin names to loadc                 C   sd   g }| j  ¡ }|r`| d¡ |D ]>\}}t|dt|ƒƒ}|j› d|j› d|› }| d| ¡ q |S )Nzsetuptools registered plugins:rR   ú-z at ra   )rJ   Zlist_plugin_distinfor)   r   ÚreprÚproject_namer'   )r=   ÚlinesrT   ÚpluginÚdistÚlocÚcontentr   r   r   rS   ì   s    

rS   c                 C   sœ   g }| j js| j jr<| dtj› ¡ t| ƒ}|r<| |¡ | j jr˜| d¡ | j 	¡ }|D ]:\}}t
|dƒrv|j}nt|ƒ}| d|d›d|› ¡ q\|S )Nzusing: pytest-zactive plugins:rR   z    z<20z: )r?   r/   Ztraceconfigr)   rA   rB   rS   ÚextendrJ   Zlist_name_pluginÚhasattrrR   rs   )r=   ru   ZverinfoÚitemsr*   rv   Úrr   r   r   Úpytest_report_headerø   s    



r~   )r#   rG   r6   Úargparser   Útypingr   r   r   rA   Z_pytest.configr   r   r   Z_pytest.config.argparsingr	   r
   r1   ZhookimplrM   rV   ÚintrX   rW   Zconftest_optionsrE   rS   r~   r   r   r   r   Ú<module>   s*   8

J