a
    7ñ»jÃ,  ã                   @   sª   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mZ d dlZd dl	m
Z
 d dl	mZ d dlmZ G dd„ dƒZdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )é    N)ÚPath)Ú__version__)Úextras)Úcleanup_unserializablec                   @   sÖ   e Zd Zdd„ Zedd„ ƒZdd„ Zd'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ejdd�dd„ ƒZejdd�dd„ ƒZejdd�d d!„ ƒZejdd�d"d#„ ƒZejdd�d$d%„ ƒZd&S )(Ú
BaseReportc                 C   sh   t  ¡ t tj |¡ƒ ¡  | _| jjjddd� || _	|| _
|| _t| d¡ƒ| _|| _| jj| j_d S )NT)ÚparentsÚexist_okZmax_asset_filename_length)r   ÚcwdÚosÚpathÚ
expandvarsÚ
expanduserÚ_report_pathÚparentÚmkdirÚ_configÚ	_templateZ_cssÚintÚgetiniÚ_max_asset_filename_lengthÚ_reportÚnameÚtitle)ÚselfZreport_pathÚconfigZreport_dataÚtemplateÚcss© r   ú<E:\soccer\ml_env\Lib\site-packages\pytest_html/basereport.pyÚ__init__   s    ÿÿzBaseReport.__init__c                 C   s   d S ©Nr   )r   r   r   r   r   #   s    zBaseReport.cssc                 C   s.   d  t dd|¡t|ƒt|ƒ|¡| j d … S )Nz{}_{}_{}.{}z[^\w.]Ú_)ÚformatÚreÚsubÚstrr   )r   Útest_idÚextra_indexÚ
test_indexZfile_extensionr   r   r   Ú_asset_filename(   s    ü
ûzBaseReport._asset_filenameFc                 C   sx   t j  ¡ }t| jjƒ}t |¡}| jj| jj	| 
d¡| 
d¡t| j|  ¡ | jj|| jj|| jj| jjd�}|  |¡ d S )Nz%d-%b-%Yz%H:%M:%S)r   ÚdateÚtimeÚversionÚstylesZ	run_countÚrunning_stateÚself_containedÚoutcomesÚ	test_dataZ
table_headÚadditional_summary)ÚdatetimeÚnowr   r   ÚdataÚjsonÚdumpsr   Úrenderr   Ústrftimer   r   Ú
_run_countr.   r0   Útable_headerr2   Ú_write_report)r   r/   Ú	generatedr1   Úrendered_reportr   r   r   Ú_generate_report0   s$    

ôzBaseReport._generate_reportc                    sŒ   zddl m} | jj| }W n& tyB   | jj}t dt¡ Y n0 | 	¡ D ]:}|| }|  
|¡rLd‰ d ‡ fdd„t|ƒD ƒ¡||< qL|S )Nr   )Úmetadata_keyzY'pytest-metadata < 3.0.0' is deprecated and support will be dropped in next major versioni“%  Ú c                 3   s   | ]}t ˆ ƒV  qd S r    )Úchr)Ú.0r!   ©Zblack_box_ascii_valuer   r   Ú	<genexpr>V   ó    z3BaseReport._generate_environment.<locals>.<genexpr>)Zpytest_metadata.pluginr@   r   ÚstashÚImportErrorÚ	_metadataÚwarningsÚwarnÚDeprecationWarningÚkeysÚ#_is_redactable_environment_variableÚjoinr%   )r   r@   ÚmetadataÚkeyÚvaluer   rD   r   Ú_generate_environmentE   s    þ

"z BaseReport._generate_environmentc                 C   s,   | j  d¡}|D ]}t ||¡r dS qdS )NZenvironment_table_redact_listTF)r   r   r#   Úmatch)r   Zenvironment_variableZredactable_regexesZredactable_regexr   r   r   rN   Z   s
    z.BaseReport._is_redactable_environment_variablec                 O   s   d S r    r   ©r   ÚargsÚkwargsr   r   r   Ú_data_contentb   s    zBaseReport._data_contentc                 O   s   d S r    r   rU   r   r   r   Ú_media_contente   s    zBaseReport._media_contentc           	      C   sø   t |dƒr|jd pd}t|dg ƒ}t|ƒD ]Æ\}}|d }|  | d¡ d¡|||d ¡}|d	 tjkrŒt	 
