o
    iD                  
   @   s"  d dl Z d dlmZ d dlmZmZ d dlmZ d dl	m
Z d dlmZ d dlZd dlmZmZ d dlmZmZ erLd d	lmZ d d
lmZ d dlmZ g dZdedddddefddZdddeddddddf
ddZ	d'							d(ddZ				 d)d!d"Zdefd#d$Zd*d%d&Z dS )+    N)TYPE_CHECKING)_get_safe_key_key_as_string)	parse_url)VERSION)CacheHandler)OPSPANDATA)capture_internal_exceptionsensure_integration_enabled)Any)Callable)Optional)setset_manygetget_manymethod_nameargsz
tuple[Any]kwargsdict[str, Any]returnc                 C   s   t t| ||S N)r   r   )r   r   r    r   c/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/sentry_sdk/integrations/django/caching.py_get_span_description   s   r   cacher   addressOptional[str]portOptional[int]c                    s   ddl m  tt dddtdddd	d
dddddddf fddtdfdd}t| d S )Nr   DjangoIntegrationr   r   r   original_methodzCallable[..., Any]r   ztuple[Any, ...]r   r   r   r   r   r    r   r   c              	      s  | d}|dk}|dk}	|rtjntj}
t|||}tj|
| jd}||i |}t  |d ur;|	t
j| |d urF|	t
j| t|||}|d urW|	t
j| d }|	ru|i krmtt|}|	t
jd nV|	t
jd nN|rd }t|dkr|d }nd	|v r|d	 }||krtt|}|	t
jd n%|	t
jd nt|}|dkrtt|d }n|dkrtt|d
 }|d ur|	t
j| W d    n1 sw   Y  |W  d    S 1 sw   Y  d S )Nr   r   r   )opnameoriginTF      defaultr   )
startswithr   	CACHE_PUT	CACHE_GETr   
sentry_sdk
start_spanr&   r
   set_datar	   NETWORK_PEER_ADDRESSNETWORK_PEER_PORTr   	CACHE_KEYlenstr	CACHE_HITCACHE_ITEM_SIZE)r   r   r#   r   r   r   r   is_set_operationis_get_methodis_get_many_methodr$   descriptionspanvaluekey	item_sizedefault_value	arg_countr!   r   r   _instrument_call/   s^   


*$z-_patch_cache_method.<locals>._instrument_callc                     s    | |S r   r   )r   r   )rA   r   r   r   r#   r   r   r   sentry_methods   s   z*_patch_cache_method.<locals>.sentry_method)r   r   r   r   r   r   )sentry_sdk.integrations.djangor"   getattrr   r4   	functoolswrapssetattr)r   r   r   r   rB   r   )r"   rA   r   r   r   r#   r   r   _patch_cache_method%   s.   
CrH   c                 C   s0   t | dstD ]	}t| ||| qd| _d S d S )N_sentry_patchedT)hasattrMETHODS_TO_INSTRUMENTrH   rI   )r   r   r   r   r   r   r   _patch_cache|   s
   

rL   settings#tuple[Optional[str], Optional[int]]c                 C   sr   |  d}t|tsdS d|v r(t|}d|jpd|jpd|jp"d}|j}n|}d }||d ur6t	|fS d fS )NLOCATIONNNz://z	{}://{}{} )
r   
isinstancer4   urlparseformatschemehostnamepathr   int)rM   location
parsed_urlr   r   r   r   r   _get_address_port   s   

r[   c                  C   sP   ddl m}  t }|| }ddlm} |d uo'|jd ur#|jdu p'|j	du S )Nr   r!   rM   T)
rC   r"   r-   
get_clientget_integrationdjango.confrM   	spotlightDEBUGcache_spans)r"   clientintegrationrM   r   r   r   should_enable_cache_spans   s   
re   c                     s   t tdsCtdk r&tjtdddtddffdd	} | t_d
t_d S tj t dddtddf fdd}|t_d
t_d S d S )NrI   )   r'   selfr   aliasr   r   c                    sB    | |}t  rddlm} t|j|pd \}}t||| |S )Nr   r\   r)   )re   r_   rM   r[   CACHESrL   )rg   rh   r   rM   r   r   )original_get_itemr   r   sentry_get_item   s   
z&patch_caching.<locals>.sentry_get_itemTc                    s6    | |}t  rt| j|pd \}}t||| |S )Nr)   )re   r[   rM   rL   )rg   rh   r   r   r   )original_create_connectionr   r   sentry_create_connection   s
   
z/patch_caching.<locals>.sentry_create_connection)	rJ   r   DJANGO_VERSION__getitem__rE   rF   r4   rI   create_connection)rk   rm   r   )rl   rj   r   patch_caching   s   



rq   rP   )r   r   r   r   r   r    r   N)rM   r   r   rN   )r   N)!rE   typingr   #sentry_sdk.integrations.redis.utilsr   r   urllib3.utilr   rS   djangor   rn   django.core.cacher   r-   sentry_sdk.constsr   r	   sentry_sdk.utilsr
   r   r   r   r   rK   r4   r   rH   rL   r[   boolre   rq   r   r   r   r   <module>   sf    

X
	
