Ë
    çÞËj  ã                   ót   — 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	„ Zd
„ Zy)é    ©Úwraps)ÚSignalN)ÚOP)ÚDJANGO_VERSION)ÚTYPE_CHECKING)ÚCallable)ÚAnyÚUnionc                 ó^  — 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   )ÚreceiverÚnames     úl/var/www/photos/backend/venv/lib/python3.12/site-packages/sentry_sdk/integrations/django/signals_handlers.pyÚ_get_receiver_namer      s§   € à€Däˆx˜Ô(Ø×$Ñ$‰Ü	�˜:Ô	&Ø× Ñ ‰Ü	Ø�&ô
ô �8˜VÔ$¬°·±À
Ô)KØ'¨(¯-©-×*@Ñ*@Ñ@À4ÑGˆDð 	�Š
ä�8‹}Ðäˆx˜Ô&Ø×"Ñ" SÑ(¨4Ñ/ˆà€Kó    c                  óV   ‡‡— ddl mŠ t        j                  Šˆˆ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                 ó(  •— t         dk\  r ‰	| |«      \  }}n ‰	| |«      }g }ˆfd„}t        j                  «       j                  ‰«      }|r8|j                  r,| |j
                  vrt        |«      D ]  \  }} ||«      ||<   Œ t         dk\  r||fS |S )N)é   r   c                 ó2   •‡ — t        ‰ «      ˆˆ 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?   se   ø€ ô 1°Ó:�Ü×*Ñ*Ü—‘Ø$Ø,×3Ñ3ôð 5ð Ø—M‘M (¨KÔ8Ù# TÐ4¨VÑ4÷5÷ 5ò 5ús   ½A!Á!A*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#   Ú
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_receivers5   s¬   ø€ ä˜VÒ#Ù.@ÀÀvÓ.NÑ+ˆN™Oá/°°fÓ=ˆNØ ˆOô	ô  !×+Ñ+Ó-×=Ñ=Ð>OÓPˆáØ×)Ò)Ø˜K×8Ñ8Ñ8ä!*¨>Ó!:ò M‘��XÙ&BÀ8Ó&L�˜sÒ#ðMô ˜VÒ#Ø! ?Ð2Ð2à!Ð!r   N)Úsentry_sdk.integrations.djangor   r   Ú_live_receivers)r9   r   r8   s    @@r   Úpatch_signalsr<   )   s%   ù€ õ Aä×/Ñ/Ðõ$"ðL 4„FÕr   )Ú	functoolsr   Údjango.dispatchr   r#   Úsentry_sdk.constsr   r:   r   Útypingr   Úcollections.abcr	   r
   r   r   r<   © r   r   ú<module>rC      s*   ðÝ å "ã Ý  Ý 9å  áÝ(ß!òó224r   