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 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efddZzd dlZ ddlm Z  ddl!m"Z" dZ#e j$j%Z&e j$j'Z(W n e)y   dZ#dZ&dZ(Y nw e*de+ee	j,dd e*de+ee	j-dd e*de+ee	j-dd e#re*de+ee	j.dd e*de+ee	j/dd de+eef fddZ0dd  Z1d!d" Z2d#d$ Z3d%d& Z4d'd( Z5d)d* Z6d+d, Z7d-d. Z8d/d0 Z9d1d2 Z:d3d4 Z;d5d6 Z<d7d8 Z=d9d: Z>dS );    N)wrap_function_wrapper)config)Pin)	constants)utils)create_client_interceptor)intercept_channel)create_server_interceptor)unwrap)
get_logger)schematize_service_name)get_argument_value)set_argument_valuereturnc                   C   s   t tddS )N__version__ )getattrgrpc r   r   W/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/contrib/internal/grpc/patch.pyget_version   s   r      )create_aio_client_interceptors)create_aio_server_interceptorTFgrpc_server)_default_servicedistributed_tracing_enabledgrpc_clientr   grpc_aio_servergrpc_aio_clientc                   C   s   ddiS )Nr   z>=1.34r   r   r   r   r   _supported_versionsZ   s   r    c                   C   s0   t   t  trtd t  t  dt_d S )Nz]The ddtrace grpc aio patch is enabled. This is an experimental feature and may not be stable.T)	_patch_client_patch_serverHAS_GRPC_AIOlogdebug_patch_aio_client_patch_aio_serverr   _datadog_patchr   r   r   r   patch^   s   

r)   c                   C   s&   t   t  trt  t  dt_d S )NF)_unpatch_client_unpatch_serverr#   _unpatch_aio_client_unpatch_aio_serverr   r(   r   r   r   r   unpatchh   s   
r.   c                   C   sP   t tjddr	d S dtj_t tj tddt tddt tddt d S )N__datadog_patchFTr   insecure_channelsecure_channelr   )	r   r   GRPC_PIN_MODULE_CLIENTr/   r   onto_w_client_channel_interceptorr   r   r   r   r   r!   q   s   r!   c                   C   s>   t tddrd S dt_t t tddt tddt d S )Nr/   FTgrpc.aior0   r1   )r   GRPC_AIO_PIN_MODULE_CLIENTr/   r   r3   r4   _aio_client_channel_interceptorr   r   r   r   r&   }   s   r&   c                  C   sX   t tjdds	d S dtj_ttj} | r| tj ttd ttd ttd d S )Nr/   Fr1   r0   r   )	r   r   r2   r/   r   get_fromremove_from_ur   pinr   r   r   r*      s   

r*   c                  C   sJ   t tddsd S dt_tt} | r| t ttjd ttjd d S )Nr/   Fr0   r1   )	r   r7   r/   r   r9   r:   r;   r   aior<   r   r   r   r,      s   

r,   c                   C   s8   t tjddr	d S dtj_t tj tddt d S )Nr/   FTr   server)r   r   GRPC_PIN_MODULE_SERVERr/   r   r3   r4   _server_constructor_interceptorr   r   r   r   r"      s
   r"   c                   C   s2   t tddrd S dt_t t tddt d S )Nr/   FTr6   r?   )r   GRPC_AIO_PIN_MODULE_SERVERr/   r   r3   r4   #_aio_server_constructor_interceptorr   r   r   r   r'      s
   r'   c                  C   sD   t tjdds	d S dtj_ttj} | r| tj ttd d S Nr/   Fr?   )	r   r   r@   r/   r   r9   r:   r;   r   r<   r   r   r   r+      s   r+   c                  C   s>   t tddsd S dt_tt} | r| t ttjd d S rD   )	r   rB   r/   r   r9   r:   r;   r   r>   r<   r   r   r   r-      s   

r-   c           	      C   sR   | |i |}t tj}|r| s|S t||\}}t|||}t	||S )N)
r   r9   r   r2   enabledr   _parse_target_from_argsr   r   r   )	wrappedinstanceargskwargschannelr=   hostportinterceptor_functionr   r   r   r5      s   r5   c           
      C   s   t t}|r| s| |i |S t||\}}t|||}d}| jdkr)d}t|||dd}	|	rBt	|||d|t
|	 \}}nt	|||d|d\}}| |i |S )N   r1      interceptorsT)r   r9   r7   rE   r   rF   r   __name__r   r   tuple)
rG   rH   rI   rJ   r=   rL   rM   dd_interceptorsinterceptor_indexrQ   r   r   r   r8      s   


r8   c                 C   sf   t tj}|r| s| |i |S t|}d|v r'|ft|d  |d< n|f|d< | |i |S NrQ   )r   r9   r   r@   rE   r	   rS   rG   rH   rI   rJ   r=   interceptorr   r   r   rA      s   
rA   c                 C   sd   t t}|r| s| |i |S t|}d|v r&|ft|d  |d< n|f|d< | |i |S rV   )r   r9   rB   rE   r   rS   rW   r   r   r   rC     s   

rC   )?r   wraptr   r4   ddtracer   ddtrace._trace.pinr   ddtrace.contrib.internal.grpcr   r   0ddtrace.contrib.internal.grpc.client_interceptorr   r   0ddtrace.contrib.internal.grpc.server_interceptorr	   $ddtrace.contrib.internal.trace_utilsr
   r;   ddtrace.internal.loggerr   ddtrace.internal.schemar   ddtrace.internal.utilsr   r   rR   r$   strr   grpc.aioaio_client_interceptorr   aio_server_interceptorr   r#   r>   ServerrB   Channelr7   ImportError_adddictGRPC_SERVICE_SERVERGRPC_SERVICE_CLIENTGRPC_AIO_SERVICE_SERVERGRPC_AIO_SERVICE_CLIENTr    r)   r.   r!   r&   r*   r,   r"   r'   r+   r-   r5   r8   rA   rC   r   r   r   r   <module>   s    		
	

