
    \j.O                        d 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mZmZmZ ddlmZmZ dd	lmZ dd
lmZmZmZ ddlmZmZmZ ddlmZ ddl m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* ddl+m,Z, e,r4ddl+m-Z- ddl+m.Z. ddl+m/Z/ ddl+m0Z0 ddl+m1Z1 ddl+m2Z2 ddl3m4Z4m5Z5m6Z6 ddlm7Z7  e!d      Z8dZ9dZ:ejv                  dk\  rddlm<Z< nddl=m<Z< d%ddde>ddfd Z?d!dde@fd"ZA G d# d$      ZBy)&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_attributes_get_request_data_get_url)DEFAULT_HTTP_METHODS_TO_CAPTUREnullcontext)track_session)StreamedSpanSegmentSourceSOURCE_FOR_STYLE)r   TransactionTransactionSource)has_span_streaming_enabled)

ContextVarevent_from_exceptionHAS_REAL_CONTEXTVARSCONTEXTVARS_ERROR_MESSAGEloggertransaction_from_function_get_installed_modulesreraisecapture_internal_exceptionsqualname_from_function)TYPE_CHECKING)Any)ContextManager)Dict)Optional)Tuple)Union)
AttributesEventHint)Spansentry_asgi_middleware_appliedzgeneric ASGI request)endpointurl)      )iscoroutinefunctionexcr   mechanism_typereturnc                     t        | t        j                         j                  |dd      \  }}t        j                  ||       y )NF)typehandled)client_options	mechanism)hint)r   
sentry_sdk
get_clientoptionscapture_event)r/   r0   eventr7   s       F/root/env/lib/python3.12/site-packages/sentry_sdk/integrations/asgi.py_capture_exceptionr>   N   s?    &!,,.66)e<KE4
 U.    appc                     t        j                  |       rt        | d      S t        j                  |       rt	        |       S t        | dd      }t	        |      S )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
isfunctionr.   getattr)r@   calls     r=   _looks_like_asgi3rJ   W   sO     ssK((			C	 "3''sJ-"4((r?   c                       e Zd ZdZddddedfddd	ed
edededdddddfdZdeddfdZ	deddfdZ
d#dZd$dZdddddddeddf
dZ	 	 	 	 	 	 	 	 d%dZdd d
eddddfd Zdd d!eddddfd"Zy)&SentryAsgiMiddleware)r@   rC   transaction_styler0   span_originhttp_methods_to_captureFr*   asgimanualNr@   r   unsafe_context_datarM   r0   rN   rO   zTuple[str, ...]asgi_versionzOptional[int]r1   c                    |st         st        dt        z         |t        vrt	        d|dt        d      |dk(  xr dt               v }|rt        j                  d       || _        || _	        || _
        || _        || _        |t        |      rd	}nd
}|d	k(  r| j                  | _        y|d
k(  r| j                   | _        yy)ab  
        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 )rP   	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.Nr,      )r   RuntimeErrorr   TRANSACTION_STYLE_VALUES
ValueErrorr   r   warningrM   r0   rN   r@   rO   rJ   
_run_asgi3rC   
_run_asgi2)	selfr@   rR   rM   r0   rN   rO   rS   0asgi_middleware_while_using_starlette_or_fastapis	            r=   __init__zSentryAsgiMiddleware.__init__p   s    " #+? 13LM  $<<$&>@  f$P8N8P)P 	9 <NNa "3,&'>$ %  1 OODMQ OODM r?   r/   c                 0    t        || j                        S )zCapture exceptions raise in application lifespan handlers.

        The separate function is needed to support overriding in derived integrations that use different catching mechanisms.
        r/   r0   r>   r0   r^   r/   s     r=   _capture_lifespan_exceptionz0SentryAsgiMiddleware._capture_lifespan_exception       
 "c$:M:MNNr?   c                 0    t        || j                        S )zCapture exceptions raised in incoming request handlers.

        The separate function is needed to support overriding in derived integrations that use different catching mechanisms.
        rb   rc   rd   s     r=   _capture_request_exceptionz/SentryAsgiMiddleware._capture_request_exception   rf   r?   scopec                      d fd}|S )Nc                 J   K   j                  | |d       d {   S 7 w)NrW   rS   _run_app)receivesendri   r^   s     r=   innerz.SentryAsgiMiddleware._run_asgi2.<locals>.inner   s$     ugt!LLLLs   #!#)ro   r   rp   r   r1   r    )r^   ri   rq   s   `` r=   r]   zSentryAsgiMiddleware._run_asgi2   s    	M r?   ro   rp   c                 H   K   | j                  |||d       d {   S 7 w)Nr,   rl   rm   )r^   ri   ro   rp   s       r=   r\   zSentryAsgiMiddleware._run_asgi3   s#     ]]5'4a]HHHHs   " "c                 f  K   t         j                  d      }|d   dk(  }|s|rA	 |dk(  r  | j                  |      |       d {   S | j                  ||       d {   S t	        j
                         }
