
    tni                      h   d Z ddlZddlZddl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mZ ddl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)WSGIRequest)OP)SentryAsgiMiddleware)should_send_default_pii)capture_internal_exceptionsensure_integration_enabled)TYPE_CHECKING)AnyCallableUnionTypeVar)ASGIRequest)HttpResponse)EventEventProcessor_F.)boundmarkcoroutinefunctionfuncreturnc                 2    t           j        j        | _        | S N)asyncio
coroutines_is_coroutine)r   s    `/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/sentry_sdk/integrations/django/asgi.pyr   r   1   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                      r2t                      5   ||            d d d            n# 1 swxY w Y   | S )Nr   )DjangoRequestExtractor_set_user_info)sentry_sdk.integrations.djangor$   r%   typer   r   extract_into_eventr   )r    r!   r$   r%   r   s       r   asgi_request_event_processorzH_make_asgi_request_event_processor.<locals>.asgi_request_event_processor7   sh   	
 	
 	
 	
 	
 	
 	
 	

 ?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 #$$ 	/,.. / /w.../ / / / / / / / / / / / / / / s#   A!!A%(A%B!!B%(B%)r    r   r!   r"   r   r    )r   r)   s   ` r   "_make_asgi_request_event_processorr+   6   s)         0 ('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)
sentry_sdk
get_clientget_integrationr   __get__originr8   
_run_asgi3)	r0   r1   r2   r3   integration
middlewarer/   r,   old_apps	         r   sentry_patched_asgi_handlerzCpatch_django_asgi_handler_impl.<locals>.sentry_patched_asgi_handlerW   s       !+--==>OPP ugt<<<<<<<<<)OOD#&& $)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   )r9   get_isolation_scopeadd_event_processorr+   )r0   rD   rE   r   error_responser1   old_create_requests         r   sentry_patched_create_requestzEpatch_django_asgi_handler_impl.<locals>.sentry_patched_create_requestm   s`     '9&8&O&O&O&O&O&O#G^244E%%&H&Q&QRRRN**r   )
r0   r
   r1   r
   r2   r
   r3   r
   r   r
   )r0   r
   rD   r
   rE   r
   r   r
   )r&   r/   __call__hasattrrC   r   )r,   rB   modern_django_asgi_supportrK   r/   rA   rJ   s   `   @@@r   patch_django_asgi_handler_implrO   R   s
   @@@@@@lG66!6,169>6	6 6 6 6 6 6 6 6  /CL!(.>!?!?! ; /	#$57I	J	J	+	+ %	+16	+	+ 	+ 	+ 	+ 	+ 
K	J	+ ;; ;r   _before_get_responsec                 @    | j         	 	 	 	 	 	 dfd}|| _         d S )Nr0   r
   r   r   "Union[HttpResponse, BaseException]c                 B   K    |            | |           d {V S r   r*   )r0   r   rP   old_get_response_asyncs     r   !sentry_patched_get_response_asynczCpatch_get_response_async.<locals>.sentry_patched_get_response_async}   s?       	W%%%++D':::::::::r   )r0   r
   r   r
   r   rR   )get_response_async)r,   rP   rU   rT   s    ` @r   patch_get_response_asyncrW   z   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   r.   z3.0.0r0   r
   r2   r3   r   c                    K   t          j                                                  }|  ||           d {V S t           fddj        |j                  }  | j                  ||           d {V S )Nc                 0                                   S r   )r<   )_scoper,   rA   r0   s    r   <lambda>zWpatch_channels_asgi_handler_impl.<locals>.sentry_patched_asgi_handler.<locals>.<lambda>   s    wtS99 r   Tr5   )r9   r:   r;   r   r=   r8   r1   )r0   r2   r3   r?   r@   r/   r,   rA   s   `    r   rB   zEpatch_channels_asgi_handler_impl.<locals>.sentry_patched_asgi_handler   s       %/11AABSTTK"$WT7D999999999-999999$(-4(3(K	  J 0DJ//>>>>>>>>>r   )r0   r
   r2   r
   r3   r
   r   r
   )channelsr&   r/   __version__rL   rO   )r,   r]   rB   r/   rA   s   `  @@r    patch_channels_asgi_handler_implr_      s    OOO@@@@@@g%%,	?	?"'	?/4	?	? 	? 	? 	? 	? 	? 	? 	?  3
 	's+++++r   callbackc                 h     ddl m t          j                   	 	 	 	 	 	 	 	 d	 fd            }|S )
Nr   r.   r   r
   rD   rE   r   c                   K   t          j                    }|j        |j                                         t          j                    }|j        |j                                         t          j                                                  }|r|j	        s | g|R i | d {V 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)opnamer=   )r9   get_current_scopetransactionupdate_active_threadrG   profileupdate_active_thread_idr:   r;   middleware_spans
start_spanr   VIEW_RENDERresolver_match	view_namer=   )r   rD   rE   current_scopesentry_scoper?   r/   r`   s         r   sentry_wrapped_callbackz0wrap_async_view.<locals>.sentry_wrapped_callback   s      #466$0%::<<<!577+ 88::: +--==>OPP 	<+"> 	<!';D;;;F;;;;;;;;;"~'1$+
 
 
 	< 	<
 "';D;;;F;;;;;;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s   C::C>C>)r   r
   rD   r
   rE   r
   r   r
   )r&   r/   	functoolswraps)r`   rq   r/   s   ` @r   wrap_async_viewrt      sv    @@@@@@_X<<$<05<	< < < < < < <, #"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_responserv   r   c                 J    || _         d | _        |                                  d S r   )rz   _acall_method_async_check)r0   rz   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)iscoroutinefunctionrz   r   r0   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   rz   r   s    r   async_route_checkzI_asgi_middleware_mixin_factory.<locals>.SentryASGIMixin.async_route_check   s    
 't'8999r   rD   r
   rE   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|   rM   _innerr   )r0   rD   rE   fmiddleware_spanru   s        r   r   zA_asgi_middleware_mixin_factory.<locals>.SentryASGIMixin.__acall__   s     "Ay4;44 9-1[-BBD&-1[8D&44BBBO&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)rz   rv   r   N)r   N)rD   r
   rE   r
   r   r
   )
__name__
__module____qualname__r	   r   r~   r}   boolr   r   )ru   s   r   SentryASGIMixinry      s         	F	  	  	  	 
	, 	, 	, 	,	:t 	: 	: 	: 	:	0 	0 	0 	0 	0 	0 	0 	0r   r   r*   )ru   r   s   ` r   _asgi_middleware_mixin_factoryr      s>    '0 '0 '0 '0 '0 '0 '0 '0 '0 '0R r   )r   r   r   r   )r   r   r   r   )r,   r
   r   N)r,   r
   rP   r
   r   N)r`   r
   r   r
   )ru   rv   r   r
   )'__doc__r   rr   inspectdjango.core.handlers.wsgir   r9   sentry_sdk.constsr   sentry_sdk.integrations.asgir   sentry_sdk.scoper   sentry_sdk.utilsr   r   typingr	   r
   r   r   r   django.core.handlers.asgir   django.http.responser   sentry_sdk._typesr   r   r   rM   r   r   r+   rO   rW   r_   rt   r   r*   r   r   <module>r      s!          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	Xc3h/	0	0	0B 77+,, !5#9!5   
( ( ( (8%; %; %; %;P	? 	? 	? 	?, , , ,@# # # #:101
1 1 1 1 1 1r   