o
    i7n                     @   s  d dl Z d dlZd dlm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 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 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  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+ d dl,m-Z- d dl,m.Z. d dl,m/Z/ d dl0m1Z1 d d l2m3Z3 d d!l4m5Z5 d d"l6m7Z7 d d#l8m9Z9 d d$l:m;Z; d d%l:m<Z< ej=rd d&l>m?Z? e3e@ZAejBd'd(G d)d* d*ZCG d+d, d,eZDed-eeeZEed.d/d0ZFd1d2 ZGd3d4 ZHG d5d/ d/e jIZJG d6d7 d7eJe
eE ZKed8d7d0ZLG d9d: d:eJe
eEeLf ZMdS );    N)Enum)Path)Any)Generic)Optional)TypeVar)Union)Context)	SPAN_KIND)	SpanTypes)test)ITR_SKIPPING_LEVEL)TestId)TestModuleId)TestSuiteId)TestSourceFileInfo)
TestStatus)EarlyFlakeDetectionSettings)TestManagementSettings)TestVisibilityCoverageData)COVERAGE_TAG_NAME)
EVENT_TYPE)SKIPPED_BY_ITR_REASON)CIVisibilityDataError)EVENT_TYPES)TEST_FRAMEWORKS)record_itr_forced_run)record_itr_skipped)record_itr_unskippable)	COMPONENT)
get_logger)AutoTestRetriesSettings)CoverageLines)Time)Span)Tracer)TestVisibilitySessionT)frozenc                   @   s.  e Zd ZU dZeed< eed< eed< eed< eed< eed< eed< eed	< eed
< eed< eed< dZ	e
ed< dZe
ed< dZe
ed< dZe
ed< dZee ed< dZeed< dZe
ed< dZe
ed< ejedZeed< ejedZeed< ejedZeed< dZee ed< dZe
ed< dd ZdS ) TestVisibilitySessionSettingsFtracertest_servicetest_commandtest_frameworktest_framework_metric_nametest_framework_versionsession_operation_namemodule_operation_namesuite_operation_nametest_operation_nameworkspace_pathis_unsupported_ciTreject_duplicatesitr_enableditr_test_skipping_enabledNitr_test_skipping_level itr_correlation_idcoverage_enabledknown_tests_enabled)default_factoryefd_settingsatr_settingstest_management_settingsci_provider_nameis_auto_injectedc                 C   sR   t | jts
tdt | jtstd| j stdt | jt	s'tdd S )Nz%tracer must be a ddtrace.trace.Tracerzroot_dir must be a pathlib.Pathz)root_dir must be an absolute pathlib.Pathz4test_framework_metric must be a TEST_FRAMEWORKS enum)

isinstancer)   r%   	TypeErrorr3   r   is_absolute
ValueErrorr-   r   self rI   \/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/internal/ci_visibility/api/_base.py__post_init__P   s   
z+TestVisibilitySessionSettings.__post_init__)__name__
__module____qualname____test__r%   __annotations__strr   r   r4   boolr5   r6   r7   r8   r   r   r:   r;   r<   dataclassesfieldr   r>   r!   r?   r   r@   rA   rB   rK   rI   rI   rI   rJ   r(   4   s6   
 r(   c                   @   s   e Zd ZdZdZdS )SPECIAL_STATUS      N)rL   rM   rN   
