o
    i                     @   s   d dl mZ d dlm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 eeZG dd dejZG dd dejZdS )    )__version__)_ContextManagerN)config)Pin)_SPAN_MEASURED_KEY)	SPAN_KIND)dbapi)trace_utils)SpanKind)	SpanTypes)db)	COMPONENT)schematize_database_operation)schematize_service_name)parse_version)tracerc                       sH   e Zd ZdZ fddZdd Zdd Zdd	 Zd
d Zdd Z	  Z
S )AIOTracedCursorz8TracedCursor wraps a psql cursor and traces its queries.c                    s,   t t| | ||  tddd| _d S )Nzpostgres.query
postgresql)database_provider)superr   __init__ontor   _datadog_name)selfcursorpin	__class__ ]/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/contrib/internal/aiopg/connection.pyr      s   
zAIOTracedCursor.__init__c           	         s   t | }|r| s||i |I d H }|S tj| jt|tj	|t
jdN}|ttj	j |tjd |ttj |td ||j || z||i |I d H }|W |tj| j W  d    S |tj| j w 1 syw   Y  d S )N)serviceresource	span_typer      )r   get_fromenabledr   tracer   r	   ext_servicer   aiopgr   SQL_set_tag_strr   integration_namer   SYSTEMr   r
   CLIENT
set_metricr   set_tagstagsROWCOUNTrowcount)	r   methodr!   
extra_tagsargskwargsr   resultsr   r   r   _trace_method    s2   

zAIOTracedCursor._trace_methodc                    s2   | j | jj|ddi|g|R i |I d H }|S )Nzsql.executemanytrue)r9   __wrapped__executemanyr   queryr5   r6   r7   r   r   r   r<   =   s   zAIOTracedCursor.executemanyc                    s.   | j | jj|i |g|R i |I d H }|S N)r9   r;   executer=   r   r   r   r@   E   s   (zAIOTracedCursor.executec                    s"   |  | jj|i ||I d H }|S r?   )r9   r;   callproc)r   procr5   r7   r   r   r   rA   I   s   zAIOTracedCursor.callprocc                 C   s
   | j  S r?   )r;   	__aiter__)r   r   r   r   rC   M   s   
zAIOTracedCursor.__aiter__)__name__
__module____qualname____doc__r   r9   r<   r@   rA   rC   __classcell__r   r   r   r   r      s    r   c                       sH   e Zd ZdZdef fdd	Zedkrdd Zndd Zd	d
 Z  Z	S )AIOTracedConnectionz6TracedConnection wraps a Connection with tracing code.Nc                    sD   t t| | t|}t|}|pt|d}||  || _d S )N)r    )	r   rI   r   r   _get_vendorr   r   r   _self_cursor_cls)r   connr   
cursor_clsvendornamedb_pinr   r   r   r   T   s   


zAIOTracedConnection.__init__)r      r   c                 O   s,   |    | j | _| j|i |}t|S r?   )close_cursor_looptime_last_usage_cursorr   r   r5   r6   coror   r   r   r   b   s   zAIOTracedConnection.cursorc                 O   s   | j |i |}t|S r?   )rV   r   rW   r   r   r   r   l   s   c                    s8   | j j|i |I d H }t| }|s|S | ||S r?   )r;   rV   r   r$   rK   )r   r5   r6   r   r   r   r   r   rV   p   s   
zAIOTracedConnection._cursor)
rD   rE   rF   rG   r   r   AIOPG_VERSIONr   rV   rH   r   r   r   r   rI   Q   s    

rI   ) r(   r   aiopg.utilsr   wraptddtracer   ddtrace._trace.pinr   ddtrace.constantsr   r   ddtrace.contribr   r	   ddtrace.extr
   r   r   ddtrace.internal.constantsr   ddtrace.internal.schemar   r   ddtrace.internal.utils.versionr   ddtrace.tracer   rY   ObjectProxyr   rI   r   r   r   r   <module>   s(    9