§
    xÅjå%  ã                   ó„  — d Z ddlZddlZddlZ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 ddlmZ dd	lmZ dd
lmZmZmZ er5ddlmZmZmZmZ ddlmZ ddlmZ ddlm Z m!Z!  ededef         ¬¦  «        Z" e#ed¦  «        rej$        Z$ej%        Z%nej$        Z$d%d„Z%d&d„Z&d'd„Z'd(d„Z(d'd„Z)d)d!„Z*	 	 	 	 d*d$„Z+dS )+zÃ
Instrumentation for Django 3.0

Since this file contains `async def` it is conditionally imported in
`sentry_sdk.integrations.django` (depending on the existence of
`django.core.handlers.asgi`.
é    N)ÚTYPE_CHECKING)ÚWSGIRequest)ÚOP)ÚSentryAsgiMiddleware)Úshould_send_default_pii)ÚStreamedSpan)Úhas_span_streaming_enabled)Úcapture_internal_exceptionsÚensure_integration_enabledÚhas_data_collection_enabled)ÚAnyÚCallableÚTypeVarÚUnion)ÚASGIRequest)ÚHttpResponse)ÚEventÚEventProcessorÚ_F.)ÚboundÚmarkcoroutinefunctionÚfuncÚreturnc                 ó2   — t           j        j        | _        | S ©N)ÚasyncioÚ
coroutinesÚ_is_coroutine)r   s    úTC:\Projects\Historical\venv\Lib\site-packages\sentry_sdk/integrations/django/asgi.pyr   r   2   s   € Ý$Ô/Ô=ˆÔØˆó    Úrequestr   r   c                 ó   ‡ — dˆ fd„}|S )NÚeventr   Úhintúdict[str, Any]r   c                 ó,  •— ddl m}m} ‰€| S t          ‰¦  «        t          k    r| S t          ¦   «         5   |‰¦  «                             | ¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        ¦   «         j	        }t          |¦  «        rA|d         d         r2t          ¦   «         5   |‰| ¦  «         d d d ¦  «         n# 1 swxY w Y   n@t          ¦   «         r2t          ¦   «         5   |‰| ¦  «         d d d ¦  «         n# 1 swxY w Y   | S )Nr   )ÚDjangoRequestExtractorÚ_set_user_infoÚdata_collectionÚ	user_info)Úsentry_sdk.integrations.djangor'   r(   Útyper   r
   Úextract_into_eventÚ