UNFINISHED
NONSTARTEDrI   rI   rI   rJ   rU   [   s    rU   CIDTITEMTTestVisibilityItemBase)boundc                       t   fdd}|S )Nc                    s0   |   rtd |  d S  | g|R i |S )Nz7Method %s called on item %s, but it is already finished)is_finishedlogwarningrH   argskwargsfuncrI   rJ   wrappere   s   z&_require_not_finished.<locals>.wrapper	functoolswrapsrf   rg   rI   re   rJ   _require_not_finishedd      rl   c                    r^   )Nc                    s2   | j d u rtd |  d S  | g|R i |S )Nz3Method %s called on item %s, but self._span is None)_spanr`   ra   rb   re   rI   rJ   rg   p   s   
z_require_span.<locals>.wrapperrh   rk   rI   re   rJ   _require_spano   rm   ro   c                   @   s*  e Zd ZdZdZejZ			ddede	dede
eeef  de
d	 d
e
e ddfddZdefddZedddZdd Zdde
e ddfddZedde
e ddfddZedddZdddZdddZd eddfd!d"Zdd#d$Zdd%d&Zdd'd(Zdd)d*Zd+d, Ze de
e! fd-d.Z"e"j#dd/e
e! fd0d.Z"e de	fd1d2Z$e$j#d3e	ddfd4d2Z$e%j&deeef fd5d6Z'deeef fd7d8Z(dd9d:Z)e%j&d;d< Z*e%j&d=d> Z+dde
e ddfd?d@Z,defdAdBZ-		ddCe
e. de
e ddfdDdEZ/ddFeddfdGdHZ0defdIdJZ1defdKdLZ2de
dM fdNdOZ3de
e4 fdPdQZ5de6e.e7f fdRdSZ8de.fdTdUZ9dVe.ddfdWdXZ:ddYdZZ;dd[d\Z<defd]d^Z=dd_d`Z>defdadbZ?ddcddZ@defdedfZAeBdgedheddfdidjZCeBdkeeef ddfdldmZDdgedefdndoZEdpeFe deeef fdqdrZGeBdgeddfdsdtZHdpeFe ddfdudvZIde
eJ fdwdxZKde
eJ fdydzZLe%j&d{eeMeNf ddfd|d}ZOedd~dZPde
eeMeNf  fddZQdedeRddfddZSdedeRfddZTdedeRfddZUdS )r\   Funset_event_typeNnamesession_settingsoperation_nameinitial_tagsparentTestVisibilityParentItemresourcereturnc                 C   s   || _ || _tj| _|| _|j| _|j| _	|| _
|d ur|n|| _d | _|r(|ni | _i | _d| _d| _d| _d| _g | _d | _d | _d | _d S )NFr   )rq   ru   r   FAIL_status_session_settingsr)   _tracerr*   _service_operation_name	_resourcern   _tags_stash_is_itr_skipped_itr_skipped_count_is_itr_unskippable_is_itr_forced_run_codeowners_source_file_info_coverage_data_finish_time)rH   rq   rr   rs   rt   ru   rw   rI   rI   rJ   __init__   s&   	
zTestVisibilityItemBase.__init__c                 C   s   | j j d| j dS )Nz(name=))	__class__rL   rq   rG   rI   rI   rJ   __repr__   s   zTestVisibilityItemBase.__repr__c                 C   s$   | j  D ]
\}}| || qd S N)r   items_add_tag_to_span)rH   tag	tag_valuerI   rI   rJ   _add_all_tags_to_span   s   z,TestVisibilityItemBase._add_all_tags_to_spanc              
   C   s   | j d u rd S z,t|tr| j || W d S t|tr*| j ||r$dnd W d S | j || W d S  tyM } ztd|| W Y d }~d S d }~ww )NtruefalsezError setting tag %s: %s)	rn   rC   rQ   _set_tag_strrR   set_tag	Exceptionr`   debug)rH   r   r   erI   rI   rJ   r      s   


z'TestVisibilityItemBase._add_tag_to_spancontextc                 C   s   d }|d ur	|}n	t | tr|  }| jj| j| jr| jn| j|| jtj	dd| _
| j
t| j | j
td td| j
|  d S )NT)rw   child_ofservice	span_typeactivater   zStarted span %s for item %s)rC   rv   get_parent_spanr|   _start_spanr~   r   r}   r   TESTrn   r   r   _event_typer
   r`   r   )rH   r   parent_spanrI   rI   rJ   r      s    
	z"TestVisibilityItemBase._start_spanoverride_finish_timec                 C   s   | j d u rd S |   |   |   | | jj | jjd ur)| jjjr)| 	  | jj
