o
    iT                  
   @   sR  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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! e"de#edee j$dddd de%fddZ&de#e%e%f fddZ'dd Z(d d! Z)d"d# Z*d$d% Z+dS )&    N)	urlencode)wrap_function_wrapper)config)Pin)trace_utils)unwrap)	SpanTypes)core)schematize_service_name)schematize_url_operation)SpanDirection)asbool)	func_name   WrapperComponentWrapperMiddlewareWrapperRenderer)WrapperRoutermoltenDD_MOLTEN_DISTRIBUTED_TRACINGT)default)_default_servicedistributed_tracingreturnc                   C   s   t tddS )N__version__ )getattrr    r    r    Y/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/contrib/internal/molten/patch.pyget_version#   s   r"   c                   C   s   ddiS )Nr   z>=1.0r    r    r    r    r!   _supported_versions'   s   r#   c                  C   sF   t tddrd S dt_t } | t ttjdt ttjdt	 d S )N_datadog_patchFT__init____call__)
r   r   r$   r   onto_wBaseApppatch_app_initApppatch_app_callpinr    r    r!   patch+   s   
r/   c                  C   sJ   t tddr#dt_tt} | r| t ttjd ttjd d S d S )Nr$   Fr%   r&   )	r   r   r$   r   get_fromremove_from_ur)   r+   r-   r    r    r!   unpatch8   s   

r3   c                    s  t t}|r| s| |i |S |\}}tjj|t| }tj	dt
ddtjdtjt|tj|i tjtjddddv}|jb |d  td|tjf tj fdd	}	|	|}d
jjjjf }
|ddtji td tjj|
d ttj jd d df
 | ||fi |W  d    W  d    S 1 sw   Y  W d    d S 1 sw   Y  d S )Nzmolten.requesthttp)protocol	directionT)
	span_name	span_typeserviceresourcetagsdistributed_headersintegration_configallow_default_resourceactivate_distributed_headersheaders_case_sensitivereq_spanzweb.request.startc           
         sp   t t}|r| s| |i |S |\}}}|d\}}	}	td tjjd |d d d d df
 | |i |S )N web.request.finishF)	r   r0   r   enabled	partitionr	   dispatchr   method)
wrappedinstanceargskwargsr.   statusheadersexc_infocode_rA   requestr    r!   _w_start_responsed   s   

z)patch_app_call.<locals>._w_start_responsez%s://%s:%s%sadditional_tagszmolten.versionrC   F)!r   r0   r   rD   r4   Requestfrom_environr   r	   context_with_datar   r   INBOUNDr   WEBr   int_servicer   dictrM   spanset_itemrF   wraptfunction_wrapperschemehostportpathr   rG   r   params)rH   rI   rJ   rK   r.   environstart_responser:   ctxrS   urlr    rQ   r!   r,   D   sh   
Rr,   c                 C   sr   | |i | t t}|r| sd S t|j|_dd |jD |_dd |jjD |j_dd |j	D |_	d S )Nc                 S      g | ]}t |qS r    r   ).0mwr    r    r!   
<listcomp>       z"patch_app_init.<locals>.<listcomp>c                 S   ri   r    r   )rj   cr    r    r!   rl      rm   c                 S   ri   r    r   )rj   rr    r    r!   rl      rm   )
r   r0   r   rD   r   router
middlewareinjector
components	renderers)rH   rI   rJ   rK   r.   r    r    r!   r*      s   
r*   ),osurllib.parser   r   r^   r   r(   ddtracer   ddtrace._trace.pinr   ddtrace.contribr   $ddtrace.contrib.internal.trace_utilsr   r2   ddtrace.extr   ddtrace.internalr	   ddtrace.internal.schemar
   r   -ddtrace.internal.schema.span_attribute_schemar   ddtrace.internal.utils.formatsr    ddtrace.internal.utils.importlibr   wrappersr   r   r   r   _addr[   getenvstrr"   r#   r/   r3   r,   r*   r    r    r    r!   <module>   sB    	M