o
    i                     @   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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 G dd dejZdd ZdS )    )config)Pin)	SPAN_KIND)dbapi_async)Psycopg3FetchTracedAsyncCursor)Psycopg3TracedAsyncCursor)
patch_conn)ext_service)SpanKind)	SpanTypes)db)core)	COMPONENTc                       s&   e Zd Zd fdd	Zdd Z  ZS )Psycopg3TracedAsyncConnectionNc                    s2   |s
t jjrtnt}tt| j||t j|d d S )N)
cursor_cls)r   psycopgtrace_fetch_methodsr   r   superr   __init__)selfconnpinr   	__class__ e/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/contrib/internal/psycopg/async_connection.pyr      s   z&Psycopg3TracedAsyncConnection.__init__c                    s>   d  jd} fdd} j||i g|R i |I dH S )z8Execute a query and return a cursor to read its results.{}.{}executec               
      sX   z   }|dd rd|_|j| i |I d H W S  ty+ } z|d d }~ww )Nbinary   )cursorgetformatr   	Exceptionwith_traceback)argskwargscurexr   r   r   patched_execute   s   
z>Psycopg3TracedAsyncConnection.execute.<locals>.patched_executeN)r"   _self_datadog_name_trace_method)r   r%   r&   	span_namer*   r   r)   r   r      s   "	z%Psycopg3TracedAsyncConnection.execute)NN)__name__
__module____qualname__r   r   __classcell__r   r   r   r   r      s    	r   c                    s    fdd}|S )Nc                    s   t }t }|r| r|jjs| |i |I d H }n=tjdd| j	| j
t||jtj|ttjt|jjtj|jjidd | |i |I d H }W d    n1 sUw   Y  t|||dS )Nzpsycopg.patched_connectr   T)r-   service	span_typer   tagsmeasured)r   traced_conn_cls)r   r   get_fromenabled_configtrace_connectr   context_with_datar"   r/   r.   r	   r   SQLr   r
   CLIENTr   integration_namer   SYSTEM	dbms_namer   )connect_func_r%   r&   r6   r   r   psycopg_moduler   r   patched_connect_async+   s(   


z<patched_connect_async_factory.<locals>.patched_connect_asyncr   )rD   rE   r   rC   r   patched_connect_async_factory*   s   rF   N)ddtracer   ddtrace._trace.pinr   ddtrace.constantsr   ddtrace.contribr   -ddtrace.contrib.internal.psycopg.async_cursorr   r   +ddtrace.contrib.internal.psycopg.connectionr   $ddtrace.contrib.internal.trace_utilsr	   ddtrace.extr
   r   r   ddtrace.internalr   ddtrace.internal.constantsr   TracedAsyncConnectionr   rF   r   r   r   r   <module>   s    