
    gh1                     V   S r SSKrSSKrSSKJr  SSKJr  SSKrSSKJ	r	  SSK
Jr  SSKJrJrJr  SSKJrJr  SS	KJr  SS
KJrJr  SSKJrJrJrJrJrJrJr  SSKJ r   SSK!J"r"  \"(       a   SSK!J#r#  SSK!J$r$  SSK!J%r%  SSK!J&r&  SSK'J(r(J)r)  \" S5      r*Sr+Sr,SS jr-S r. " S S5      r/g)ze
An ASGI middleware.

Based on Tom Christie's `sentry-asgi <https://github.com/encode/sentry-asgi>`.
    N)deepcopy)partial)continue_trace)OP)_get_headers_get_request_data_get_url)DEFAULT_HTTP_METHODS_TO_CAPTUREnullcontext)track_session)SOURCE_FOR_STYLETransactionSource)
ContextVarevent_from_exceptionHAS_REAL_CONTEXTVARSCONTEXTVARS_ERROR_MESSAGEloggertransaction_from_function_get_installed_modules)Transaction)TYPE_CHECKING)Any)Dict)Optional)Tuple)EventHintsentry_asgi_middleware_appliedzgeneric ASGI request)endpointurlc                     [        U [        R                  " 5       R                  USS.S9u  p#[        R                  " X#S9  g )NF)typehandled)client_options	mechanism)hint)r   
sentry_sdk
get_clientoptionscapture_event)excmechanism_typeeventr&   s       _/home/kali/devsecops-assessor/venv/lib/python3.13/site-packages/sentry_sdk/integrations/asgi.py_capture_exceptionr/   :   s=     '!,,.66)e<KE
 U.    c                     [         R                  " U 5      (       a  [        U S5      $ [         R                  " U 5      (       a  [        R
                  " U 5      $ [        U SS5      n[        R
                  " U5      $ )z~
Try to figure out if an application object supports ASGI3.

This is how uvicorn figures out the application version as well.
	__await____call__N)inspectisclasshasattr
isfunctionasyncioiscoroutinefunctiongetattr)appcalls     r.   _looks_like_asgi3r=   E   sa     ssK((			C	 	 **3//sJ-**400r0   c                   X    \ rS rSrSrSSSS\S4S jrS	 rS
 rS r	S r
S rS rS rSrg)SentryAsgiMiddlewareU   )r;   r3   transaction_styler,   span_originhttp_methods_to_captureFr   asgimanualNc                    U(       d  [         (       d  [        S[        -   5      eU[        ;  a  [	        SU< S[        < S35      eUS:H  =(       a    S[        5       ;   nU(       a  [        R                  " S5        X0l        X@l	        XPl
        Xl        X`l        Uc  [        U5      (       a  S	nOS
nUS	:X  a  U R                  U l        gUS
:X  a  U R                   U l        gg)a:  
Instrument an ASGI application with Sentry. Provides HTTP/websocket
data to sent events and basic handling for exceptions bubbling up
through the middleware.

:param unsafe_context_data: Disable errors when a proper contextvars installation could not be found. We do not recommend changing this from the default.
zRThe ASGI middleware for Sentry requires Python 3.7+ or the aiocontextvars package.z%Invalid value for transaction_style: z (must be in )rD   	starlettezThe Sentry Python SDK can now automatically support ASGI frameworks like Starlette and FastAPI. Please remove 'SentryAsgiMiddleware' from your project. See https://docs.sentry.io/platforms/python/guides/asgi/ for more information.N      )r   RuntimeErrorr   TRANSACTION_STYLE_VALUES
ValueErrorr   r   warningrA   r,   rB   r;   rC   r=   
_run_asgi3r3   
_run_asgi2)	selfr;   unsafe_context_datarA   r,   rB   rC   asgi_version0asgi_middleware_while_using_starlette_or_fastapis	            r.   __init__SentryAsgiMiddleware.__init___   s    $ #+?+? 13LM  $<<$&>@  f$P8N8P)P 	9 <NNa "3,&'>$ %%  1 OODMQ OODM r0   c                 (    [        XR                  S9$ )zCapture exceptions raise in application lifespan handlers.

The separate function is needed to support overriding in derived integrations that use different catching mechanisms.
r+   r,   r/   r,   rQ   r+   s     r.   _capture_lifespan_exception0SentryAsgiMiddleware._capture_lifespan_exception        "c:M:MNNr0   c                 (    [        XR                  S9$ )zCapture exceptions raised in incoming request handlers.

The separate function is needed to support overriding in derived integrations that use different catching mechanisms.
rX   rY   rZ   s     r.   _capture_request_exception/SentryAsgiMiddleware._capture_request_exception   r]   r0   c                    ^ ^ UU 4S jnU$ )Nc                 B   >#    TR                  TXSS9I S h  vN $  N7f)NrJ   rS   _run_app)receivesendscoperQ   s     r.   inner.SentryAsgiMiddleware._run_asgi2.<locals>.inner   s!     ug!LLLLs    )rQ   rh   ri   s   `` r.   rP   SentryAsgiMiddleware._run_asgi2   s    	M r0   c                 @   #    U R                  XUSS9I S h  vN $  N7f)NrI   rc   rd   )rQ   rh   rf   rg   s       r.   rO   SentryAsgiMiddleware._run_asgi3   s      ]]54a]HHHHs   c           
        ^^#    [         R                  S5      nUS   S:H  nU(       d  U(       aA   US:X  a   U R                  U5      " UT5      I S h  vN $ U R                  XT5      I S h  vN $ [         R                  S5         [        R                  " 5        n[        USS9   UR                  5         SUl
        [        U R                  US	9n	UR                  U	5        US   n
U R                  U R                  U5      u  nnUR                  S
S5      R!                  5       nS mU
S;   aE  U
S:X  d  XR"                  ;   a/  [%        ['        U5      SR)                  U
5      UUU R*                  S9mO$[-        [.        R0                  UUU R*                  S9mT(       a  TR3                  SU
5        Tb  [        R4                  " TSU0S9O	[7        5           UU4S jnUS:X  aO  U R                  U5      " X.5      I S h  vN sS S S 5        sS S S 5        sS S S 5        [         R                  S5        $ U R                  XU5      I S h  vN sS S S 5        sS S S 5        sS S S 5        [         R                  S5        $  GN, GN! [         a  nU R	                  U5        US eS nAff = f N Nb! [         a  nU R9                  U5        US eS nAff = f! , (       d  f       O= f S S S 5        O! , (       d  f       O= fS S S 5        O! , (       d  f       O= f[         R                  S5        g ! [         R                  S5        f = f7f)NFr"   lifespanrJ   Trequest)session_moderD   )
asgi_scopemethod )http	websocketrw   z	{}.server)opnamesourceoriginz	asgi.typers   )custom_sampling_contextc                    >#    Tb;  U R                  S5      S:H  =(       a    SU ;   nU(       a  TR                  U S   5        T" U 5      I S h  vN $  N7f)Nr"   zhttp.response.startstatus)getset_http_status)r-   is_http_responserg   transactions     r.   _sentry_wrapped_send;SentryAsgiMiddleware._run_app.<locals>._sentry_wrapped_send   sW     #.#:(-		&(9=R(R )>,4,= %5 (8(3(C(CE(O(T-1%['8 8'8s   A
AAA)_asgi_middleware_appliedr   r;   	Exceptionr[   setr'   isolation_scoper   clear_breadcrumbs_namer   event_processoradd_event_processor _get_transaction_name_and_sourcerA   upperrC   r   r   formatrB   r   r   HTTP_SERVERset_tagstart_transactionr   r_   )rQ   rh   rf   rg   rS   is_recursive_asgi_middlewareis_lifespanr+   sentry_scope	processortytransaction_nametransaction_sourcert   r   r   s      `           @r.   re   SentryAsgiMiddleware._run_app   s    '?'C'CE'J$Fmz1';$1$!%%$!???!%%$!??? 	!$$T*I	0++-"<iH 224)/L& '(<(< OI 44Y?vB ==..(* #YYx4::<F"&K22,:V:V0V*8 ,U 3#.#5#5b#9%5'9'+'7'7+K '2!~~!1#5#'#3#3	' ##++K< '2	 #44'5A54I
 )]+0
9  ,q0-1XXe_$+." ("-+ +M IH .-P %((/ .2XX$)4H." ("5+ +M IH .-P %((/e @? $005t#$F("("  ) 0 ;;C@"%4/0;+ + +M IHH .--P %((/$((/s+  ,M
!J I>J M
J ,J-J 0M
L0 L	'D/K/K'J.?J*
 J.	K/	L		L0 M
4J.	J,

J.	K/	L		L0 (M
>J J 
J'J""J''M
*J.,J..
K	8K	K	K
K"K/&	L	/
K=	9L	 	L0 	
LL0 M
0MM
c                    UR                  S0 5      nUR                  [        U5      5        [        U5      US'   UR                  S5      nUR                  S5      =(       d    0 R                  S5      nUS L=(       aB    U[        :g  =(       a2    U[
        R                  [
        R                  [
        R                  4;   nU(       d)  U R                  U R                  U5      u  pXS'   SU	0US'   U$ )Nrq   r   transaction_inforz   )r   updater   r   _DEFAULT_TRANSACTION_NAMEr   	COMPONENTROUTECUSTOMr   rA   )
rQ   r-   r&   rs   request_datar   r   already_setry   rz   s
             r.   r   $SentryAsgiMiddleware.event_processor  s    yyB/-j9:#L1i ii.#ii(:;ArFFxPt# 88"!++!''!(( 	 @@&&
LD $(- )16(:E$%r0   c                    S n[         U   nUR                  S5      nUS:X  aP  UR                  S5      nU(       a  [        U5      =(       d    SnOv[        X%S:X  a  SOSS S9n[        R
                  nOSUS:X  aM  UR                  S5      nU(       a  [        US	S 5      nUb  UnO"[        X%S:X  a  SOSS S9n[        R
                  nUc  [        n[        R                  nX44$ X44$ )
Nr"   r   ru   rv   ws)hostr    routepath)	r   r   r   r	   r   URLr:   r   r   )	rQ   rA   rs   ry   rz   r   r   r   r   s	            r.   r   5SentryAsgiMiddleware._get_transaction_name_and_source2  s    !"34^^F#
*!~~j1H 0:@b
FlFSWX*..%' NN7+Eufd3#D
FlFSWX*..<,D&,,F<|r0   )r3   r;   rC   r,   rB   rA   )__name__
__module____qualname____firstlineno__	__slots__r
   rU   r[   r_   rP   rO   re   r   r   __static_attributes__rk   r0   r.   r?   r?   U   sL    I "$ ?8,tOOIY0vD"r0   r?   )rD   )0__doc__r8   r4   copyr   	functoolsr   r'   sentry_sdk.apir   sentry_sdk.constsr   $sentry_sdk.integrations._asgi_commonr   r   r	   $sentry_sdk.integrations._wsgi_commonr
   r   sentry_sdk.sessionsr   sentry_sdk.tracingr   r   sentry_sdk.utilsr   r   r   r   r   r   r   r   typingr   r   r   r   r   sentry_sdk._typesr   r   r   r   rL   r/   r=   r?   rk   r0   r.   <module>r      s         )   
 .   +  - &&FG 2 . /1  r0   