o
    h                     @   sx   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
r2d dlmZ d dl	mZmZ d	d
 Zdd ZdS )    wraps)SignalN)OP)DJANGO_VERSION)TYPE_CHECKING)Callable)AnyUnionc                 C   s   d}t | dr| j}n!t | dr| j}nt | dr,t | dr,t | jdr,d| jj d }|dkr4t| S t | dr@| jd | }|S )	N __qualname____name__funczpartial(<function z>)
__module__.)hasattrr   r   r   strr   )receivername r   q/var/www/html/pro-man-master/venv/lib/python3.10/site-packages/sentry_sdk/integrations/django/signals_handlers.py_get_receiver_name   s   


r   c                     s*   ddl m  tj fd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   DjangoIntegrationc                    s   t dkr| |\}}n| |}g } fdd}t  }|r9|jr9| |jvr9t|D ]
\}}||||< q.t dkrA||fS |S )N)   r   c                    s   t   fdd}|S )Nc                     sZ   t }tjtj| jd}|d| | i |W  d    S 1 s&w   Y  d S )N)opr   originsignal)r   
sentry_sdk
start_spanr   EVENT_DJANGOr   set_data)argskwargssignal_namespan)r   r   r   r   wrapper?   s   $zdpatch_signals.<locals>._sentry_live_receivers.<locals>.sentry_sync_receiver_wrapper.<locals>.wrapperr   )r   r&   r   )r   r   sentry_sync_receiver_wrapper=   s   zSpatch_signals.<locals>._sentry_live_receivers.<locals>.sentry_sync_receiver_wrapper)r   r   
get_clientget_integrationsignals_spanssignals_denylist	enumerate)selfsendersync_receiversasync_receiversr'   integrationidxr   r   old_live_receiversr   r   _sentry_live_receivers5   s    

z-patch_signals.<locals>._sentry_live_receiversN)sentry_sdk.integrations.djangor   r   _live_receivers)r5   r   r3   r   patch_signals)   s   
&r8   )	functoolsr   django.dispatchr   r   sentry_sdk.constsr   r6   r   typingr   collections.abcr   r	   r
   r   r8   r   r   r   r   <module>   s    