
    fi 2                     X   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 ddlmZmZ dd	lmZ dd
lmZmZ ddlmZmZmZmZmZ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$ ddl!m%Z% ddl!m&Z& ddl'm(Z(m)Z)  ed          Z*dZ+dZ,ddZ-d Z. G d d          Z/dS )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urlasgic                     t          | t          j                    j        |dd          \  }}t          j        ||           d S )NF)typehandled)client_options	mechanism)hint)r   
sentry_sdk
get_clientoptionscapture_event)excmechanism_typeeventr'   s       l/var/www/html/Pagina-Ingenieria-Requisitos/venv/lib/python3.11/site-packages/sentry_sdk/integrations/asgi.py_capture_exceptionr0   :   sW     '!,..6)e<<  KE4
 U......    c                     t          j        |           rt          | d          S t          j        |           rt	          j        |           S t          | dd          }t	          j        |          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
isfunctionasyncioiscoroutinefunctiongetattr)appcalls     r/   _looks_like_asgi3r>   E   sl     s 1sK(((		C	 	  1*3///sJ--*4000r1   c                   P    e Zd ZdZddddedfdZd Zd	 Zd
 Zd Z	d Z
d Zd ZdS )SentryAsgiMiddleware)r<   r4   transaction_styler-   span_originhttp_methods_to_captureFr   r!   manualNc                    |st           st          dt          z             |t          vrt	          d|dt          d          |dk    odt                      v }|rt          j        d           || _        || _	        || _
        || _        || _        |t          |          rd	}nd
}|d	k    r| j        | _        dS |d
k    r| j        | _        dS dS )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 )r!   	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_asgi3r4   
_run_asgi2)	selfr<   unsafe_context_datarA   r-   rB   rC   asgi_version0asgi_middleware_while_using_starlette_or_fastapis	            r/   __init__zSentryAsgiMiddleware.__init___   s7   $ # 	+? 	 13LM   $<<<*$$$&>&>&>@   f$P8N8P8P)P 	9 < 	Na   "3,&'>$ %% !  1 ODMMMQ ODMMM r1   c                 .    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,   r-   r0   r-   rP   r,   s     r/   _capture_lifespan_exceptionz0SentryAsgiMiddleware._capture_lifespan_exception        "c$:MNNNNr1   c                 .    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.
        rV   rW   rX   s     r/   _capture_request_exceptionz/SentryAsgiMiddleware._capture_request_exception   rZ   r1   c                       fd}|S )Nc                 F   K                        | |d           d {V S )NrI   rR   _run_app)receivesendscoperP   s     r/   innerz.SentryAsgiMiddleware._run_asgi2.<locals>.inner   s3      ugt!LLLLLLLLLr1    )rP   rd   re   s   `` r/   rO   zSentryAsgiMiddleware._run_asgi2   s/    	M 	M 	M 	M 	M 	M r1   c                 D   K   |                      |||d           d {V S )NrH   r_   r`   )rP   rd   rb   rc   s       r/   rN   zSentryAsgiMiddleware._run_asgi3   s2      ]]5'4a]HHHHHHHHHr1   c           	      .  K   t                               d          }|d         dk    }|s|rs	 |dk    r% |                     |          |           d {V S |                     ||           d {V S # t          $ r}|                     |           |d d }~ww xY wt                               d           	 t          j                    5 }t          |d          5  |	                                 d|_
        t          | j        |	          }	|                    |	           |d         }
|                     | j        |          \  }}|                    d
d                                          }d |
dv rI|
dk    s	|| j        v r9t%          t'          |          d                    |
          ||| j                  n"t-          t.          j        ||| j                  r                    d|
           t          j        d|i          nt7                      }|5  	 fd}|dk    rd |                     |          ||           d {V 	 cd d d            cd d d            cd d d            t                               d           S |                     |||           d {V 	 cd d d            cd d d            cd d d            t                               d           S # t          $ r}|                     |           |d d }~ww xY w# 1 swxY w Y   	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t                               d           d S # t                               d           w xY w)NFr#   lifespanrI   Trequest)session_moder!   )
asgi_scopemethod )http	websocketrp   z	{}.server)opnamesourceoriginz	asgi.typerl   )custom_sampling_contextc                    K   :|                      d          dk    od| v }|r                    | d                     |            d {V S )Nr#   zhttp.response.startstatus)getset_http_status)r.   is_http_responserc   transactions     r/   _sentry_wrapped_sendz;SentryAsgiMiddleware._run_app.<locals>._sentry_wrapped_send   sw      #.#:(-		&(9(9=R(R )>,4,= %5 (8 %U(3(C(CE(O(T(T(T-1T%[['8'8'8'8'8'8 8r1   )_asgi_middleware_appliedrx   r<   	ExceptionrY   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\   )rP   rd   rb   rc   rR   is_recursive_asgi_middlewareis_lifespanr,   sentry_scope	processortytransaction_nametransaction_sourcerm   transaction_contextr|   r{   s      `            @r/   ra   zSentryAsgiMiddleware._run_app   s     '?'C'CE'J'J$Fmz1' 		$; 		$$1$$!0%$!?!????????!%%$!?!???????? $ $ $00555t#$ 	!$$T***J	0+-- G0"<iHHH F0 F0 22444)/L& '(< O O OI 44Y???vB ==. (* #YYx44::<<F"&K222,,$:V0V0V*8 ,U 3 3#.#5#5b#9#9%5'9'+'7+ + +K '2!~!1#5#'#3	' ' ' # =#++K<<< '2	 #4'5A54I   
 )]] ( - 0 00
9 
9 
9 
9 
9 
9  ,q00-<TXXe__$+-A." ." (" (" (" (" (" (" !"!0 0 0 0 0 0 0[F0 F0 F0 F0 F0 F0 F0G0 G0 G0 G0 G0 G0 G0R %((//// .2XX$)74H." ." (" (" (" (" (" (" !")0 0 0 0 0 0 0[F0 F0 F0 F0 F0 F0 F0G0 G0 G0 G0 G0 G0 G0R %((////	  ) 0 0 0 ;;C@@@"%4/0/0 0 0 0 0 0 0 0 0[F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0G0 G0 G0 G0 G0 G0 G0 G0 G0 G0 G0 G0 G0 G0 G0R %((/////$((////s   *A8 A8 8
BBB=M8 M"EL:*L",0K8L:)M5M8 K89L:MM8 8
L	L	L	L""L&&L:)L&*L:.M:L>	>ML>	MM8 MM8 MM8 8Nc                    |                     di           }|                    t          |                     t          |          |d<   |                     d          }|                     d          pi                      d          }|d uo/|t          k    o$|t
          j        t
          j        t
          j        fv }|s*| 	                    | j
        |          \  }}	||d<   d|	i|d<   |S )Nrj   r{   transaction_infors   )rx   updater   r   _DEFAULT_TRANSACTION_NAMEr   	COMPONENTROUTECUSTOMr   rA   )
