o
    hb                     @   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mZ d dlmZmZ d d	lmZmZ zd d
lmZ d dlmZ d dlmZ W n ey[   edw ervd dlmZ d dlmZ d dlm Z  d dl!m"Z" G dd deZ#dd Z$dd Z%dd Z&dd Z'dd Z(dS )    )absolute_import	text_type)TYPE_CHECKING)SPANDATA)attach_explain_plan_to_span)Hub)IntegrationDidNotEnable)add_query_sourcerecord_sql_queries)capture_internal_exceptionsparse_version)Engine)listen)__version__zSQLAlchemy not installed.)Any)ContextManager)Optional)Spanc                   @   s   e Zd ZdZedd ZdS )SqlalchemyIntegration
sqlalchemyc                  C   sV   t t} | d u rtdt| dk rtdttdt ttdt ttdt d S )Nz!Unparsable SQLAlchemy version: {})      z!SQLAlchemy 1.2 or newer required.before_cursor_executeafter_cursor_executehandle_error)	r   SQLALCHEMY_VERSIONr
   formatr   r   _before_cursor_execute_after_cursor_execute_handle_error)version r#   e/var/www/html/aiguide_backend/venv/lib/python3.10/site-packages/sentry_sdk/integrations/sqlalchemy.py
setup_once   s   z SqlalchemyIntegration.setup_onceN)__name__
__module____qualname__
identifierstaticmethodr%   r#   r#   r#   r$   r      s    r   c                 G   s   t j}|td u rd S t|||||r|jr|jjpd |d}||_| }	|	d urLt	|	|  |j
rG|j
jd d}
|
d urGt|	| |||
 |	|_d S d S )N)
paramstyleexecutemany_experimentsattach_explain_plans)r   currentget_integrationr   r   dialectr+   _sentry_sql_span_manager	__enter___set_db_dataclientoptionsgetr   _sentry_sql_span)conncursor	statement
parameterscontextr,   argshubctx_mgrspanr6   r#   r#   r$   r   1   s6   

r   c           	      G   s   t j}|td u rd S t|dd }|d ur d |_|d d d  |j}|d urBt  t	|| W d    d S 1 s;w   Y  d S d S )Nr2   )
r   r/   r0   r   getattrr2   __exit__r8   r   r   )	r9   r:   r;   r<   r=   r>   r?   r@   rA   r#   r#   r$   r    T   s   "r    c                 G   s`   | j }|d u r	d S t|dd }|d ur|d t|dd }|d ur.d |_|d d d  d S d S )Nr8   internal_errorr2   )execution_contextrB   
set_statusr2   rC   )r=   r>   rE   rA   r@   r#   r#   r$   r!   h   s   
r!   c                 C   sH   t | } d| v r
dS d| v rdS d| v rdS d| v rdS d| v r"dS d S )Nsqlitepostgres
postgresqlmariadbmysqloracler   )namer#   r#   r$   _get_db_system   s   rN   c                 C   s   t |jj}|d ur| tj| |jjj}|d ur!| tj| |jjj	}|d ur1| tj
| |jjj}|d urC| tj| d S d S )N)rN   enginerM   set_datar   	DB_SYSTEMurldatabaseDB_NAMEhostSERVER_ADDRESSportSERVER_PORT)rA   r9   	db_systemdb_nameserver_addressserver_portr#   r#   r$   r4      s   


r4   N))
__future__r   sentry_sdk._compatr   sentry_sdk._typesr   sentry_sdk.constsr   %sentry_sdk.db.explain_plan.sqlalchemyr   sentry_sdk.hubr   sentry_sdk.integrationsr	   r
   sentry_sdk.tracing_utilsr   r   sentry_sdk.utilsr   r   sqlalchemy.enginer   sqlalchemy.eventr   r   r   r   ImportErrortypingr   r   r   sentry_sdk.tracingr   r   r   r    r!   rN   r4   r#   r#   r#   r$   <module>   s6    #