t        |
j                        }t         j                  d       	 t	        j                         5 }t        |d	      5  |j!                          d
|_        t%        | j&                  |      }|j)                  |       |d   }| j+                  | j,                  |      \  }}|j                  dd      j/                         }|rd }t1        |d|      | j2                  |d}|dv rx|dk(  s|| j4                  v rt        j6                  j9                  t;        |             |j=                  d|i       | d|d<   t        j6                  j?                  ||      }net        j6                  jA                          |j=                  d|i       tB        jD                  |d<   t        j6                  j?                  ||      }|xs
 tG               }nd }|dv rF|dk(  s|| j4                  v rZt9        t;        |      djI                  |      ||| j2                        }n'tK        tB        jD                  ||| j2                        }|r|jM                  d|       |t	        jN                  |d|i      n	tG               }|5 tQ        tR              r3tU        |      jW                         D ]  \  }}jY                  ||        	 	 	 	 	 dfd}|dk(  r4 | j                  |      ||       d {   tQ        tR              rԉd uxr jZ                  t\        k7  xrl j_                         j                  d      t`        jb                  jd                  t`        jf                  jd                  t`        jh                  jd                  fv }t               5  |s8| jk                  | j,                  |      \  }}|_-        jY                  d|       d d d        cd d d        cd d d        cd d d        t         j                  d       S | j                  |||       d {   tQ        tR              rԉd uxr jZ                  t\        k7  xrl j_                         j                  d      t`        jb                  jd                  t`        jf                  jd                  t`        jh                  jd                  fv }t               5  |s8| jk                  | j,                  |      \  }}|_-        jY                  d|       d d d        cd d d        cd d d        cd d d        t         j                  d       S 7 |7 d# t        $ r}t	        j
                         j                  j                  di       j                  dd      }|r| j                  |       |d t        j                         }	t               5  | j                  |       d d d        n# 1 sw Y   nxY wt        |	  Y d }~d }~ww xY w7 # 1 sw Y   +xY w7 # 1 sw Y   xY w# t        $ r}t	        j
                         j                  j                  di       j                  dd      }|r| jm                  |       |d t        j                         }	t               5  | jm                  |       d d d        n# 1 sw Y   nxY wt        |	  Y d }~nd }~ww xY w	 tQ        tR              r؉d uxr jZ                  t\        k7  xrl j_                         j                  d      t`        jb                  jd                  t`        jf                  jd                  t`        jh                  jd                  fv }t               5  |s8| jk                  | j,                  |      \  }}|_-        jY                  d|       d d d        n# 1 sw Y   nxY w# tQ        tR              rd uxr jZ                  t\        k7  xrl j_                         j                  d      t`        jb                  jd                  t`        jf                  jd                  t`        jh                  jd                  fv }t               5  |s8| jk                  | j,                  |      \  }}|_-        jY                  d|       d d d        w # 1 sw Y   w xY ww xY wd d d        n# 1 sw Y   nxY wd d d        n# 1 sw Y   nxY wd d d        n# 1 sw Y   nxY wt         j                  d       y # t         j                  d       w xY ww)NFr3   lifespanrW   _experiments suppress_asgi_chained_exceptionsTrequest)session_moderP   )
