o
    ٰi                     @   s8  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 d dlmZmZ d dlmZmZ erEd dlmZ d d	lmZmZmZ nG d
d dZG dd dZe Zzd dlmZ d dlmZ d dlmZ W n eyu   edw G dd deZedZ edZ!d%ddZ"d%ddZ#d&ddZ$d'd#d$Z%dS )(    N)OPSPANDATA)_check_minimum_versionIntegrationDidNotEnable)Span)should_send_default_pii)capture_internal_exceptionsensure_integration_enabled)TYPE_CHECKINGTypeVar)Iterator)Any	ParamSpecCallablec                   @      e Zd Zdd ZdS )r   c                 C   s   d | _ d | _d S N)argskwargsself_ r   ]/home/ubuntu/.local/lib/python3.10/site-packages/sentry_sdk/integrations/clickhouse_driver.py__init__   s   
zParamSpec.__init__N)__name__
__module____qualname__r   r   r   r   r   r          r   c                   @   r   )	_Callablec                 C   s   d S r   r   r   r   r   r   __getitem__   s   z_Callable.__getitem__N)r   r   r   r    r   r   r   r   r      r   r   )VERSION)Client)
Connectionz clickhouse-driver not installed.c                   @   s(   e Zd ZdZde ZedddZdS )ClickhouseDriverIntegrationclickhouse_driverzauto.db.returnNc                   C   sN   t tt ttjt_t  ttj	t_	t
tdrttjt_ttjt_d S )Nreceive_end_of_insert_query)r   r$   r!   _wrap_startr#   
send_query_wrap_send_data	_wrap_endr"   receive_end_of_queryhasattrr'   receive_resultr   r   r   r   
setup_once-   s   

z&ClickhouseDriverIntegration.setup_oncer&   N)r   r   r   
identifieroriginstaticmethodr/   r   r   r   r   r$   )   s
    
r$   PTfCallable[P, T]r&   c                    s   t t d	 fdd}|S )
Nr   P.argsr   P.kwargsr&   r5   c                     s   | d }| d }t | dkr| d n|d}t | dkr!| d n|d}tjtj|tjd}||_t	|| |
d| |rF|
d	| |rQt rQ|
d
|  | i |}|S )Nr         query_id   params)opnamer2   queryzdb.query_id	db.params)lenget
sentry_sdk
start_spanr   DBr$   r2   _sentry_span_set_db_dataset_datar   )r   r   
connectionrA   r<   r>   spanretr6   r   r   _innerG   s$   

z_wrap_start.<locals>._innerr   r8   r   r9   r&   r5   )r
   r$   )r6   rO   r   rN   r   r(   F   s   r(   c                    s   d	 fdd}|S )
Nr   r8   r   r9   r&   r5   c                     s    | i |}| d }t |jdd }|d urH|d ur#t r#|d| t  |jj|jdd|jd W d    n1 s?w   Y  |	  |S )Nr   rH   z	db.resultrA   )messagecategorydata)
getattrrK   r   rJ   r	   scopeadd_breadcrumb_datapopfinish)r   r   resinstancerL   rN   r   r   
_inner_endi   s   z_wrap_end.<locals>._inner_endrP   r   )r6   r\   r   rN   r   r+   h   s   r+   c                     s    t j 	d fdd	} | t _d S )NFc           	         s   t | jdd }|d ur;t|| j t r;|jdg  t|ttfr( 	| n|d fdd}| }|
d  | ||||g|R i |S )NrH   rB   r&   Iterator[Any]c                  3   s     D ]
}   |  | V  qd S r   )append)item	db_params	orig_datar   r   wrapped_generator   s
   
zD_wrap_send_data.<locals>._inner_send_data.<locals>.wrapped_generator)r&   r]   )rT   rK   rI   r   rW   rD   
isinstancelisttupleextendrJ   )	r   sample_blockrS   types_checkcolumnarr   r   rL   rc   original_send_datar`   r   _inner_send_data   s$   
z)_wrap_send_data.<locals>._inner_send_data)FF)r"   	send_data)rm   r   rk   r   r*   ~   s   
"r*   rL   r   rK   r#   c                 C   sR   |  tjd |  tj|j |  tj|j |  tj|j |  tj	|j
 d S )N
clickhouse)rJ   r   	DB_SYSTEMSERVER_ADDRESShostSERVER_PORTportDB_NAMEdatabaseDB_USERuser)rL   rK   r   r   r   rI      s
   rI   )r6   r7   r&   r7   r0   )rL   r   rK   r#   r&   N)&rE   sentry_sdk.constsr   r   sentry_sdk.integrationsr   r   r   sentry_sdk.tracingr   sentry_sdk.scoper   sentry_sdk.utilsr	   r
   typingr   r   collections.abcr   r   r   r   r   r%   r!   clickhouse_driver.clientr"   clickhouse_driver.connectionr#   ImportErrorr$   r4   r5   r(   r+   r*   rI   r   r   r   r   <module>   s6    

"
(