|¡}| j|||d
 d�|d< |d	 tjkrÆt|tƒr®| d¡}| j|||d
 d�|d< |d	 tjtjfv r,| j|||d
 d�|d< q,|S )NÚreruné   r   r   Úcontentúutf-8Úunicode_escapeÚ	extensionÚformat_typeÚ	mime_type)Ú
asset_namera   )ÚhasattrrZ   ÚgetattrÚ	enumerater)   ÚencodeÚdecoder   ZFORMAT_JSONr6   r7   rX   ZFORMAT_TEXTÚ
isinstanceÚbytesZFORMAT_IMAGEZFORMAT_VIDEOrY   )	r   Úreportr&   r(   Zreport_extrasr'   Úextrar\   rb   r   r   r   Ú_process_extrash   s4    ü

ÿ



ÿ

ÿzBaseReport._process_extrasc                 C   s>   | j jddd��}| |¡ W d   ƒ n1 s00    Y  d S )NÚwr]   )Úencoding)r   ÚopenÚwrite)r   r>   Úfr   r   r   r<   ‡   s    zBaseReport._write_reportc                 C   sš   g d¢}d}| j j ¡ D ] }||v r|| j j| d 7 }q|dk}t| j jƒ}| j jdkrx|› d|rhdnd› d	|› d
�S |› d| j j› d|r�dnd› d�S )N)ÚpassedÚfailedZxpassedZxfailedr   rR   r[   Úfinishedú ZtestsÚtestz took Ú.ú/z done.)r   r0   rM   Ú_format_durationÚtotal_durationr.   Úcollected_items)r   Zrelevant_outcomesÚcountsÚoutcomeÚpluralÚdurationr   r   r   r:   ‹   s    zBaseReport._run_countc                 C   sZ   t |ƒD ]L\}}d| jj| v rt d|¡}t d|¡}|r|r| d¡|| d¡< qd S )NZsortablez	col-(\w+)z<td.*?>(.*?)</td>r[   )re   r   r;   r#   ÚsearchÚgroup)r   r5   ÚcellsÚindexÚcellZ
name_matchZ
data_matchr   r   r   Ú_hydrate_dataš   s    zBaseReport._hydrate_dataT)Ztrylastc                 C   s\   | j  d|  ¡ ¡ |jjj| j d� | j j}|jjj|d� t|ƒ| j _d| j _	|  
¡  d S )NÚenvironment©rj   )r‚   Ústarted)r   Úset_datarS   r   ÚhookZpytest_html_report_titler;   Z pytest_html_results_table_headerÚ_fix_pyr.   r?   )r   ÚsessionÚheadersr   r   r   Úpytest_sessionstart£   s    zBaseReport.pytest_sessionstartc                 C   sB   |j jj| jjd | jjd | jjd |d� d| j_|  ¡  d S )NÚprefixÚsummaryÚpostfix)r�   r�   r‘   rŒ   rt   )r   rŠ   Zpytest_html_results_summaryr   r2   r.   r?   ©r   rŒ   r   r   r   Úpytest_sessionfinish°   s    