sentry_sdkÚ
get_clientÚoptionsr   r   )r#   r$   r'   r(   Úclient_optionsr!   s        €r   Úasgi_request_event_processorzH_make_asgi_request_event_processor.<locals>.asgi_request_event_processor8   s  ø€ ð	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð 	
ð
 ˆ?ØˆLå�‰=Œ=�KÒ'Ð'ØˆLå(Ñ*Ô*ð 	Fð 	FØ"Ð" 7Ñ+Ô+×>Ò>¸uÑEÔEÐEð	Fð 	Fð 	Fñ 	Fô 	Fð 	Fð 	Fð 	Fð 	Fð 	Fð 	Føøøð 	Fð 	Fð 	Fð 	Fõ $Ô.Ñ0Ô0Ô8ˆÝ& ~Ñ6Ô6ð 	/ØÐ/Ô0°Ô=ð 3Ý0Ñ2Ô2ð 3ð 3Ø"�N 7¨EÑ2Ô2Ð2ð3ð 3ð 3ñ 3ô 3ð 3ð 3ð 3ð 3ð 3ð 3øøøð 3ð 3ð 3ð 3øå$Ñ&Ô&ð 	/Ý,Ñ.Ô.ð /ð /Ø�˜w¨Ñ.Ô.Ð.ð/ð /ð /ñ /ô /ð /ð /ð /ð /ð /ð /øøøð /ð /ð /ð /ð ˆs5   ¶A!Á!A%Á(A%Â/CÃCÃCÃ0D	Ä	DÄD)r#   r   r$   r%   r   r   © )r!   r2   s   ` r   Ú"_make_asgi_request_event_processorr4   7   s)   ø€ ðð ð ð ð ð ð: (Ð'r    Úclsr   c                 óæ   ‡ ‡‡‡— ddl mŠ ‰ j        Š	 	 	 	 	 	 	 	 	 	 dˆˆ ˆfd	„}|‰ _        t          ‰ d
¦  «        }|r4‰ j        Št          ‰‰¦  «        	 	 	 	 	 	 	 	 dˆfd„¦   «         }|‰ _        d S d S )Nr   ©ÚDjangoIntegrationÚselfr   ÚscopeÚreceiveÚsendr   c              “   ó  •K  — t          j        ¦   «                              ‰¦  «        }|€ ‰| |||¦  «        ƒ d {V —†S t          ‰                     | ‰¦  «        d‰j        |j        ¬¦  «        j        } ||||¦  «        ƒ d {V —†S )NT©Úunsafe_context_dataÚspan_originÚhttp_methods_to_capture)r.   r/   Úget_integrationr   Ú__get__ÚoriginrA   Ú
_run_asgi3)	r9   r:   r;   r<   ÚintegrationÚ
middlewarer8   r5   Úold_apps	         €€€r   Úsentry_patched_asgi_handlerzCpatch_django_asgi_handler_impl.<locals>.sentry_patched_asgi_handler]   s¸   øè è € õ !Ô+Ñ-Ô-×=Ò=Ð>OÑPÔPˆØÐØ ˜  u¨g°tÑ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<å)Ø�OŠO˜D #Ñ&Ô&Ø $Ø)Ô0Ø$/Ô$Gð	
ñ 
ô 
ô
 ð 	ð  �Z  w°Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5Ð5r    Úcreate_requestÚargsÚkwargsc                 ó”   •—  ‰| g|¢R i |¤Ž\  }}t          j        ¦   «         }|                     t          |¦  «        ¦  «         ||fS r   )r.   Úget_isolation_scopeÚadd_event_processorr4   )r9   rK   rL   r!   Úerror_responser:   Úold_create_requests         €r   Úsentry_patched_create_requestzEpatch_django_asgi_handler_impl.<locals>.sentry_patched_create_requests   s`   ø€ ð '9Ð&8¸Ð&OÀÐ&OÐ&OÐ&OÈÐ&OÐ&OÑ#ˆG�^ÝÔ2Ñ4Ô4ˆEØ×%Ò%Õ&HÈÑ&QÔ&QÑRÔRÐRà˜NÐ*Ð*r    )
r9   r   r:   r   r;   r   r<   r   r   r   )r9   r   rK   r   rL   r   r   r   )r+   r8   Ú__call__ÚhasattrrJ   r   )r5   rI   Úmodern_django_asgi_supportrR   r8   rH   rQ   s   `   @@@r   Úpatch_django_asgi_handler_implrV   X   s
  øøøø€ Ø@Ð@Ð@Ð@Ð@Ð@àŒl€Gð6Øð6Ø!ð6Ø,1ð6Ø9>ð6à	ð6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ð  /€C„Lå!(¨Ð.>Ñ!?Ô!?ÐØ!ð ;Ø Ô/Ðå	#Ð$5Ð7IÑ	JÔ	Jð	+Øð	+Ø %ð	+Ø16ð	+àð	+ð 	+ð 	+ð 	+ð 	+ñ 
KÔ	Jð	+ð ;ˆÔÐÐð;ð ;r    Ú_before_get_responsec                 ó@   ‡‡— | j         Š	 	 	 	 	 	 dˆˆfd„}|| _         d S )Nr9   r   r!   r   ú"Union[HttpResponse, BaseException]c              “   óB   •K  —  ‰|¦  «          ‰| |¦  «        ƒ d {V —†S r   r3   )r9   r!   rW   Úold_get_response_asyncs     €€r   Ú!sentry_patched_get_response_asynczCpatch_get_response_async.<locals>.sentry_patched_get_response_asyncƒ   s?   øè è € ð 	Ð˜WÑ%Ô%Ð%Ø+Ð+¨D°'Ñ:Ô:Ð:Ð:Ð:Ð:Ð:Ð:Ð:r    )r9   r   r!   r   r   rY   )Úget_response_async)r5   rW   r\   r[   s    ` @r   Úpatch_get_response_asyncr^   €   sX   øø€ Ø Ô3Ðð;Øð;Ø#ð;à	-ð;ð ;ð ;ð ;ð ;ð ;ð ;ð ?€CÔÐÐr    c                 ó”   ‡ ‡‡— dd l }ddlmŠ |j        dk     r ‰ j        Š	 	 	 	 	 	 	 	 d
ˆˆ ˆfd	„}|‰ _        d S t          ‰ ¦  «         d S )Nr   r7   z3.0.0r9   r   r;   r<   r   c              “   ó  •‡ K  — t          j        ¦   «                              ‰¦  «        }|€ ‰‰ ||¦  «        ƒ d {V —†S t          ˆˆˆ fd„d‰j        |j        ¬¦  «        }  |‰ j        ¦  «        ||¦  «        ƒ d {V —†S )Nc                 ó0   •— ‰                      ‰‰¦  «        S r   )rC   )Ú_scoper5   rH   r9   s    €€€r   ú<lambda>zWpatch_channels_asgi_handler_impl.<locals>.sentry_patched_asgi_handler.<locals>.<lambda>œ   s   ø€ ˜wŸš¨t°SÑ9Ô9€ r    Tr>   )r.   r/   rB   r   rD   rA   r:   )r9   r;   r<   rF   rG   r8   r5   rH   s   `    €€€r   rI   zEpatch_channels_asgi_handler_impl.<locals>.sentry_patched_asgi_handler”   sº   øøè è € õ %Ô/Ñ1Ô1×AÒAÐBSÑTÔTˆKØÐ"Ø$˜W T¨7°DÑ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9å-Ø9Ð9Ð9Ð9Ð9Ð9Ø$(Ø-Ô4Ø(3Ô(Kð	ñ ô ˆJð 0˜˜ D¤JÑ/Ô/°¸Ñ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>Ð>r    )r9   r   r;   r   r<   r   r   r   )Úchannelsr+   r8   Ú__version__rS   rV   )r5   rd   rI   r8   rH   s   `  @@r   Ú patch_channels_asgi_handler_implrf   Œ   s    øøø€ Ø€O€O€Oà@Ð@Ð@Ð@Ð@Ð@àÔ˜gÒ%Ð%Ø”,ˆð	?Øð	?Ø"'ð	?Ø/4ð	?àð	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð  3ˆŒˆˆõ
 	' sÑ+Ô+Ð+Ð+Ð+r    Úcallbackc                 óh   ‡ ‡— ddl mŠ t          j        ‰ ¦  «        	 	 	 	 	 	 	 	 d	ˆˆ fd„¦   «         }|S )