r1|   | jjd ur@| jjjr@|   | jjd urO| jjjrO|   |   |   |   |p`t | _d S r   )rn   _set_default_tags_set_test_hierarchy_tags_add_coverage_data_tag_set_itr_tagsr{   r6   r>   enabled_set_efd_tagsr<   _set_known_tests_tagsr?   _set_atr_tagsr@   _set_test_management_tags_set_item_tags_set_span_tagsr   r#   timer   )rH   r   rI   rI   rJ   _finish_test_span   s(   
z(TestVisibilityItemBase._finish_test_spanc                 C   s@   | j d u rd S | j j| jd |  }|r| jj| d S d S )N)finish_time)rn   finishr   r   r|   context_providerr   )rH   r   rI   rI   rJ   _finish_span   s   
z#TestVisibilityItemBase._finish_spanc                 C   s   |  t| jjtj| jjtj| jjtj| jj	tj
| jji | jr+| tjt| j | jdur{| jjr[z| jj| jj}W n tyQ   td | jj}Y nw | tjt| | jjdurj| tj| jj | jjdur}| tj| jj dS dS dS )zApplies the tags that should be on every span regardless of the item type

        All spans start with test.STATUS set to FAIL, in order to ensure that no span is accidentally
        reported as successful.
        NzOSource file path is not within the root directory, replacing with absolute path)set_tagsr   r{   r,   r   	FRAMEWORKFRAMEWORK_VERSIONr.   COMMANDr+   STATUSrz   valuer   r   
CODEOWNERSjsondumpsr   pathrelative_tor3   rF   r`   r   SOURCE_FILErQ   
start_lineSOURCE_STARTend_line
SOURCE_END)rH   relative_pathrI   rI   rJ   r      s2   






z(TestVisibilityItemBase._set_default_tagsc                 C      dS )z?Overridable by subclasses to set tags specific to the item typeNrI   rG   rI   rI   rJ   r        z%TestVisibilityItemBase._set_item_tagsr6   c                 C   sP   |sdS | j r| tjt | tj| j  | tj| j | tj| j	 dS )zZNote: some tags are also added in the parent class as well as some individual item classesN)
r   r   r   SKIP_REASONr   ITR_SKIPPEDITR_UNSKIPPABLEr   ITR_FORCED_RUNr   rH   r6   rI   rI   rJ   r   "  s   z$TestVisibilityItemBase._set_itr_tagsc                 C   r   )z2EFD tags are only set at the test or session levelNrI   rG   rI   rI   rJ   r   .  r   z$TestVisibilityItemBase._set_efd_tagsc                 C   r   )z.Known test tags are only set at the test levelNrI   rG   rI   rI   rJ   r   2  r   z,TestVisibilityItemBase._set_known_tests_tagsc                 C   r   )z'ATR tags are only set at the test levelNrI   rG   rI   rI   rJ   r   6  r   z$TestVisibilityItemBase._set_atr_tagsc                 C   r   )z9Quarantine tags are only set at the test or session levelNrI   rG   rI   rI   rJ   r   :  r   z0TestVisibilityItemBase._set_test_management_tagsc                 C   r   )a  This is effectively a callback method for exceptional cases where the item span
        needs to be modified directly by the class

        Only use if absolutely necessary.

        Classes that need to specifically modify the span directly should override this method.
        NrI   rG   rI   rI   rJ   r   >  s   z%TestVisibilityItemBase._set_span_tagsc                 C      | j S r   ))_TestVisibilityItemBase__source_file_inforG   rI   rI   rJ   r   H     z(TestVisibilityItemBase._source_file_infosource_file_info_valuec                 C   sZ   d| _ |du r	dS |jdu rdS t|tstd dS |j s(td dS || _ dS )zEThis checks that filepaths are absolute when setting source file infoNz3Source file info must be of type TestSourceFileInfoz<Source file path must be absolute, removing source file info)r   r   rC   r   r`   ra   rE   )rH   r   rI   rI   rJ   r   L  s   





c                 C   r   r   ))_TestVisibilityItemBase__session_settingsrG   rI   rI   rJ   r{   a  r   z(TestVisibilityItemBase._session_settingssession_settings_valuec                 C   s   t |ts	td|| _d S )Nz>Session settings must be of type TestVisibilitySessionSettings)rC   r(   rD   r   )rH   r   rI   rI   rJ   r{   e  s   

c                 C      t dNz/This method must be implemented by the subclassNotImplementedErrorrG   rI   rI   rJ   _get_hierarchy_tagsk  s   z*TestVisibilityItemBase._get_hierarchy_tagsc                 C   s6   |   }| j}|dur||   |j}|dus|S )zMCollects all tags from the item's hierarchy and returns them as a single dictN)r   ru   update)rH   tagsru   rI   rI   rJ   _collect_hierarchy_tagso  s   z.TestVisibilityItemBase._collect_hierarchy_tagsc                 C   s   |  |   dS )z,Add module, suite, and test name and id tagsN)r   r   rG   rI   rI   rJ   r   x  s   z/TestVisibilityItemBase._set_test_hierarchy_tagsc                 C   r   r   r   rG   rI   rI   rJ   _telemetry_record_event_created|     z6TestVisibilityItemBase._telemetry_record_event_createdc                 C   r   r   r   rG   rI   rI   rJ    _telemetry_record_event_finished  r   z7TestVisibilityItemBase._telemetry_record_event_finishedc                 C   sT   t d|  |  r| jjrd|  d}t | t|d S |   | | d S )NzTest Visibility: starting %szItem z has already been started)	r`   r   
is_startedr{   r5   ra   r   r   r   )rH   r   	error_msgrI   rI   rJ   start  s   
zTestVisibilityItemBase.startc                 C   
   | j d uS r   rn   rG   rI   rI   rJ   r        