üzBaseReport.pytest_sessionfinishc                 C   s   |  dd| j ¡ › �¡ d S )Nú-zGenerated html report: )Z	write_sepr   Úas_uri)r   Zterminalreporterr   r   r   Úpytest_terminal_summary»   s    þz"BaseReport.pytest_terminal_summaryc                 C   s   t |jƒ| j_d S r    )ÚlenÚitemsr   r{   r’   r   r   r   Úpytest_collection_finishÂ   s    z#BaseReport.pytest_collection_finishc           	      C   sh  t |dƒrt dt¡ t|ƒ}z| jjj|jd�d }W n t	yT   t
|jƒ}Y n0 | j j|j7  _|j}|jdkrˆ|d|j› �7 }d|  ||¡i}dd	„ |d D ƒ}d
|› d�d|› d�d|› d�dt|ƒ› d�g}| jjj||d� |sôd S t|ƒ}|  ||¡ ||d< |jdv �r(|jdk�s0|| j_t|ƒ}| jjj||d� | j |||¡�rd|  ¡  d S )NZduration_formatterz}'duration_formatter' has been removed and no longer has any effect!Please use the 'pytest_html_duration_format' hook instead.)r   r   Úcallz::r   c                 S   s   g | ]}|d  dv r|‘qS )r`   )r6   ÚtextÚurlr   )rC   rk   r   r   r   Ú
<listcomp>à   s   þz7BaseReport.pytest_runtest_logreport.<locals>.<listcomp>z<td class="col-result">z</td>z<td class="col-testId">z<td class="col-duration">z<td class="col-links">)rj   r‚   ZresultsTableRow©ÚsetupZteardownrr   )rj   r5   )rc   rJ   rK   rL   Ú_process_outcomer   rŠ   Zpytest_html_duration_formatr   Ú
IndexErrorry   r   rz   ZnodeidÚwhenrl   Ú_process_linksZpytest_html_results_table_rowr‹   r…   r}   r0   Ú_process_logsZpytest_html_results_table_htmlZadd_testr?   )	r   rj   r}   r   r&   r5   Úlinksr‚   Zprocessed_logsr   r   r   Úpytest_runtest_logreportÆ   sT    
ýÿþ
ÿþ


üÿz#BaseReport.pytest_runtest_logreportN)F)Ú__name__Ú
__module__Ú__qualname__r   Úpropertyr   r)   r?   rS   rN   rX   rY   rl   r<   r:   r…   ÚpytestZhookimplrŽ   r“   r–   r™   r¦   r   r   r   r   r      s.   

	









r   c                 C   sh   | dk rd  t| d ƒ¡S t | d ¡}| d }t |d ¡}|d }t|ƒ}|d›d|d›d|d›�S )Nr[   z{} msiè  i  é<   Ú02dú:)r"   ÚroundÚmathÚfloor)r   ÚhoursZremaining_secondsÚminutesÚsecondsr   r   r   ry      s    ry   c                 C   s   | j dv o| jdkS )Nrž   rs   )r¢   r}   r‡   r   r   r   Ú	_is_error  s    rµ   c                 C   sœ   g }| j r*| | j  dd¡ dd¡d ¡ | jdkrŠ| jD ]N}|\}}| d| d d›d|› �¡ d	|v r:| d
¡ d|v r:| d
¡ q:|s˜| d¡ |S )Nú<z&lt;ú>z&gt;Ú
rZ   ru   z-^80ÚlogrA   rš   zNo log output captured.)ZlongreprtextÚappendÚreplacer}   Úsections)rj   r¹   ÚsectionÚheaderr\   r   r   r   r¤     s     



r¤   c                 C   s<   t | ƒrdS t| dƒr2| jdv r$dS | jdkr2dS | j ¡ S )NÚErrorZwasxfail)rr   rs   ZXPassedZskippedZXFailed)rµ   rc   r}   Ú
capitalizer‡   r   r   r   r    %  s    


r    c                    s   d‰ d  ‡ fdd„| D ƒ¡S )NzU<a target="_blank" href="{content}" class="col-links__extra {format_type}">{name}</a>rA   c                    s   g | ]}ˆ   |¡‘qS r   )Ú
format_map)rC   Úlink©Za_tagr   r   r�   3  rF   z"_process_links.<locals>.<listcomp>)rO   )r¥   r   rÃ   r   r£   1  s    r£   c                 C   sR   g }| D ]D}t |tƒsB|j d¡r.t dt¡ t|ƒ}| dd¡}| |¡ q|S )Nzpy.zNThe 'py' module is deprecated and support will be removed in a future release.zcol=zdata-column-type=)	rh   r%   r¨   Ú
startswithrJ   rK   rL   r»   rº   )r‚   Z	new_cellsÚhtmlr   r   r   r‹   6  s    
ýr‹   )r3   r6   r°   r
   r#   rJ   Úpathlibr   r«   Zpytest_htmlr   r   Zpytest_html.utilr   r   ry   rµ   r¤   r    r£   r‹   r   r   r   r   Ú<module>   s$    n