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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 eeZd Zd ZG dd deZG dd deZG dd deZG dd de
ZdZdedefddZdedefddZdededefddZdS )    )Enum)sha256N)Any)
NamedTuple)Optional)SpanLink)SpanLinkKind)%record_span_pointer_calculation_issue)
get_loggerc                   @      e Zd ZdZdZdS )_SpanPointerDirectionudN__name__
__module____qualname__UPSTREAM
DOWNSTREAM r   r   P/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/_trace/_span_pointer.pyr          r   c                   @   r   )_SpanPointerDirectionNamezspan-pointer-upzspan-pointer-downNr   r   r   r   r   r      r   r   c                   @   s6   e Zd ZU eed< eed< eed< eeef ed< dS )_SpanPointerDescriptionpointer_kindpointer_directionpointer_hashextra_attributesN)r   r   r   str__annotations__r   dictr   r   r   r   r   r      s
   
 r   c                       sN   e Zd Z	ddedededeeeef  f fddZdd	 Z	d
d Z
  ZS )_SpanPointerNr   r   r   r   c                    s2   t  jtt||j|d|pi d tjj| _d S )N)zptr.kindptr.dirptr.hash)trace_idspan_id
attributes)super__init__ _SPAN_POINTER_SPAN_LINK_TRACE_ID_SPAN_POINTER_SPAN_LINK_SPAN_IDvaluer   SPAN_POINTERkind)selfr   r   r   r   	__class__r   r   r(   ,   s   z_SpanPointer.__init__c                 C   s   d S Nr   r.   r   r   r   __post_init__@   s   z_SpanPointer.__post_init__c                 C   sB   d| j  d| j d| j d| jd d| jd d| j d	S )
NzSpanPointer(trace_id=z
, span_id=z, kind=z, direction=r"   z, hash=r#   z, attributes=))r$   r%   r-   r&   getr2   r   r   r   __repr__D   s   

z_SpanPointer.__repr__r1   )r   r   r   r   r   r   r    r   r(   r3   r6   __classcell__r   r   r/   r   r!   +   s    r!   HashingFailureelementsreturnc               
   G   s\   z| st dW S td|  d d W S  ty- } zt t|W  Y d }~S d }~ww )Nzelements must not be empty   |    )"_standard_hashing_function_failurer   join	hexdigest	Exceptionr   )r9   er   r   r   _standard_hashing_functionO   s   
rB   reasonc                 C   s"   t d|  tdd ttddS )NzDspan pointers: failed to generate standard hash for span pointer: %sstandard_hashing_function)contextr<   )prefixminimum_length)logdebugr	   _add_random_suffix)_STANDARD_HASHING_FUNCTION_FAILURE_PREFIX)rC   r   r   r   r=   [   s   r=   rF   rG   c                 C   s8   t | |kr| S ddd t|t |  D }| | S )N c                 s   s    | ]}t d V  qdS )0123456789abcdefN)randomchoice).0_r   r   r   	<genexpr>n   s    z%_add_random_suffix.<locals>.<genexpr>)lenr>   range)rF   rG   suffixr   r   r   rJ   j   s    rJ   )enumr   hashlibr   rN   typingr   r   r   ddtrace._trace._span_linkr   r   ddtrace._trace.telemetryr	   ddtrace.internal.loggerr
   r   rH   r)   r*   r   r   r   r!   rK   bytesr   rB   r=   intrJ   r   r   r   r   <module>   s*    !