
    \j                         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y)    wraps)SignalN)OP)DJANGO_VERSION)TYPE_CHECKING)Callable)AnyUnionreceiverCallable[..., Any]returnc                 ^   d}t        | d      r| j                  }nct        | d      r| j                  }nJt        | d      r>t        | d      r2t        | 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     Y/root/env/lib/python3.12/site-packages/sentry_sdk/integrations/django/signals_handlers.py_get_receiver_namer      s    Dx($$	:	&  	&
 8V$
)K'(--*@*@@4GD 	
8}x&""S(4/K    c                  d    ddl m t        j                  	 	 	 	 	 	 dfd} | t        _        y)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   )DjangoIntegrationc                 2   t         dk\  r 	| |      \  }}n 	| |      }g }	 	 	 	 dfd}t        j                         j                        }|r8|j                  r,| |j
                  vrt        |      D ]  \  }} ||      ||<    t         dk\  r||fS |S )N)   r   c                 4     t               d fd       }|S )Nc                      t              }t        j                  t        j                  |j
                        5 }|j                  d|        | i |cd d d        S # 1 sw Y   y xY w)N)opr   originsignal)r   
sentry_sdk
start_spanr   EVENT_DJANGOr#   set_data)argskwargssignal_namespanr   r   s       r   wrapperzdpatch_signals.<locals>._sentry_live_receivers.<locals>.sentry_sync_receiver_wrapper.<locals>.wrapper?   sc    0:**$,33 5 MM(K8#T4V45 5 5s   A!!A*)r)   r
   r*   r
   r   r
   r   )r   r-   r   s   ` r   sentry_sync_receiver_wrapperzSpatch_signals.<locals>._sentry_live_receivers.<locals>.sentry_sync_receiver_wrapper<   s"     8_5 5 Nr   )r   r   r   r   )r   r%   
get_clientget_integrationsignals_spanssignals_denylist	enumerate)
selfsendersync_receiversasync_receiversr.   integrationidxr   r   old_live_receiverss
           r   _sentry_live_receiversz-patch_signals.<locals>._sentry_live_receivers3   s     V#.@v.N+NO/f=N O	*	!	  !++-==>OP))K888!*>!: MX&B8&Ls#M V#!?22!!r   N)r4   r   r5   r
   r   zZUnion[tuple[list[Callable[..., Any]], list[Callable[..., Any]]], list[Callable[..., Any]]])sentry_sdk.integrations.djangor   r   _live_receivers)r;   r   r:   s    @@r   patch_signalsr>   (   s=     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>rE      s9     "    9  (!!5 # 024r   