Nr   r7   r!   r   rK   rL   r   c              Ÿ   óæ  •K  — t          j        ¦   «         }t          |j        ¦  «        }t          j        ¦   «         }|r9|j        }t          |¦  «        t          u r|j        }| 	                    ¦   «          n |j
        �|j
                             ¦   «          t          j        ¦   «         }|j        �|j                             ¦   «          |                     ‰
¦  «        }	|	r|	j        s ‰| g|¢R i |¤Žƒ d {V —†S |r™t           j                             ¦   «         € ‰| g|¢R i |¤Žƒ d {V —†S t           j                             | j        j        t,          j        ‰
j        dœ¬¦  «        5   ‰| g|¢R i |¤Žƒ d {V —†cd d d ¦  «         S # 1 swxY w Y   d S t          j        t,          j        | j        j        ‰
j        ¬¦  «        5   ‰| g|¢R i |¤Žƒ d {V —†cd d d ¦  «         S # 1 swxY w Y   d S )N)z	sentry.opzsentry.origin)ÚnameÚ
attributes)Úoprj   rD   )r.   r/   r	   r0   Úget_current_scopeÚstreamed_spanr,   r   Ú_segmentÚ_update_active_threadÚtransactionÚupdate_active_threadrN   ÚprofileÚupdate_active_thread_idrB   Úmiddleware_spansÚtracesÚget_current_spanÚ
start_spanÚresolver_matchÚ	view_namer   ÚVIEW_RENDERrD   )r!   rK   rL   ÚclientÚspan_streamingÚcurrent_scopeÚcurrent_spanÚsegmentÚsentry_scoperF   r8   rg   s             €€r   Úsentry_wrapped_callbackz0wrap_async_view.<locals>.sentry_wrapped_callback¯   s!  øè è € õ Ô&Ñ(Ô(ˆÝ3°F´NÑCÔCˆÝ"Ô4Ñ6Ô6ˆØð 	AØ(Ô6ˆLÝ�LÑ!Ô!¥\Ð1Ð1Ø&Ô/�Ø×-Ò-Ñ/Ô/Ð/øàÔ(Ð4ØÔ)×>Ò>Ñ@Ô@Ð@å!Ô5Ñ7Ô7ˆØÔÐ+ØÔ ×8Ò8Ñ:Ô:Ð:à×,Ò,Ð->Ñ?Ô?ˆØð 	< +Ô">ð 	<Ø!˜ 'Ð;¨DÐ;Ð;Ð;°FÐ;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;àð 	@ÝÔ ×1Ò1Ñ3Ô3Ð;Ø%˜X gÐ?°Ð?Ð?Ð?¸Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?ÝÔ"×-Ò-ØÔ+Ô5å!#¤Ø%6Ô%=ðð ð .ñ ô ð @ð @ð &˜X gÐ?°Ð?Ð?Ð?¸Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?ð@ð @ð @ð @ñ @ô @ð @ð @ð @ð @ð @ð @øøøð @ð @ð @ð @ð @ð @õ Ô&Ý”>ØÔ+Ô5Ø(Ô/ðñ ô ð @ð @ð
 &˜X gÐ?°Ð?Ð?Ð?¸Ð?Ð?Ð?Ð?Ð?Ð?Ð?Ð?ð@ð @ð @ð @ñ @ô @ð @ð @ð @ð @ð @ð @øøøð @ð @ð @ð @ð @ð @s$   Å+F
Æ
FÆFÇG&Ç&G*Ç-G*)r!   r   rK   r   rL   r   r   r   )r+   r8   Ú	functoolsÚwraps)rg   r‚   r8   s   ` @r   Úwrap_async_viewr…   ¬   s‚   øø€ Ø@Ð@Ð@Ð@Ð@Ð@å„_�XÑÔð(@Øð(@Ø$ð(@Ø05ð(@à	ð(@ð (@ð (@ð (@ð (@ð (@ñ Ôð(@ðT #Ð"r    Ú_check_middleware_spanúCallable[..., Any]c                 ó&   ‡ —  G ˆ fd„d¦  «        }|S )zh
    Mixin class factory that generates a middleware mixin for handling requests
    in async mode.
    c                   ó@   •— e Zd ZerdZdd„Zdd„Zdefd„Zdˆ fd„Z	dS )ú7_asgi_middleware_mixin_factory.<locals>.SentryASGIMixinNÚget_responser‡   r   c                 óJ   — || _         d | _        |                      ¦   «          d S r   )r‹   Ú_acall_methodÚ_async_check)r9   r‹   s     r   Ú__init__z@_asgi_middleware_mixin_factory.<locals>.SentryASGIMixin.__init__é   s*   € Ø ,ˆDÔØ!%ˆDÔØ×ÒÑÔÐÐÐr    c                 óP   — t          | j        ¦  «        rt          | ¦  «         dS dS )zé
            If get_response is a coroutine function, turns us into async mode so
            a thread is not consumed during a whole request.
            Taken from django.utils.deprecation::MiddlewareMixin._async_check
            N)Úiscoroutinefunctionr‹   r   ©r9   s    r   rŽ   zD_asgi_middleware_mixin_factory.<locals>.SentryASGIMixin._async_checkî   s5   € õ # 4Ô#4Ñ5Ô5ð ,Ý% dÑ+Ô+Ð+Ð+Ð+ð,ð ,r    c                 ó*   — t          | j        ¦  «        S )z�
            Function that checks if we are in async mode,
            and if we are forwards the handling of requests to __acall__
            )r‘   r‹   r’   s    r   Úasync_route_checkzI_asgi_middleware_mixin_factory.<locals>.SentryASGIMixin.async_route_check÷   s   € õ
 ' tÔ'8Ñ9Ô9Ð9r    rK   r   rL   c              Ÿ   ó  •K  — | j         }|€7t          | j        d¦  «        r| j        j        x| _         }n| j        x| _         } ‰|¬¦  «        }|€ ||i |¤Žƒ d {V —†S |5   ||i |¤Žƒ d {V —†cd d d ¦  «         S # 1 swxY w Y   d S )NÚ	__acall__)Ú
old_method)r�   rT   Ú_innerr–   )r9   rK   rL   ÚfÚmiddleware_spanr†   s        €r   r–   zA_asgi_middleware_mixin_factory.<locals>.SentryASGIMixin.__acall__þ   s  øè è € ØÔ"ˆAØˆyÝ˜4œ;¨Ñ4Ô4ð 9Ø-1¬[Ô-BÐB�DÔ&¨¨à-1¬[Ð8�DÔ&¨à4Ð4ÀÐBÑBÔBˆOàÐ&Ø˜Q Ð/¨Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/à ð 0ð 0Ø˜Q Ð/¨Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/ð0ð 0ð 0ð 0ñ 0ô 0ð 0ð 0ð 0ð 0ð 0ð 0øøøð 0ð 0ð 0ð 0ð 0ð 0s   Á"A=Á=BÂB)r‹   r‡   r   N)r   N)rK   r   rL   r   r   r   )
Ú__name__Ú
__module__Ú__qualname__r   r˜   r�   rŽ   Úboolr”   r–   )r†   s   €r   ÚSentryASGIMixinrŠ   å   sƒ   ø€ € € € € Øð 	ØˆFð	 ð 	 ð 	 ð 	 ð
	,ð 	,ð 	,ð 	,ð	: tð 	:ð 	:ð 	:ð 	:ð	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0r    rŸ   r3   )r†   rŸ   s   ` r   Ú_asgi_middleware_mixin_factoryr    Ý   s>   ø€ ð'0ð '0ð '0ð '0ð '0ð '0ð '0ñ '0ô '0ð '0ðR Ðr    )r   r   r   r   )r!   r   r   r   )r5   r   r   N)r5   r   rW   r   r   N)rg   r   r   r   )r†   r‡   r   r   ),Ú__doc__r   rƒ   ÚinspectÚtypingr   Údjango.core.handlers.wsgir   r.   Úsentry_sdk.constsr   Úsentry_sdk.integrations.asgir   Úsentry_sdk.scoper   Úsentry_sdk.tracesr   Úsentry_sdk.tracing_utilsr	   Úsentry_sdk.utilsr
   r   r   r   r   r   r   Údjango.core.handlers.asgir   Údjango.http.responser   Úsentry_sdk._typesr   r   r   rT   r‘   r   r4   rV   r^   rf   r…   r    r3   r    r   ú<module>r®      sQ  ððð ð €€€Ø Ð Ð Ð Ø €€€Ø  Ð  Ð  Ð  Ð  Ð  à 1Ð 1Ð 1Ð 1Ð 1Ð 1à Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø =Ð =Ð =Ð =Ð =Ð =Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø *Ð *Ð *Ð *Ð *Ð *Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?ðð ð ð ð ð ð ð ð ð ð ð 1Ø4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4à5Ð5Ð5Ð5Ð5Ð5Ø1Ð1Ð1Ð1Ð1Ð1à7Ð7Ð7Ð7Ð7Ð7Ð7Ð7à	ˆ�˜X c¨3 hÔ/Ð	0Ñ	0Ô	0€Bð €7ˆ7Ð+Ñ,Ô,ð Ø!Ô5ÐØ#Ô9ÐÐà!Ô5Ððð ð ð ð
(ð (ð (ð (ðB%;ð %;ð %;ð %;ðP	?ð 	?ð 	?ð 	?ð,ð ,ð ,ð ,ð@.#ð .#ð .#ð .#ðb1Ø0ð1à
ð1ð 1ð 1ð 1ð 1ð 1r    