o
    i                     @   s  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edededee dej f
ddZ!dedeee
e"eee
f  ef fddZ#deee
f defdd Z$dedeee
f fd!d"Z%deee
e"eee
f  ef de&eedf eedf f fd#d$Z'd%ej d&ed'ed(ed)ed*ed+efd,d-Z(dS )/    )Any)Optional)Union)UUID)	EventData)EventDataBatch)AmqpAnnotatedMessage)config)Pin)Span)ext_service)	SpanTypes)azure_eventhubs)core)get_argument_value)HTTPPropagator)ContextNcontext_namepinoperation_nameresourcereturnc                 C   s    t j| |||t|tjtjdS )N)	span_namer   r   service	span_type)r   context_with_datar   r	   r   r   WORKER)r   r   r   r    r   b/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/contrib/internal/azure_eventhubs/utils.pycreate_context   s   
r   spanevent_data_arg_valuec                 C   s   t |ttfrt| | d S t |tr*|r*t |d ttfr*|D ]}t| | q d S t |trL|jD ]}t|}|d urK|jd urK|j	d urK| 
| q2d S d S )Nr   )
isinstancer   r   inject_contextlistr   _internal_eventsextract_contexttrace_idspan_id	link_span)r    r!   event
event_dataparent_contextr   r   r   $handle_event_hubs_event_data_context&   s*   




r-   r+   c                 C   s    t | tr| n| j}t|jS N)r"   r   _messager   extractapplication_properties)r+   msgr   r   r   r&   @   s   r&   c                 C   sb   i }t | j| t|tr|jsi |_|j| dS t|tr/|js'i |_|j| dS dS )ak  
    EventData.properties is of type Dict[str | bytes, Any] | None
    AmqpAnnotatedMessage.application_properties is of type Dict[str | bytes, Any] | None
    while HTTPPropagator.inject expects type of Dict[str, str].

    Inject the context into an empty dictionary and merge it with properties or application_properties
    to preserve the original type.
    N)	r   injectcontextr"   r   
propertiesupdater   r1   )r    r+   inject_carrierr   r   r   r#   E   s   	

r#   c                 C   s   t | trd }| j}||fS t | tr0d }t| jdd }|r*t| p%d }||fS d }||fS t | trBtt	| j
}d }||fS t | trOtt	| }d }||fS )N
message_id)r"   r   r8   r   getattrr5   strstripr   lenr%   r$   )r!   batch_countr8   message_id_rawr   r   r   handle_event_data_attributes_   s(   

	

r?   ctxargskwargsmessage_operationresource_namefully_qualified_namespaceevent_data_argc           
      C   s`   t ||d|d}|d u rd S t|\}}	tjjrt| j| td| tj|t	j
||||	f d S )Nr   Tz azure.eventhubs.message_modifier)r   r?   r	   r   distributed_tracingr-   r    r   dispatchazure_eventhubsxSERVICE)
r@   rA   rB   rC   rD   rE   rF   r!   r8   r=   r   r   r   dispatch_message_modifiery   s$   	rK   r.   ))typingr   r   r   uuidr   azure.eventhubr   r   azure.eventhub.amqpr   ddtracer	   ddtrace._trace.pinr
   ddtrace._trace.spanr   ddtrace.contrib.trace_utilsr   ddtrace.extr   r   rI   ddtrace.internalr   ddtrace.internal.utilsr   ddtrace.propagation.httpr   ddtrace.tracer   r:   ExecutionContextr   r$   r-   r&   r#   tupler?   rK   r   r   r   r   <module>   sx    


