o
    i                     @   s  d dl mZ d dlm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 d dlmZ d d	lmZ d d
lmZ d dlmZ G dd dZG dd dZeddG dd dZde
deje fddZedejdefddZde
defddZdejdededefd d!ZdS )"    )contextmanager)	dataclassN)runtestprotocol)pytest_TestReport)	TestPhase)_TestOutcome)excinfo_by_report)get_user_property)TestExcInfo)
TestStatusc                   @      e Zd ZdZdZdZdS )UserPropertydd_retry_reasondd_retry_final_outcomedd_retry_numberN)__name__
__module____qualname__RETRY_REASONRETRY_FINAL_OUTCOMERETRY_NUMBER r   r   `/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/contrib/internal/pytest/_retry_utils.pyr          r   c                   @   r   )RetryReasonearly_flake_detectionauto_test_retryattempt_to_fixN)r   r   r   EARLY_FLAKE_DETECTIONAUTO_TEST_RETRYATTEMPT_TO_FIXr   r   r   r   r      r   r   T)frozenc                   @   s6   e Zd ZU eed< eed< eed< eed< eed< dS )RetryOutcomesPASSEDFAILEDSKIPPEDXFAILXPASSN)r   r   r   str__annotations__r   r   r   r   r"      s   
 r"   reportreturnc                 C   s   t | tjS N)r	   r   r   r*   r   r   r   get_retry_num&   s   r.   item	retry_numc                 c   s6    | j }z|tj|fg | _ d V  W || _ d S || _ w r,   )user_propertiesr   r   )r/   r0   original_user_propertiesr   r   r   set_retry_num*   s   r3   c                 C   s   t | }|rd|S dS )NzATTEMPT {} zINITIAL ATTEMPT )r.   format)r*   retry_numberr   r   r   _get_retry_attempt_string4   s   r6   outcomesr5   c           	      C   s&  d }d }d }| j j| j| jd t| | t| d dd}W d    n1 s'w   Y  tdd |D r9tj}ntdd |D rFtj	}ntj
}|D ]6}|jrc|j|_t|}t|j|j|j}n|jrk|j|_n|j|_|jtjkszd|jvr| j j|d qK| j j| j| jd t|||d	S )
N)nodeidlocationF)nextitemlogc                 s       | ]}|j V  qd S r,   )failed.0r*   r   r   r   	<genexpr>F       z*_get_outcome_from_retry.<locals>.<genexpr>c                 s   r<   r,   )skippedr>   r   r   r   r@   H   rA   passedr-   )statusskip_reasonexc_info)ihookpytest_runtest_logstartr8   r9   r3   r   anyr   FAILSKIPPASSr=   r$   outcomer   getr
   typevaluetbrB   r%   r#   whenr   CALLpytest_runtest_logreportpytest_runtest_logfinishr   )	r/   r7   r5   _outcome_status_outcome_skip_reason_outcome_exc_inforeportsr*   report_excinfor   r   r   _get_outcome_from_retry9   s2   

r[   )
contextlibr   dataclassesr   typingt_pytest.runnerr   pytest&ddtrace.contrib.internal.pytest._typesr   &ddtrace.contrib.internal.pytest._utilsr   r   r   r	   ddtrace.ext.test_visibility.apir
   r   r   r   r"   Optionalintr.   Itemr3   r(   r6   r[   r   r   r   r   <module>   s:    	