o
    ٰi                     @  s2  d dl mZ d dlZd dlmZmZmZmZmZ d dl	Z	d dl
mZmZ d dlmZmZmZ d dlmZ d dlmZmZ d dlmZmZmZ zd dlZd d	lmZ W n ey]   ed
w G dd deZedZd0ddZ ededZ!ej"ddd1d d!Z#ddd2d"d#Z$d3d%d&Z%d0d'd(Z&d4d.d/Z'dS )5    )annotationsN)AnyTypeVarCallable	AwaitableIterator)OPSPANDATA)_check_minimum_versionIntegrationDidNotEnable)Span)add_query_sourcerecord_sql_queries)ensure_integration_enabledparse_versioncapture_internal_exceptions)
BaseCursorzasyncpg not installed.c                   @  s<   e Zd ZdZde ZdZdddddZedddZdS )AsyncPGIntegrationasyncpgzauto.db.F)record_paramsr   boolc                C  s
   |t _d S )N)r   _record_params)selfr    r   S/home/ubuntu/.local/lib/python3.10/site-packages/sentry_sdk/integrations/asyncpg.py__init__   s   
zAsyncPGIntegration.__init__returnNonec                  C  s|   t tj} tt|  ttjjtj_ttjj	tj_	ttjj
ddtj_
ttjjtj_ttjjtj_ttjjtj_d S )NTexecutemany)r   r   __version__r
   r   _wrap_execute
Connectionexecute_wrap_connection_method_execute_executemany_wrap_cursor_creationcursorprepare_wrap_connect_addrconnect_utils_connect_addr)asyncpg_versionr   r   r   
setup_once    s    


zAsyncPGIntegration.setup_onceN)r   r   )r   r   )	__name__
__module____qualname__
identifieroriginr   r   staticmethodr/   r   r   r   r   r      s    
r   Tf'Callable[..., Awaitable[T]]'r   c                      d fdd}|S )	Nargs'Any'kwargsr   'T'c                    s   t  td u r | i |I d H S t| dkr$ | i |I d H S | d }td |d d dtjd} | i |I d H }W d    n1 sHw   Y  t  t| W d    |S 1 s`w   Y  |S )N      F)r)   queryparams_list
paramstyler    span_origin)	
sentry_sdk
get_clientget_integrationr   lenr   r4   r   r   )r:   r<   r@   spanresr7   r   r   _inner;   s.   


z_wrap_execute.<locals>._innerr:   r;   r<   r;   r   r=   r   r7   rK   r   rJ   r   r"   :   s   r"   	SubCursor)boundFr   r)   'SubCursor | None'r@   strrA   'tuple[Any, ...] | None'r    r   'Iterator[Span]'c             	   c  sv    t  t}|d ur|jsd }|rdnd }t| ||||| d utjd}|V  W d    d S 1 s4w   Y  d S )Npyformat)r)   r@   rA   rB   r    record_cursor_reprrC   )rD   rE   rF   r   r   r   r4   )r)   r@   rA   r    integrationparam_stylerH   r   r   r   _record\   s"   "rX   c                  s   d fdd}|S )	Nr:   r;   r<   r   r=   c                    s   t  td u r| i |I d H S | d }t| dkr"| d nd }td || d}t|| d  | i |I d H }W d    |S 1 sIw   Y  |S )Nr?   r>   r   r   )rD   rE   rF   r   rG   rX   _set_db_datar:   r<   r@   rA   rH   rI   r    r7   r   r   rK   y   s   
z'_wrap_connection_method.<locals>._innerrL   r   )r7   r    rK   r   r[   r   r%   v   s   r%   'Callable[..., T]'c                   s   t t d fdd}|S )	Nr:   r;   r<   r   r=   c                    s~   | d }t | dkr| d nd }td ||dd}t|| d   | i |}|d| W d    |S 1 s8w   Y  |S )Nr?   r>   Fr   r   z	db.cursor)rG   rX   rY   set_datarZ   rJ   r   r   rK      s    


z%_wrap_cursor_creation.<locals>._innerrL   )r   r   rM   r   rJ   r   r(      s   r(   c                   r9   )	Nr:   r;   r<   r   r=   c               	     s6  t  td u r | i |I d H S |d j}|d j}t jtjdtj	di}|
tjd |d}|rUz|
tj|d  |
tj|d  W n	 tyT   Y nw |
tj| |
tj| t  t jdd|jd	 W d    n1 szw   Y   | i |I d H }W d    |S 1 sw   Y  |S )
Nparamsconnect)opnamer4   
postgresqladdrr   r?   r@   )messagecategorydata)rD   rE   rF   r   userdatabase
start_spanr   DBr4   r]   r	   	DB_SYSTEMgetSERVER_ADDRESSSERVER_PORT
IndexErrorDB_NAMEDB_USERr   add_breadcrumb_data)r:   r<   rg   rh   rH   rc   rI   rJ   r   r   rK      s@   



z"_wrap_connect_addr.<locals>._innerrL   r   rM   r   rJ   r   r+      s   r+   rH   'Span'connr;   r   c                 C  s   |  tjd |j}|r*z|  tj|d  |  tj|d  W n	 ty)   Y nw |jj}|r7|  tj	| |jj
}|rF|  tj| d S d S )Nrb   r   r?   )r]   r	   rk   _addrrm   rn   ro   _paramsrh   rp   rg   rq   )rH   ru   rc   rh   rg   r   r   r   rY      s    rY   )r7   r8   r   r8   )
r)   rP   r@   rQ   rA   rR   r    r   r   rS   )r7   r8   r    r   r   r8   )r7   r\   r   r\   )rH   rt   ru   r;   r   r   )(
__future__r   
contextlibtypingr   r   r   r   r   rD   sentry_sdk.constsr   r	   sentry_sdk.integrationsr
   r   r   sentry_sdk.tracingr   sentry_sdk.tracing_utilsr   r   sentry_sdk.utilsr   r   r   r   asyncpg.cursorr   ImportErrorr   r6   r"   rN   contextmanagerrX   r%   r(   r+   rY   r   r   r   r   <module>   s6    


%