asgi_scopemethod value)sentry.span.sourcezsentry.originznetwork.protocol.name)http	websocketr   rz   z.serverz	sentry.op)name
attributesz	{}.server)opr   sourceoriginz	asgi.type)custom_sampling_contextc                   K   g| j                  d      dk(  xr d| v }|rKt        t              r'| d   dk\  rdnd_        j	                  d| d          nj                  | d           |        d {   S 7 w)Nr3   zhttp.response.startstatusi  errorokzhttp.response.status_code)get
isinstancer   r   set_attributeset_http_status)r<   is_http_responserp   spans     r=   _sentry_wrapped_sendz;SentryAsgiMiddleware._run_app.<locals>._sentry_wrapped_sendE  s      $(#3(-		&(9=R(R )>,4,= %5 (8+5dL+I 49?c3I 1859 -1K
 -1,>,>0K05h-.
 -1,@,@x,Q-1%['8 8'8s   A5A?8A=9A?r~   )r<   zDict[str, Any]r1   r   )7_asgi_middleware_appliedr   r@   	Exceptionr8   r9   r:   re   sysexc_infor   r   r   setisolation_scoper   clear_breadcrumbs_namer   event_processoradd_event_processor _get_transaction_name_and_sourcerM   upperrH   rN   rO   tracesr   r   set_custom_sampling_context
