o
    S۷i                     @   s   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
defddZdddZdS )    wraps)SignalN)OP)DJANGO_VERSION)TYPE_CHECKING)Callable)AnyUnionreceiverCallable[..., Any]returnc                 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   )r   name r   e/home/ubuntu/vllm_env/lib/python3.10/site-packages/sentry_sdk/integrations/django/signals_handlers.py_get_receiver_name   s   


r   c                     s8   ddl m  tj						d 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   DjangoIntegrationselfr   senderr	   r   ZUnion[tuple[list[Callable[..., Any]], list[Callable[..., Any]]], list[Callable[..., Any]]]c                    s   t dkr| |\}}n| |}g }				d fdd}t  }|r>|jr>| |jvr>t|D ]
\}}||||< q3t dkrF||fS |S )N)   r   r   r   r   c                    s   t  d fdd}|S )Nargsr	   kwargsr   c                     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)r    r!   signal_namespan)r   r   r   r   wrapper?   s   $zdpatch_signals.<locals>._sentry_live_receivers.<locals>.sentry_sync_receiver_wrapper.<locals>.wrapper)r    r	   r!   r	   r   r	   r   )r   r+   r   )r   r   sentry_sync_receiver_wrapper<   s   
zSpatch_signals.<locals>._sentry_live_receivers.<locals>.sentry_sync_receiver_wrapper)r   r   r   r   )r   r%   
get_clientget_integrationsignals_spanssignals_denylist	enumerate)r   r   sync_receiversasync_receiversr,   integrationidxr   r   old_live_receiversr   r   _sentry_live_receivers3   s(   

z-patch_signals.<locals>._sentry_live_receiversN)r   r   r   r	   r   r   )sentry_sdk.integrations.djangor   r   _live_receivers)r8   r   r6   r   patch_signals(   s   
'r;   )r   N)	functoolsr   django.dispatchr   r%   sentry_sdk.constsr   r9   r   typingr   collections.abcr   r	   r
   r   r   r;   r   r   r   r   <module>   s    