z!TestVisibilityItemBase.is_startedoverride_statusc                 C   s2   t d|  |r| | |   | j|d dS )zPrepare the span for finishing by setting all tags and finish time.

        This does NOT send the span - call finish() to actually send it.
        The 'force' parameter is provided for compatibility with parent items but not used here.
        z'Test Visibility: preparing to finish %s)r   N)r`   r   
set_statusr   r   )rH   r   r   rI   rI   rJ   prepare_for_finish  s
   

z)TestVisibilityItemBase.prepare_for_finishforcec                 C   s*   t d|  | jdu r|   |   dS )aA  Finish and send the span to the backend.

        This just sends the span - prepare_for_finish() should be called first to prepare it.
        If prepare_for_finish() hasn't been called yet, it will be called automatically for backward compatibility.
        Parent items override this to handle children first.
        z)Test Visibility: finishing and sending %sN)r`   r   r   r   r   )rH   r   rI   rI   rJ   r     s   
zTestVisibilityItemBase.finishc                 C   s   | j d uo| j jS r   )rn   finishedrG   rI   rI   rJ   r_     s   z"TestVisibilityItemBase.is_finishedc                 C   r   r   )r   rG   rI   rI   rJ   is_prepared_for_finish  r   z-TestVisibilityItemBase.is_prepared_for_finishr&   c                 C      | j d u rd S | j  S r   )ru   get_sessionrG   rI   rI   rJ   r        

z"TestVisibilityItemBase.get_sessionc                 C   s   | j d u rd S | j jS r   )rn   span_idrG   rI   rI   rJ   get_span_id  s   
z"TestVisibilityItemBase.get_span_idc                 C   s"   |   r| jS |  stjS tjS r   )r   rz   r   rU   rY   rX   rG   rI   rI   rJ   
get_status  s
   z!TestVisibilityItemBase.get_statusc                 C   r   r   )rz   rG   rI   rI   rJ   get_raw_status     z%TestVisibilityItemBase.get_raw_statusstatusc                 C   s8   |   rd| j d|  d| }t| d S || _d S )NzStatus z already set for item z, not setting to )r   rz   r`   ra   )rH   r   r   rI   rI   rJ   r     s
   

z!TestVisibilityItemBase.set_statusc                 C   s*   |  j d7  _ | jd ur| j  d S d S )NrV   )r   ru   count_itr_skippedrG   rI   rI   rJ   r     s   
z(TestVisibilityItemBase.count_itr_skippedc                 C   s   t | j d| _d S NT)r   _event_type_metric_namer   rG   rI   rI   rJ   mark_itr_skipped  s   

z'TestVisibilityItemBase.mark_itr_skippedc                 C   r   r   )r   rG   rI   rI   rJ   is_itr_skipped  r   z%TestVisibilityItemBase.is_itr_skippedc                 C   s,   t | j d| _| jd ur| j  d S d S r   )r   r   r   ru   mark_itr_unskippablerG   rI   rI   rJ   r     s
   

z+TestVisibilityItemBase.mark_itr_unskippablec                 C   r   r   )r   rG   rI   rI   rJ   is_itr_unskippable  r   z)TestVisibilityItemBase.is_itr_unskippablec                 C   s,   t | j d| _| jdur| j  dS dS )zRIf any item is forced to run, all ancestors are forced to run and increment by oneTN)r   r   r   ru   mark_itr_forced_runrG   rI   rI   rJ   r     s
   