start_span	new_tracer   HTTP_SERVERr   formatr   set_tagstart_transactionr   r   r   itemsr   r   _DEFAULT_TRANSACTION_NAMEget_attributesr   	COMPONENTr}   ROUTECUSTOM_get_segment_name_and_sourcerh   )r^   ri   ro   rp   rS   is_recursive_asgi_middlewareis_lifespanr/   suppress_chained_exceptionsr   clientspan_streamingsentry_scope	processortytransaction_nametransaction_sourcer{   segmentr   span_ctxtransaction	attributer}   r   already_setr   r   r   s      `                        @r=   rn   zSentryAsgiMiddleware._run_app   s|	     (@'C'CE'J$Fmz1';#1$!0%$!???!%%$!???" &&(3FNNC $$T*l	0++- iY"<iH hY 224)/L& '(<(< OI 44Y?vB ==..(* #YYx4::<F &<@29 2G=O3 .2-=-=574
 !66 "k 1#)T-I-I#I * 1 1 @ @eAT U , H H%15$9!" >@D.
; 7*4*;*;*F*F)9j +G +" '--779(DD!-u 5 79nnJ{3&0&7&7&B&B%5* 'C 'G $+#;km '+!66 "k 1#)T-I-I#I.<$0$7'2'9'9"'=)9+=+/+;+;/" +6#%>>%5'9'+'7'7	+K ''//R@  +6	 '88 +9Eu8M
 "- ! " MYT%dL94K %5#egE 0	5 !% 2 29e DE
FY9'79!&90  ,q0-<TXXe_$+-A." ("0  *$=$($4 %&(,		5N(N%&(,(;(;(=(A(ABV(W(5(?(?(E(E(5(;(;(A(A(5(<(<(B(B(&)& !, &A%B !Y+6,0,M,M040F0F-. )5f
 59	(,(:(:;OQW(X!YKMY MYwhY hYiY iYV %((/S .2XX$)74H." ("(  *$=$($4 %&(,		5N(N%&(,(;(;(=(A(ABV(W(5(?(?(E(E(5(;(;(A(A(5(<(<(B(B(&)& !, &A%B !Y+6,0,M,M040F0F-. )5f
 59	(,(:(:;OQW(X!YKMY MYwhY hYiY iYV %((/G @? #))+WSS4S;TB ,
 /44S94'<<>02 :44S9: : :"#d("F!Y !Y?(">!Y !Y7  ) / * 5 5 7!(^R)@!$%G!N 8
  ; $ ? ? D&)t 3'*||~H!<!> E $ ? ? DE E E#X./ /  *$=$($4 %&(,		5N(N%&(,(;(;(=(A(ABV(W(5(?(?(E(E(5(;(;(A(A(5(<(<(B(B(&)& !, &A%B !Y+6,0,M,M040F0F-. )5f
 59	(,(:(:;OQW(X!Y !Y !Y  *$=$($4 %&(,		5N(N%&(,(;(;(=(A(ABV(W(5(?(?(E(E(5(;(;(A(A(5(<(<(B(B(&)& !, &A%B !Y+6,0,M,M040F0F-. )5f
 59	(,(:(:;OQW(X!Y !Y !Y  >uMY MY MYwhY hY hYiY iY iYV %((/$((/s  "f1 W	 WW	 f1W	 "W#W	 &?f1&f :e5Ie 
Ae,Z!;Z
<Z!?B!e ;Ze#	e ,	e55	f >f1Z!*Z
+Z!.B!e;Z
e	e 	e5$	f -f1W	 W	 		Y>A2Y9Y	Y9Y(	$Y93f19Y>>f1Z!Z	eZ!Ze!	]	*A2]	\7.	]	7] <]	a]	aB"e;;a 	6
e a	eB"d?	.;d2)	d?	2d;7d?	?e	e ee 	e5 e)	%e5,	f 5e>:f f1f..f1rz   c                    |j                  di       }|j                  t        |             t        |      |d<   |j                  d      }|j                  d      xs i j                  d      }|d uxr< |t        k7  xr1 |t
        j                  t
        j                  t
        j                  fv }|s+| j                  | j                  |      \  }}	||d<   d|	i|d<   |S )Nrx   r   transaction_infor   )r   updater	   r   r   r   r   r   r   r   rM   )
r^   r<   r7   rz   request_datar   r   r   r   r   s
             r=   r   z$SentryAsgiMiddleware.event_processor  s     yyB/-j9:#L1i ii.#ii(:;ArFFxPt# 88"!++!''!(( 	 @@&&
LD& $(E- )16(:E$%r?   r^   zTuple[str, str]c                    d }t         |   }|j                  d      }|dk(  rI|j                  d      }|rt        |      xs d}nut        ||dk(  rdndd       }t        j
                  }nO|dk(  rJ|j                  d      }|rt        |d	d       }|(|}n%t        ||dk(  rdndd       }t        j
                  }|t        }t        j                  }||fS ||fS 
Nr3   r*   r|   r   ws)hostr+   routepath)	r   r   r   r
   r   URLrH   r   r   )	r^   rM   rz   r   r   r   r*   r   r   s	            r=   r   z5SentryAsgiMiddleware._get_transaction_name_and_source  s     !"34^^F#
*!~~j1H 0:@b
bFlFSWX*..%' NN7+Eufd3#D
bFlFSWX*..<,D&,,F<V|r?   segment_stylec                    d }t         |   j                  }|j                  d      }|dk(  rS|j                  d      }|rt        |      xs d}nt	        ||dk(  rdndd       }t
        j                  j                  }nY|dk(  rT|j                  d      }|rt        |d	d       }|2|}n/t	        ||dk(  rdndd       }t
        j                  j                  }|$t        }t
        j                  j                  }||fS ||fS r   )
SEGMENT_SOURCE_FOR_STYLEr}   r   r   r
   r   r   rH   r   r   )	r^   r   rz   r   r   r   r*   r   r   s	            r=   r   z1SentryAsgiMiddleware._get_segment_name_and_source  s    )-8>>^^F#J&!~~j1H -h7=2
bFlFSWX&**00e# NN7+Eufd3#D
bFlFSWX&**00<,D"((..F<V|r?   )ri   r   r1   r   )ri   r   ro   r   rp   r   r1   r   )r<   r&   r7   r'   rz   r   r1   zOptional[Event])__name__
__module____qualname__	__slots__r   boolstrr`   r   re   rh   r]   r\   intrn   r   r   r   rr   r?   r=   rL   rL   f   sM   I %*!+$#5T(,7,7, "7, 	7,
 7, 7, "37, &7, 
7,rOy OT OOi OD OIK0K0%*K027K0GJK0	K0Z$*8=	F#$#9<#JO#	#J#$#58#FK#	#r?   rL   )rP   )C__doc__r   rD   copyr   	functoolsr   r8   sentry_sdk.apir   sentry_sdk.constsr   $sentry_sdk.integrations._asgi_commonr   r   r	   r
   $sentry_sdk.integrations._wsgi_commonr   r   sentry_sdk.sessionsr   sentry_sdk.tracesr   r   r   r   sentry_sdk.tracingr   r   sentry_sdk.tracing_utilsr   sentry_sdk.utilsr   r   r   r   r   r   r   r   r   r   typingr   r   r    r!   r"   r#   r$   sentry_sdk._typesr%   r&   r'   r(   r   r   rY   version_infor.   asyncior   r>   r   rJ   rL   rr   r?   r=   <module>r      s         )    . 
 
 @   !%99' &&FG 2 .  w++/E /3 /D /)5 )T )R Rr?   