o
    h                     @  sP  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	m
Z
 d dlmZ d dlmZmZ d dlmZmZ d dlmZ d d	lmZmZ d d
lmZmZ zd dlZW n ey[   edw eejZedurmedk rmedG dd deZedZ d5ddZ!ede
dZ"ej#ddd6d%d&Z$ddd7d'd(Z%d8d*d+Z&d5d,d-Z'd9d3d4Z(dS ):    )annotationsN)AnyTypeVarCallable	AwaitableIterator)
BaseCursor)Hub)OPSPANDATA)IntegrationDidNotEnable)Span)add_query_sourcerecord_sql_queries)parse_versioncapture_internal_exceptionszasyncpg not installed.)r      r   zasyncpg >= 0.23.0 requiredc                   @  s2   e Zd ZdZdZdddddZedd
dZdS )AsyncPGIntegrationasyncpgF)record_paramsr   boolc                C  s
   |t _d S )N)r   _record_params)selfr    r   b/var/www/html/aiguide_backend/venv/lib/python3.10/site-packages/sentry_sdk/integrations/asyncpg.py__init__   s   
zAsyncPGIntegration.__init__returnNonec                   C  sh   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)_wrap_executer   
Connectionexecute_wrap_connection_method_execute_executemany_wrap_cursor_creationcursorprepare_wrap_connect_addrconnect_utils_connect_addrr   r   r   r   
setup_once"   s   
zAsyncPGIntegration.setup_onceN)r   r   )r   r   )__name__
__module____qualname__
identifierr   r   staticmethodr-   r   r   r   r   r      s    r   TfCallable[..., Awaitable[T]]r   c                      d fdd}|S )	Nargsr   kwargsr   r3   c                    s   t j}|t}|d u st| dkr | i |I d H S | d }t|d |d d dd} | i |I d H }W d    n1 s@w   Y  t  t|| W d    |S 1 sYw   Y  |S )N      Fr   )r	   currentget_integrationr   lenr   r   r   )r7   r8   hubintegrationqueryspanresr4   r   r   _inner9   s$   

z_wrap_execute.<locals>._innerr7   r   r8   r   r   r3   r   r4   rD   r   rC   r   r!   8   s   r!   	SubCursor)boundFr   r>   r	   r(   SubCursor | Noner@   strparams_listtuple[Any, ...] | Noner    r   Iterator[Span]c             	   c  sh    |  t}|jsd }|rdnd }t| ||||||d ud}|V  W d    d S 1 s-w   Y  d S )Npyformat)r    record_cursor_repr)r<   r   r   r   )r>   r(   r@   rK   r    r?   param_stylerA   r   r   r   _recordU   s"   
	"rQ   c                  s   d fdd}|S )	Nr7   r   r8   r   r3   c                    s   t j}|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 sMw   Y  |S )Nr:   r9   r   r   )r	   r;   r<   r   r=   rQ   _set_db_datar7   r8   r>   r?   r@   rK   rA   rB   r    r4   r   r   rD   s   s   

z'_wrap_connection_method.<locals>._innerrE   r   )r4   r    rD   r   rT   r   r$   p   s   r$   Callable[..., T]c                   r6   )	Nr7   r   r8   r   r3   c                    s   t j}|t}|d u r | i |S | d }t| dkr!| d nd }t|d ||dd}t|| d   | i |}|d| W d    |S 1 sLw   Y  |S )Nr:   r9   Fr   r   z	db.cursor)r	   r;   r<   r   r=   rQ   rR   set_datarS   rC   r   r   rD      s*   

z%_wrap_cursor_creation.<locals>._innerrE   r   rF   r   rC   r   r'      s   r'   c                   r6   )	Nr7   r   r8   r   r3   c            	   	     s8  t j}|t}|d u r | i |I d H S |d j}|d j}|jtjddi}|	t
jd |d}|rVz|	t
j|d  |	t
j|d  W n	 tyU   Y nw |	t
j| |	t
j| t  |jdd|jd	 W d    n1 s{w   Y   | i |I d H }W d    |S 1 sw   Y  |S )
Nparamsconnect)opdescription
postgresqladdrr   r:   r@   )messagecategorydata)r	   r;   r<   r   userdatabase
start_spanr
   DBrV   r   	DB_SYSTEMgetSERVER_ADDRESSSERVER_PORT
IndexErrorDB_NAMEDB_USERr   add_breadcrumb_data)	r7   r8   r>   r?   r`   ra   rA   r\   rB   rC   r   r   rD      s6   




z"_wrap_connect_addr.<locals>._innerrE   r   rF   r   rC   r   r*      s   r*   rA   r   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 )Nr[   r   r:   )rV   r   rd   _addrrf   rg   rh   _paramsra   ri   r`   rj   )rA   rm   r\   ra   r`   r   r   r   rR      s    rR   )r4   r5   r   r5   )r>   r	   r(   rI   r@   rJ   rK   rL   r    r   r   rM   )r4   r5   r    r   r   r5   )r4   rU   r   rU   )rA   r   rm   r   r   r   ))
__future__r   
contextlibtypingr   r   r   r   r   asyncpg.cursorr   
sentry_sdkr	   sentry_sdk.constsr
   r   sentry_sdk.integrationsr   r   sentry_sdk.tracingr   sentry_sdk.tracing_utilsr   r   sentry_sdk.utilsr   r   r   ImportError__version__asyncpg_versionr   r3   r!   rG   contextmanagerrQ   r$   r'   r*   rR   r   r   r   r   <module>   s<    



 