z*TestVisibilityItemBase.mark_itr_forced_runc                 C   r   r   )r   rG   rI   rI   rJ   was_itr_forced_run  r   z)TestVisibilityItemBase.was_itr_forced_runtag_namer   c                 C      || j |< d S r   r   )rH   r   r   rI   rI   rJ   r     s   zTestVisibilityItemBase.set_tagr   c                 C   s   |D ]	}|| | j |< qd S r   r   )rH   r   r   rI   rI   rJ   r     s   zTestVisibilityItemBase.set_tagsc                 C      | j |S r   r   getrH   r   rI   rI   rJ   get_tag      zTestVisibilityItemBase.get_tag	tag_namesc                 C   s"   i }|D ]
}| j |||< q|S r   r  )rH   r  r   r   rI   rI   rJ   get_tags  s   zTestVisibilityItemBase.get_tagsc                 C   s   | j |= d S r   r   r  rI   rI   rJ   
delete_tag
  s   z!TestVisibilityItemBase.delete_tagc                 C   s   |D ]}| j |= qd S r   r   )rH   r  r   rI   rI   rJ   delete_tags  s   
z"TestVisibilityItemBase.delete_tagsc                 C   r   r   r   rG   rI   rI   rJ   get_span  r   zTestVisibilityItemBase.get_spanc                 C   s   | j d ur
| j  S d S r   )ru   r  rG   rI   rI   rJ   r     s   

z&TestVisibilityItemBase.get_parent_spancoverage_datac                 C   s   d S r   rI   )rH   r  rI   rI   rJ   add_coverage_data  r   z(TestVisibilityItemBase.add_coverage_datac                 C   s6   | j d u rd S | jr| j t| j| jj d S d S r   )rn   r   _set_struct_tagr   build_payloadr{   r3   rG   rI   rI   rJ   r     s   
z-TestVisibilityItemBase._add_coverage_data_tagc                 C   r   r   )r   get_datarG   rI   rI   rJ   get_coverage_data(  r   z(TestVisibilityItemBase.get_coverage_datakeyr   c                 C   r   r   )r   )rH   r  r   rI   rI   rJ   	stash_set-     z TestVisibilityItemBase.stash_setc                 C   r  r   )r   r  rH   r  rI   rI   rJ   	stash_get0  r  z TestVisibilityItemBase.stash_getc                 C   s   | j |d S r   )r   popr  rI   rI   rJ   stash_delete3  r  z#TestVisibilityItemBase.stash_delete)NNNrx   Nr   NN)F)VrL   rM   rN   rO   r   r   UNSETr   rQ   r(   r   dictr   r   r   ro   r   r   r	   r   floatr   r   r   r   rR   r   r   r   r   r   r   propertyr   r   setterr{   abcabstractmethodr   r   r   r   r   r   r   r   r   r   r_   r   r   intr   r   rU   r   r   r   r   r   r   r   r   r   r   rl   r   r   r  listr  r	  r
  r$   r  r   r   r"   r  r   r  objectr  r  r  rI   rI   rI   rJ   r\   z   s    
##
	
"





	






c                   @   s   e Zd ZdS )TestVisibilityChildItemN)rL   rM   rN   rI   rI   rI   rJ   r%  7  s    r%  CITEMTc                       s   e Zd Zdedededeeeef  ddf
 fddZde	e
ef fd	d
Z		ddee
 dee ddf fddZ			d dedee
 dee ddf fddZdededdfddZdedefddZdeddf fddZd!ddZ  ZS )"rv   rq   rr   rs   rt   rx   Nc                    s"   t  |||| i | _d| _d S )NF)superr   	_children_distributed_children)rH   rq   rr   rs   rt   r   rI   rJ   r   ?  s   
