
    tni                         d dl mZ d dlmZ d dlZd dlmZ d dlmZ d dl	m
Z
 e
rd dlmZ d dl	mZmZ d	d
defdZddZdS )    wraps)SignalN)OP)DJANGO_VERSION)TYPE_CHECKING)Callable)AnyUnionreceiverCallable[..., Any]returnc                 \   d}t          | d          r| j        }n_t          | d          r| j        }nGt          | d          r7t          | d          r't          | j        d          rd| j        j        z   dz   }|dk    rt	          |           S t          | d          r| j        dz   |z   }|S )	N __qualname____name__funczpartial(<function z>)
__module__.)hasattrr   r   r   strr   )r   names     l/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/sentry_sdk/integrations/django/signals_handlers.py_get_receiver_namer      s    Dx(( H$	:	&	& H 	&
 
 H 8V$$ 	H
)K)K 	H'(-*@@4GD 	

8}}x&& 0"S(4/K    c                  `    ddl m t          j        	 	 	 	 	 	 dfd	} | t          _        d
S )z
    Patch django signal receivers to create a span.

    This only wraps sync receivers. Django>=5.0 introduced async receivers, but
    since we don't create transactions for ASGI Django, we don't wrap them.
    r   )DjangoIntegrationselfr   senderr
   r   ZUnion[tuple[list[Callable[..., Any]], list[Callable[..., Any]]], list[Callable[..., Any]]]c                 B   t           dk    r 	| |          \  }}n 	| |          }g }	 	 	 	 dfd}t          j                                                  }|r3|j        r,| |j        vr#t          |          D ]\  }} ||          ||<   t           dk    r||fS |S )N)   r   r   r   r   c                 B     t                     d fd            }|S )Nargsr
   kwargsr   c                      t                    }t          j        t          j        |j                  5 }|                    d|            | i |cd d d            S # 1 swxY w Y   d S )N)opr   originsignal)r   
sentry_sdk
start_spanr   EVENT_DJANGOr(   set_data)r$   r%   signal_namespanr   r   s       r   wrapperzdpatch_signals.<locals>._sentry_live_receivers.<locals>.sentry_sync_receiver_wrapper.<locals>.wrapper?   s    0::*$,3   5 MM(K888#8T4V445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5s   A""A&)A&)r$   r
   r%   r
   r   r
   r   )r   r0   r   s   ` r   sentry_sync_receiver_wrapperzSpatch_signals.<locals>._sentry_live_receivers.<locals>.sentry_sync_receiver_wrapper<   s@     8__5 5 5 5 5 5 _5 Nr   )r   r   r   r   )r   r*   
get_clientget_integrationsignals_spanssignals_denylist	enumerate)
r   r   sync_receiversasync_receiversr1   integrationidxr   r   old_live_receiverss
           r   _sentry_live_receiversz-patch_signals.<locals>._sentry_live_receivers3   s    V##.@.@v.N.N+NOO//f==N O	*	!	 	 	 	 	 	  !+--==>OPP	M)	M K888!*>!:!: M MX&B&B8&L&Ls##V##!?22!!r   N)r   r   r   r
   r   r    )sentry_sdk.integrations.djangor   r   _live_receivers)r<   r   r;   s    @@r   patch_signalsr?   (   sn     A@@@@@/%"%" %%"	e%" %" %" %" %" %" %"N 4Fr   )r   N)	functoolsr   django.dispatchr   r*   sentry_sdk.constsr   r=   r   typingr   collections.abcr	   r
   r   r   r   r?    r   r   <module>rF      s          " " " " " "                 9 9 9 9 9 9             "((((((!!!!!!!!!5 #    024 24 24 24 24 24r   