§
    xÅjN  ã                   ó’   — d dl mZ d dlmZ d dlmZ d dlZd dlmZ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dS )é    ©Úwraps)ÚTYPE_CHECKING)ÚSignalN)ÚOPÚSPANDATA)ÚDJANGO_VERSION)Úhas_span_streaming_enabled)ÚCallable)ÚAnyÚUnionÚreceiverúCallable[..., Any]Úreturnc                 ó\  — d}t          | d¦  «        r| j        }n_t          | d¦  «        r| j        }nGt          | d¦  «        r7t          | d¦  «        r't          | 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     ú`C:\Projects\Historical\venv\Lib\site-packages\sentry_sdk/integrations/django/signals_handlers.pyÚ_get_receiver_namer      sÖ   € Ø€Dåˆx˜Ñ(Ô(ð HØÔ$ˆˆÝ	�˜:Ñ	&Ô	&ð HØÔ ˆˆÝ	Ø�&ñ
ô 
ð Hõ �8˜VÑ$Ô$ð 	H­°´À
Ñ)KÔ)Kð 	HØ'¨(¬-Ô*@Ñ@À4ÑGˆDð 	�Š
ˆ
å�8‰}Œ}Ðåˆx˜Ñ&Ô&ð 0ØÔ" SÑ(¨4Ñ/ˆà€Kó    c                  ó`   ‡‡— ddl mŠ t          j        Š	 	 	 	 	 	 dˆˆf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                 óB  •— t           dk    r ‰	| |¦  «        \  }}n ‰	| |¦  «        }g }	 	 	 	 dˆfd„}t          j        ¦   «                              ‰¦  «        }|r3|j        r,| |j        vr#t          |¦  «        D ]\  }} ||¦  «        ||<   Œt           dk    r||fS |S )N)é   r   r   r   r   c                 óB   •‡ — t          ‰ ¦  «        dˆˆ fd„¦   «         }|S )NÚargsr   Úkwargsr   c            	      ó<  •— t          ‰¦  «        }t          t          j        ¦   «         j        ¦  «        }|rˆt          j                             ¦   «         € ‰| i |¤ŽS t          j                             |dt          j	        d‰j
        t          j        |i¬¦  «        5   ‰| i |¤Žcd d d ¦  «         S # 1 swxY w Y   d S t          j        t          j	        |‰j
        ¬¦  «        5 }|                     d|¦  «          ‰| i |¤Žcd d d ¦  «         S # 1 swxY w Y   d S )Nz	sentry.opzsentry.origin)r   Ú
attributes)Úopr   ÚoriginÚsignal)r   r
   Ú
sentry_sdkÚ
get_clientÚoptionsÚtracesÚget_current_spanÚ
start_spanr   ÚEVENT_DJANGOr+   r   ÚCODE_FUNCTION_NAMEÚset_data)r&   r'   Úsignal_nameÚspan_streamingÚspanr   r   s        €€r   Úwrapperzdpatch_signals.<locals>._sentry_live_receivers.<locals>.sentry_sync_receiver_wrapper.<locals>.wrapper?   sÊ  ø€ å0°Ñ:Ô:�å!;ÝÔ)Ñ+Ô+Ô3ñ"ô "�ð "ð 9Ý!Ô(×9Ò9Ñ;Ô;ÐCØ'˜x¨Ð8°Ð8Ð8Ð8Ý#Ô*×5Ò5Ø(à'­¬Ø+Ð->Ô-EÝ$Ô7¸ð$ð 6ñ ô ð 9ð 9ð  (˜x¨Ð8°Ð8Ð8ð9ð 9ð 9ð 9ñ 9ô 9ð 9ð 9ð 9ð 9ð 9ð 9øøøð 9ð 9ð 9ð 9ð 9ð 9õ $Ô.Ýœ?Ø(Ø0Ô7ðñ ô ð 9ð ØŸš h°Ñ<Ô<Ð<Ø'˜x¨Ð8°Ð8Ð8ð9ð 9ð 9ð 9ñ 9ô 9ð 9ð 9ð 9ð 9ð 9ð 9øøøð 9ð 9ð 9ð 9ð 9ð 9s$   ÂB3Â3B7Â:B7Ã&DÄDÄD)r&   r   r'   r   r   r   r   )r   r9   r   s   ` €r   Úsentry_sync_receiver_wrapperzSpatch_signals.<locals>._sentry_live_receivers.<locals>.sentry_sync_receiver_wrapper<   s@   øø€ õ �8‰_Œ_ð9ð 9ð 9ð 9ð 9ð 9ñ Œ_ð9ð6 ˆNr   )r   r   r   r   )r	   r-   r.   Úget_integrationÚsignals_spansÚsignals_denylistÚ	enumerate)
r    r!   Úsync_receiversÚasync_receiversr:   ÚintegrationÚidxr   r   Úold_live_receiverss
           €€r   Ú_sentry_live_receiversz-patch_signals.<locals>._sentry_live_receivers3   s  ø€ õ ˜VÒ#Ð#Ø.@Ð.@ÀÀvÑ.NÔ.NÑ+ˆN˜O˜Oà/Ð/°°fÑ=Ô=ˆNØ ˆOð	Ø*ð	à!ð	ð 	ð 	ð 	ð 	ð 	õB !Ô+Ñ-Ô-×=Ò=Ð>OÑPÔPˆàð	MàÔ)ð	Mð ˜KÔ8Ð8Ð8å!*¨>Ñ!:Ô!:ð Mð M‘��XØ&BÐ&BÀ8Ñ&LÔ&L�˜sÑ#Ð#å˜VÒ#Ð#Ø! ?Ð2Ð2à!Ð!r   N)r    r   r!   r   r   r"   )Úsentry_sdk.integrations.djangor   r   Ú_live_receivers)rD   r   rC   s    @@r   Úpatch_signalsrG   (   sn   øø€ ð AÐ@Ð@Ð@Ð@Ð@åÔ/Ðð6"Øð6"Ø %ð6"à	eð6"ð 6"ð 6"ð 6"ð 6"ð 6"ð 6"ðp 4…FÔÐÐr   )r   N)Ú	functoolsr   Útypingr   Údjango.dispatchr   r-   Úsentry_sdk.constsr   r   rE   r	   Úsentry_sdk.tracing_utilsr
   Úcollections.abcr   r   r   r   r   rG   © r   r   ú<module>rO      sü   ðØ Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  à "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?àð "Ø(Ð(Ð(Ð(Ð(Ð(Ø!Ð!Ð!Ð!Ð!Ð!Ð!Ð!ðÐ!5ð ¸#ð ð ð ð ð0C4ð C4ð C4ð C4ð C4ð C4r   