o
    i                     @   s   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 eeZdd
dZdd Z	dddZdddZdddZdddZdd ZdS )    Nfunction_wrapper)config)Pin)trace_utils)core)	COMPONENT)
get_logger)	func_namec                 C   s   t || |pt||ddS )NT)resourcedo_dispatch_wrap_call_with_pin_checkr
   instancefuncnamer    r   [/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/contrib/internal/flask/wrappers.py	wrap_view   s   r   c                   C   s   zt jW S  ty   Y dS w )z>Helper to get the flask.app.Flask from the current app contextN)flaskcurrent_appRuntimeErrorr   r   r   r   get_current_app   s   r   Fc	              	   C   s$  |pg }|pi }t tjji}	|r||	d< tjd|||t|tj||	dc}
|
jO |rct	d|f}|j
}|rN|j}|rN| W  d    W  d    S |j}|rc|j}|rc|D ]}|| ||< qZ| |i |W  d    W  d    S 1 s{w   Y  W d    d S 1 sw   Y  d S )Nzflask.signalz
flask.call)	span_namepinr   service	span_typetagszflask.wrapped_view)r   r   r   integration_namer   context_with_datar   int_servicespandispatch_with_results	callbacksvaluecheck_kwargs)wrappedr   r   r   signalr   r   argskwargsr   ctxdispatchresultcallback_block_kwargskr   r   r   
_wrap_call   sH   	Rr1   c                    s    t  fdd}|| S )Nc              
      sD   t | |t }|r| s| |i |S t| | ||dS )N)r   r(   r   r)   r*   )r   _findr   enabledr1   )r'   	_instancer)   r*   r   r   r   r   r   r(   r   r   
patch_funcI   s   z-_wrap_call_with_pin_check.<locals>.patch_funcr   )r   r   r   r   r(   r   r6   r   r5   r   r   H   s   r   c                 C   s   t || |pt||dS )N)r   r   r   r   r   r   wrap_functionU   s   r7   c                    s   t  fdd}|S )Nc                    s   t ||  ||dS )N)r   r)   r*   )r1   )r   r'   r   r)   r*   r   r   r   r   wrapperZ   s   z$simple_call_wrapper.<locals>.wrapper)with_instance_pin)r   r   r9   r   r8   r   simple_call_wrapperY   s   r;   c                    s    fdd}|S )z[Helper to wrap a function wrapper and ensure an enabled pin is available for the `instance`c                    s:   t | |t }|r| s| |i |S  || |||S N)r   r2   r   r3   )r'   r   r)   r*   r   r   r   r   r9   d   s   z"with_instance_pin.<locals>.wrapperr   )r   r9   r   r=   r   r:   a   s   r:   )NN)NNNFNN)NNFr<   )r   wraptr   ddtracer   ddtrace._trace.pinr   ddtrace.contribr   ddtrace.internalr   ddtrace.internal.constantsr   ddtrace.internal.loggerr	    ddtrace.internal.utils.importlibr
   __name__logr   r   r1   r   r7   r;   r:   r   r   r   r   <module>   s$    


*