rP   r.   r'   rl   request_datar{   r   already_setrr   rs   s
             r/   r   z$SentryAsgiMiddleware.event_processor  s   yyB//-j99:::#L11i ii..#ii(:;;ArFFxPPt# 88"!+!'!( 	  	;@@&
 LD& $(E- )16(:E$%r1   c                    d }t           |         }|                    d          }|dk    rP|                    d          }|rt          |          pd}nt          ||dk    rdndd           }t          j        }nY|dk    rS|                    d          }|rt          |d	d           }||}n&t          ||dk    rdndd           }t          j        }|t          }t          j        }||fS ||fS )
Nr#   r   rn   ro   ws)hostr    routepath)	r   rx   r   r	   r   URLr;   r   r   )	rP   rA   rl   rr   rs   r   r   r   r   s	            r/   r   z5SentryAsgiMiddleware._get_transaction_name_and_source3  s   !"34^^F##
**!~~j11H  /0::@b
bFllFFSWXXX*.%'' NN7++E /ufd33#D
bFllFFSWXXX*.<,D&,F<V|r1   )__name__
__module____qualname__	__slots__r
   rT   rY   r\   rO   rN   ra   r   r   rf   r1   r/   r@   r@   U   s        I "$ ?8, 8, 8, 8,tO O OO O O  I I IZ0 Z0 Z0x  D" " " " "r1   r@   )r!   )0__doc__r9   r5   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   rK   r0   r>   r@   rf   r1   r/   <module>r      ss                      ) ) ) ) ) )                     
        . - - - - -                         + * * * * *             .-------- &:&FGG 2 . / / / /1 1 1 @ @ @ @ @ @ @ @ @ @r1   