o
    ii                     @   s   d dl mZ d dlmZ d dlmZ d dlm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 Zdd ZdS )    )absolute_import)Signal)Hubwraps)TYPE_CHECKING)OP)DJANGO_VERSION)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   n/var/www/html/pca-backend/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 j tdkr| |\}}n| |}g } fdd} }|r5|jr5t|D ]
\}}||||< q*tdkr=||fS |S )N)   r   c                    s   t   fdd}|S )Nc                     sV   t } jtj|d}|d| | i |W  d    S 1 s$w   Y  d S )N)opdescriptionsignal)r   
start_spanr   EVENT_DJANGOset_data)argskwargssignal_namespan)hubr   r   r   wrapperC   s   $zdpatch_signals.<locals>._sentry_live_receivers.<locals>.sentry_sync_receiver_wrapper.<locals>.wrapperr   )r   r'   r&   )r   r   sentry_sync_receiver_wrapperA   s   
zSpatch_signals.<locals>._sentry_live_receivers.<locals>.sentry_sync_receiver_wrapper)r   currentr	   get_integrationsignals_spans	enumerate)selfsendersync_receiversasync_receiversr)   integrationidxr   r   old_live_receiversr(   r   _sentry_live_receivers7   s   


z-patch_signals.<locals>._sentry_live_receiversN)sentry_sdk.integrations.djangor   r   _live_receivers)r6   r   r4   r   patch_signals+   s   
#r9   N)
__future__r   django.dispatchr   
sentry_sdkr   sentry_sdk._functoolsr   sentry_sdk._typesr   sentry_sdk.constsr   r7   r	   collections.abcr
   typingr   r   r   r9   r   r   r   r   <module>   s   