o
    h                     @   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d Zdd ZdddZdd Zdd Z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_manyc                 C   s   t t| ||S N)r   r   )method_nameargskwargs r   h/var/www/html/pro-man-master/venv/lib/python3.10/site-packages/sentry_sdk/integrations/django/caching.py_get_span_description   s   r   c                    s\   ddl m  tt  fddtfdd}t| d S )Nr   DjangoIntegrationc              	      sp  | d}| }|rtjntj}	t|||}
tj|	|
 jd}||i |}t s |d ur6|	t
j| |d urA|	t
j| t|||}|d urR|	t
j| d }|rn|rftt|}|	t
jd n%|	t
jd nt|}|dkrt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   )opnameoriginTF      r   )
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)cacher   original_methodr   r   addressportis_set_operationis_get_operationr   descriptionspanvaluekey	item_size	arg_countr   r   r   _instrument_call*   sH   
$z-_patch_cache_method.<locals>._instrument_callc                     s    | |S r   r   )r   r   )r:   r0   r.   r   r/   r1   r   r   sentry_method\   s   z*_patch_cache_method.<locals>.sentry_method)sentry_sdk.integrations.djangor   getattrr   	functoolswrapssetattr)r.   r   r0   r1   r;   r   )r   r:   r0   r.   r   r/   r1   r   _patch_cache_method$   s   
1rA   c                 C   s0   t | dstD ]	}t| ||| qd| _d S d S )N_sentry_patchedT)hasattrMETHODS_TO_INSTRUMENTrA   rB   )r.   r0   r1   r   r   r   r   _patch_cachef   s
   

rE   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   
isinstancer+   urlparseformatschemehostnamepathr1   int)settingslocation
parsed_urlr0   r1   r   r   r   _get_address_portn   s   

rS   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   rP   T)
r<   r   r$   
get_clientget_integrationdjango.confrP   	spotlightDEBUGcache_spans)r   clientintegrationrP   r   r   r   should_enable_cache_spans   s   
r]   c                     sn   t tds5tdk rtjtfdd} | t_dt_d S tj t  fdd}|t_dt_d S d S )NrB   )   r   c                    sB    | |}t  rddlm} t|j|pd \}}t||| |S )Nr   rT   default)r]   rW   rP   rS   CACHESrE   )selfaliasr.   rP   r0   r1   )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_   )r]   rS   rP   rE   )ra   rb   r.   r0   r1   )original_create_connectionr   r   sentry_create_connection   s
   
z/patch_caching.<locals>.sentry_create_connection)rC   r   DJANGO_VERSION__getitem__r>   r?   rB   create_connection)rd   rf   r   )re   rc   r   patch_caching   s   


rj   rG   )r>   typingr   #sentry_sdk.integrations.redis.utilsr   r   urllib3.utilr   rJ   djangor   rg   django.core.cacher   r$   sentry_sdk.constsr   r	   sentry_sdk.utilsr
   r   r   r   r   rD   r   rA   rE   rS   r]   rj   r   r   r   r   <module>   s(    
B