o
    in                     @   s  d dl 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 edeedee deee 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d  ZdS )!    N)config)Pin)_instrument_redis_cmd)"_instrument_redis_execute_pipeline)_run_redis_command_async)schematize_service_name)CMD_MAX_LEN)asbool)stringify_cache_args)unwraparedisredisDD_AREDIS_CMD_MAX_LENGTHDD_REDIS_RESOURCE_ONLY_COMMANDT)_default_servicecmd_max_lengthresource_only_command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/aredis/patch.pyget_version   s   r   c                   C   s   ddiS )Nr   *r   r   r   r   r   _supported_versions    s   r   c                  C   sb   t tddrdS dt_tj} | ddt | ddt | dd	t | dd
t tdd	tj
 dS )zPatch the instrumented methods_datadog_patchFNTzaredis.clientzStrictRedis.execute_commandzStrictRedis.pipelinezaredis.pipelinezStrictPipeline.executez(StrictPipeline.immediate_execute_command)service)r   r   r   wraptwrap_function_wrappertraced_execute_commandtraced_pipelinetraced_execute_pipeliner   ontoStrictRedis)_wr   r   r   patch$   s   r&   c                   C   sR   t tddr'dt_ttjjd ttjjd ttjjd ttjjd d S d S )Nr   Fexecute_commandpipelineexecuteimmediate_execute_command)r   r   r   r   clientr$   r(   StrictPipeliner   r   r   r   unpatch3   s   r-   c                    sv   t |}|r| s| |i |I d H S t|tj||}t|| ||dI d H W  d    S 1 s4w   Y  d S )N)ctxfuncargskwargs)r   get_fromenabledr   r   r   r   )r/   instancer0   r1   pinr.   r   r   r   r    @   s   
$r    c                    s2   | |i |I d H }t |}|r|| |S )N)r   r2   r#   )r/   r4   r0   r1   r(   r5   r   r   r   r!   I   s   

r!   c                    s   t |}|r| s| |i |I d H S dd |jD }t|tj|| | |i |I d H W  d    S 1 s;w   Y  d S )Nc                 S   s    g | ]\}}t |tjjd qS ))cmd_max_len)r
   r   r   r   ).0c_r   r   r   
<listcomp>V   s     z+traced_execute_pipeline.<locals>.<listcomp>)r   r2   r3   command_stackr   r   r   )r/   r4   r0   r1   r5   cmdsr   r   r   r"   Q   s   
$r"   )osr   r   ddtracer   ddtrace._trace.pinr   $ddtrace.contrib.internal.redis_utilsr   r   r   ddtrace.internal.schemar   ddtrace.internal.utils.formatsr   r	   r
   ddtrace.internal.utils.wrappersr   _adddictintgetenvstrr   r   r&   r-   r    r!   r"   r   r   r   r   <module>   s8    
	