o
    iz                     @   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  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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)UUIDN)ServiceBusMessage)ServiceBusMessageBatch)AmqpAnnotatedMessage)config)Pin)Span)ext_service)	SpanTypes)azure_servicebus)core)get_argument_value)HTTPPropagator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   c/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/contrib/internal/azure_servicebus/utils.pycreate_context   s   
r   spanmessage_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jrL|jD ]}t	|j
j}|jd urK|jd urK| | q3d S d S )Nr   )
isinstancer   r   inject_contextlistr   r   	_messagesr   extract_messageapplication_propertiestrace_idspan_id	link_span)r   r    messageparent_contextr   r   r   "handle_service_bus_message_context'   s&   	

r-   r+   c                 C   s.   i }t | j| |jsi |_|j| dS )a|  
    ServiceBusMessage.application_properties is of type Dict[str | bytes, PrimitiveTypes] | 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 application_properties
    to preserve the original type.
    N)r   injectcontextr'   update)r   r+   inject_carrierr   r   r   r"   @   s
   	r"   c                 C   s   t | tjrd }| j}||fS t | tjr2d }t| jdd }|r,t|	 p'd }||fS d }||fS t | tj
rEtt| j}d }||fS t | trRtt| }d }||fS )N
message_id)r!   r   r   r2   azure_servicebus_amqpr   getattr
propertiesstrstripr   lenr$   r#   )r    batch_countr2   message_id_rawr   r   r   %handle_service_bus_message_attributesS   s(   	
r;   ctxargskwargsmessage_operationresource_namefully_qualified_namespacemessage_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.servicebus.message_modifier)r   r;   r	   r   distributed_tracingr-   r   r   dispatchazure_servicebusxSERVICE)
r<   r=   r>   r?   r@   rA   rB   r    r2   r9   r   r   r   dispatch_message_modifierp   s$   	rG   )N))typingr   r   r   uuidr   azure.servicebus
servicebusr   r   r   azure.servicebus.amqpamqpr3   r   ddtracer	   ddtrace._trace.pinr
   ddtrace._trace.spanr   ddtrace.contrib.trace_utilsr   ddtrace.extr   rE   ddtrace.internalr   ddtrace.internal.utilsr   ddtrace.propagation.httpr   r6   ExecutionContextr   r#   r-   r"   tupler;   rG   r   r   r   r   <module>   s    