z!TestVisibilityParentItem.__init__c                 C   s   | j du r	|  S tjjdtjjdtjjdi}| j  D ]%}| }|t	j
kr(q|t	jkr8td|  t	j  S ||j  d7  < qtd| | |tjj dkrTtjS t| j }|dkrh|tjj |krhtjS |tjj dkrstjS tjS )at  Recursively computes status based on all children's status

        - FAIL: if any children have a status of FAIL
        - SKIP: if all children have a status of SKIP
        - PASS: if all children have a status of PASS
        - UNFINISHED: if any children are not finished

        The caller of get_status() must decide what to do if the result is UNFINISHED
        Nr   zItem %s has unfinished childrenrV   z!Children status counts for %s: %s)r(  r   r   ry   r   SKIPPASSvaluesr   rU   rY   rX   r`   r   len)rH   children_status_countschildchild_statuslen_childrenrI   rI   rJ   r   J  s.   





z#TestVisibilityParentItem.get_statusr   r   c                    sL   |r|  | |  }|tjkrdS t|ts|  | t j||d dS )a  Recursively finish all children and then finish self

        An unfinished status is not considered an error condition (eg: some order-randomization plugins may cause
        non-linear ordering of children items).

        override_status only applies to the current item. Any unfinished children that are forced to finish will be
        finished with whatever status they had at finish time (in reality, this should mean that any unfinished
        children are marked as failed, since that is the default status set upon start)
        Nr   r   )r   r   rU   rX   rC   r'  r   )rH   r   r   item_statusr*  rI   rJ   r   w  s   



z+TestVisibilityParentItem.prepare_for_finishFr   c                    sn   |r%| j  D ]}|js|j||d | s|j|d q| |   |  s0| j||d t	   dS )aK  Recursively finish all children and then finish self

        force results in all children being finished regardless of their status
        prepare_for_finish() should be called first to prepare the span.
        If prepare_for_finish() hasn't been called yet, it will be called automatically for backward compatibility.
        r3  )r   N)
r(  r-  r   r   r_   r   r   r   r   r'  )rH   r   r   r   r0  r*  rI   rJ   r     s   zTestVisibilityParentItem.finishchild_item_idr0  c                 C   sL   | |_ || jv r| jjr| d|  d}t| t|d S || j|< d S )Nz already exists in 's children)ru   r(  r{   r5   r`   ra   r   )rH   r5  r0  r   rI   rI   rJ   	add_child  s   

z"TestVisibilityParentItem.add_childchild_idc                 C   s,   || j v r
| j | S | d|  d}t|)Nz not found in r6  )r(  r   )rH   r8  r   rI   rI   rJ   get_child_by_id  s   

z(TestVisibilityParentItem.get_child_by_idr6   c                    sL   t  | |s
dS | tj| jdk | js| jr$| tj| j dS dS )z7Set tags on parent items based on ITR enablement statusNr   )	r'  r   r   r   ITR_TEST_SKIPPING_TESTS_SKIPPEDr   r(  r)  ITR_TEST_SKIPPING_COUNTr   r*  rI   rJ   r     s   z&TestVisibilityParentItem._set_itr_tagsc                 C   s
   d| _ d S r   )r)  rG   rI   rI   rJ   set_distributed_children  r   z1TestVisibilityParentItem.set_distributed_childrenr  )FNNr  )rL   rM   rN   rQ   r(   r   r  r   r   r   r   rU   r   r  r   rR   r   rZ   r&  r7  r9  r   r<  __classcell__rI   rI   r*  rJ   rv   >  sL    /rv   )Nr   rS   enumr   ri   r   pathlibr   typingr   r   r   r   r   ddtrace._trace.contextr	   ddtrace.constantsr
   ddtrace.extr   r   ddtrace.ext.test_visibilityr   1ddtrace.ext.test_visibility._test_visibility_baser   r   r   "ddtrace.ext.test_visibility.statusr   r   *ddtrace.internal.ci_visibility._api_clientr   r   1ddtrace.internal.ci_visibility.api._coverage_datar   (ddtrace.internal.ci_visibility.constantsr   r   r   %ddtrace.internal.ci_visibility.errorsr   2ddtrace.internal.ci_visibility.telemetry.constantsr   r   ,ddtrace.internal.ci_visibility.telemetry.itrr   r   r   ddtrace.internal.constantsr   ddtrace.internal.loggerr    ,ddtrace.internal.test_visibility._atr_mixinsr!   /ddtrace.internal.test_visibility.coverage_linesr"   ddtrace.internal.utils.timer#   ddtrace.tracer$   r%   TYPE_CHECKING+ddtrace.internal.ci_visibility.api._sessionr&   rL   r`   	dataclassr(   rU   rZ   r[   rl   ro   ABCr\   r%  r&  rv   rI   rI   rI   rJ   <module>   st    
&   @