
    fi~f                        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mZ d dl	Z	d dl
mZ d dlmZmZmZ d 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 d dlmZmZmZm Z m!Z!m"Z" d dl#m$Z$ e$rd dl#m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, d dl-m.Z.m/Z/ 	 d dl0Z0d dl0m1Z2 d dl3m4Z4 d dl5m6Z6 d dl7m8Z8 d dl9m:Z: d dl;m<Z< d dl=m>Z> d dl?m@Z@mAZAmBZCmDZD n# eE$ r  ed          w xY w	 d dlFmGZG n# eE$ r	 d dlHmGZG Y nw xY w	 	 d dlIZJn# eE$ r d dlJZJY nw xY wn# eE$ r dZJY nw xY wdZKdZL G d de          ZMd ZN eeM          d-d            ZOd  ZP eeM          d!             ZQd" ZRd# ZSd$ ZTd% ZUd& ZVd' ZW G d( d)          ZXd* ZYd+ ZZd, Z[dS ).    N)Set)deepcopy)JSONDecodeError)OP)DidNotEnableIntegration$_DEFAULT_FAILED_REQUEST_STATUS_CODES)DEFAULT_HTTP_METHODS_TO_CAPTUREHttpCodeRangeContainer_is_json_content_typerequest_body_within_bounds)SentryAsgiMiddleware)should_send_default_pii)SOURCE_FOR_STYLETransactionSource)AnnotatedValuecapture_internal_exceptionsensure_integration_enabledevent_from_exceptionparse_versiontransaction_from_function)TYPE_CHECKING)Any	AwaitableCallable	ContainerDictOptionalTupleUnion)EventHttpStatusCodeRange)__version__)	Starlette)
UploadFile)
Middleware)AuthenticationMiddleware)Request)Match)ASGIAppReceiveScopeSendzStarlette is not installed)ExceptionMiddlewarezgeneric Starlette request)endpointurlc                   F    e Zd ZdZde ZdZdedefdZe	d             Z
dS )	StarletteIntegration	starlettez
auto.http. r0   Tc                 ~   |t           vrt          d|dt           d          || _        || _        t	          t          t          j        |                    | _        t          |t                    r	|| _        d S t          j        dt          d           |t          | _        d S t!          |          | _        d S )Nz%Invalid value for transaction_style: z (must be in )zgPassing a list or None for failed_request_status_codes is deprecated. Please pass a set of int instead.   )
stacklevel)TRANSACTION_STYLE_VALUES
ValueErrortransaction_stylemiddleware_spanstuplemapstrupperhttp_methods_to_capture
isinstancer   failed_request_status_codeswarningswarnDeprecationWarningr	   r   )selfr;   rC   r<   rA   s        q/var/www/html/Pagina-Ingenieria-Requisitos/venv/lib/python3.11/site-packages/sentry_sdk/integrations/starlette.py__init__zStarletteIntegration.__init__X   s     $<<<*$$$&>&>&>@   "3 0',S<S-T-T'U'U$1377 	/JD,,,M4"	    +23W0003I/4 4000    c                      t          t                    } | 't          d                    t                              t	                       t                       t                       | dk    rt                       d S d S )Nz Unparsable Starlette version: {})r      )r   STARLETTE_VERSIONr   formatpatch_middlewarespatch_asgi_apppatch_request_responsepatch_templates)versions    rH   
setup_oncezStarletteIntegration.setup_oncez   s       122?299:KLL   	   g rJ   N)__name__
__module____qualname__
identifieroriginr;   r	   r
   rI   staticmethodrT    rJ   rH   r2   r2   R   sj        J&*&&F  $H ?       D   \  rJ   r2   c                 D    | j         fd}j        dv}|r|| _         | S )Nc                   K   t          j                                        t                    }||j        s | |fi | d {V S | j        j        t          | ||          \  }}|(t          j                    	                    ||           t          j
        t          j        t          j                  5 }|                    d           fd}	t          dt!                              }
|
dk    }|s|	n}fd}t          dt!                              }|dk    }|s|n} | |||fi | d {V cd d d            S # 1 swxY w Y   d S )	NsourceopnamerY   starlette.middleware_namec            
        K   t          j        t          j        t	          dt                              t          j                  5 }|                    d            | i | d {V cd d d            S # 1 swxY w Y   d S NrW   r`   rc   )	
sentry_sdk
start_spanr   MIDDLEWARE_STARLETTE_RECEIVEgetattrr?   r2   rY   set_tag)argskwargsspanmiddleware_namereceives      rH   _sentry_receivezO_enable_span_for_middleware.<locals>._create_span_call.<locals>._sentry_receive   s      *6 .#g,,GG/6   : LL!<oNNN!($!9&!9!9999999: : : : : : : : : : : : : : : : : :   $A<<B B rU   rp   c            
        K   t          j        t          j        t	          dt                              t          j                  5 }|                    d            | i | d {V cd d d            S # 1 swxY w Y   d S re   )	rf   rg   r   MIDDLEWARE_STARLETTE_SENDri   r?   r2   rY   rj   )rk   rl   rm   rn   sends      rH   _sentry_sendzL_enable_span_for_middleware.<locals>._create_span_call.<locals>._sentry_send   s      *3 ~s4yyAA/6   7 LL!<oNNN!%t!6v!6!66666667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7rq   ru   )rf   
get_clientget_integrationr2   r<   	__class__rU    _get_transaction_from_middlewareget_current_scopeset_transaction_namerg   r   MIDDLEWARE_STARLETTErY   rj   ri   r?   )appscopero   rt   rl   integrationrb   r_   middleware_spanrp   receive_namereceive_patchednew_receiveru   	send_namesend_patchednew_sendrn   old_calls     ``             @rH   _create_span_callz6_enable_span_for_middleware.<locals>._create_span_call   s=      +--==>RSSk&B!#ugtFFvFFFFFFFFF-0 8UKPPf(**?? @   
 "& '.
 
 
 %	O ##$?QQQ: : : : : : #7JGEEL*.??O1@M//gK7 7 7 7 7 7  j#d))<<I$6L+7A||TH!#uk8NNvNNNNNNNNK%	O %	O %	O %	O %	O %	O %	O %	O %	O %	O %	O %	O %	O %	O %	O %	O %	O %	Os   BEEE)r   %_sentry_authenticationmiddleware_call _sentry_exceptionmiddleware_call)__call__rU   )middleware_classr   not_yet_patchedr   s      @rH   _enable_span_for_middlewarer      sW    (H5O 5O 5O 5O 5On ' 0 O  6$5!rJ   Fc                     t          | t          j                    j        t          j        |d          \  }}t          j        ||           d S )N)typehandled)client_options	mechanism)hint)r   rf   rv   optionsr2   rX   capture_event)	exceptionr   eventr   s       rH   _capture_exceptionr      sZ     '!,..6/:wOO  KE4 U......rJ   c                     | j         dt                    v}|r!fd}|| _         | j        fd}|| _        dS dS )zX
    Capture all exceptions in Starlette app and
    also extract user information.
    _sentry_middleware_initc                      | g|R i | | j                                         fd}| j                                         D ]}|| j         |<   d S )Nc                   K   t          j                                        t                    }|d         }|Kt	          |d          o't          |j        t                    o|j        |j        v }|rt          |d           d }t          |          j        D ]}|v r
|         } n|d S t          |          r || g|R i | d {V S  || g|R i |S )Nr   status_codeT)r   )rf   rv   rw   r2   hasattrrB   r   intrC   r   r   __mro___is_async_callable)	rG   rk   rl   r   expis_http_server_errorold_handlerclsold_handlerss	           rH   !_sentry_patched_exception_handlerzfpatch_exception_middleware.<locals>._sentry_middleware_init.<locals>._sentry_patched_exception_handler   s=     (355EE(  1g*]33 W&s<<WO{/VV )
 , >*3==== #99,  Cl**&23&7 + &F%k22 >!,T!CD!C!C!CF!C!CCCCCCCC&;t=d===f===rJ   )_exception_handlerscopykeys)rG   rk   rl   r   keyr   old_middleware_inits        @rH   r   z;patch_exception_middleware.<locals>._sentry_middleware_init   s    6t666v666  388::L> > > > >@ /4466 R R0Q(--R RrJ   c                 R   K   t          |            | |||           d {V  d S N_add_user_to_sentry_scoperG   r~   ro   rt   r   s       rH   r   zDpatch_exception_middleware.<locals>._sentry_exceptionmiddleware_call  sE       &e,,,(466666666666rJ   N)rI   r?   r   )r   r   r   r   r   r   s       @@rH   patch_exception_middlewarer      s     +3/s;N7O7OOO @E(	R (	R (	R (	R (	RT %<!#,	7 	7 	7 	7 	7  %E!!!A@E @ErJ   c                    d| vrdS t                      sdS i }| d         }t          |dd          }|r|                    d|j                   t          |dd          }|r|                    d|j                   t          |dd          }|r|                    d|j                   t          j                    }|                    |           dS )zZ
    Extracts user information from the ASGI scope and
    adds it to Sentry's scope.
    userNusernameidemail)	r   ri   
setdefaultr   r   r   rf   get_isolation_scopeset_user)r~   	user_infostarlette_userr   user_idr   sentry_scopes          rH   r   r   ,  s     U"$$ I6]N~z488H BZ)@AAAndD11G 6T>#4555NGT22E <Wn&:;;;133L)$$$$$rJ   c                 X    | j         dt                    v}|rfd}|| _         dS dS )z/
    Add user information to Sentry scope.
    r   c                 R   K    | |||           d {V  t          |           d S r   r   r   s       rH   r   zNpatch_authentication_middleware.<locals>._sentry_authenticationmiddleware_callW  sC      (4666666666%e,,,,,rJ   N)r   r?   )r   r   r   r   s      @rH   patch_authentication_middlewarer   L  s]    
  (H=S]]RO J	- 	- 	- 	- 	-
 %J!!!J JrJ   c                  l    t           j        dt                    v} | rfd}|t           _        dS dS )za
    Patches Starlettes `Middleware` class to record
    spans for every middleware invoked.
    r   c                     |t           k    r | |g|R i |S t          |          } | |g|R i | |t          k    rt          |           |t          k    rt          |           d S d S r   )r   r   r'   r   r.   r   )rG   r   rk   rl   span_enabled_clsr   s        rH   r   z2patch_middlewares.<locals>._sentry_middleware_initk  s    *****4FtFFFvFFF:3??&6HHHHHHH.../444)))*3///// *)rJ   N)r&   rI   r?   )r   r   r   s     @rH   rO   rO   _  s\     %-/s;N7O7OOO 6	0 	0 	0 	0 	0 6
!6 6rJ   c                  B    t           j        fd} | t           _        dS )zG
    Instrument Starlette ASGI app using the SentryAsgiMiddleware.
    c                 2   K   t          j                                        t                    }|  |||           d {V S t	           fdt          j        |j        t          j        |r|j        nt          d          } ||||           d {V S )Nc                       g| R i |S r   r[   )akwold_apprG   s     rH   <lambda>zBpatch_asgi_app.<locals>._sentry_patched_asgi_app.<locals>.<lambda>  s!    WWT4A44444 rJ      )mechanism_typer;   span_originrA   asgi_version)
rf   rv   rw   r2   r   rX   r;   rY   rA   r
   )rG   r~   ro   rt   r   
middlewarer   s   `     rH   _sentry_patched_asgi_appz0patch_asgi_app.<locals>._sentry_patched_asgi_app  s       +--==>RSS ugt<<<<<<<<<)44444/:);,3 5334
 
 

  Zw555555555rJ   N)r$   r   )r   r   s    @rH   rP   rP   |  s6    
  G6 6 6 6 6* 2IrJ   c                     t          | t          j                  r!| j        } t          | t          j                  !t	          j        |           p't          |           ot	          j        | j                  S r   )rB   	functoolspartialfuncasyncioiscoroutinefunctioncallabler   )objs    rH   r   r     sj    
S)+
,
, h S)+
,
,  &s++ C'5clCCrJ   c                  V    t           j        j        fd} | t           j        _        d S )Nc                     | t                    }|rfd}|} n!t          j                  fd            }|}  |           S )Nc                    K   t          j                                        t                    }| | i | d {V S | d         }t	          t          j                    |j        |           t          j                    }t          |          }|	                                 d {V fd}t          j
        |_        |                     |||                      | i | d {V S )Nr   c                     fd}|S )Nc                     |                      di           }rdv rd         |d<   dv rd         |d<   t          |          | d<   | S )Nrequestcookiesdatagetr   )r   r   request_infoinfos      rH   event_processorzpatch_request_response.<locals>._sentry_request_response.<locals>._sentry_async_func.<locals>._make_request_event_processor.<locals>.event_processor  sh     (-yyB'?'? D(D00:>y/Y 7%~~7;F|V 4+3L+A+Ai($rJ   r[   )reqr   r   r   s      rH   _make_request_event_processorz{patch_request_response.<locals>._sentry_request_response.<locals>._sentry_async_func.<locals>._make_request_event_processor  s$    % % % % % +*rJ   )rf   rv   rw   r2    _set_transaction_name_and_sourcerz   r;   r   StarletteRequestExtractorextract_request_inforX   _nameadd_event_processor)	rk   rl   r   r   r   	extractorr   r   old_funcs	          @rH   _sentry_async_funczTpatch_request_response.<locals>._sentry_request_response.<locals>._sentry_async_func  s?     (355EE(  &!)4!:6!:!::::::::q'00221    *=??5g>>	&;;========+ + + + +$ &:%D"0011';GG   &Xt6v666666666rJ   c                  8   t          j                                        t                    }| 	| i |S t          j                    }|j        |j                                         t          j                    }|j        |j        	                                 | d         }t          ||j        |           t          |          }|                                fd}t          j        |_        |                     |||                      	| i |S )Nr   c                     fd}|S )Nc                 f    |                      di           }r|d<   t          |          | d<   | S )Nr   r   r   )r   r   r   r   s      rH   r   zpatch_request_response.<locals>._sentry_request_response.<locals>._sentry_sync_func.<locals>._make_request_event_processor.<locals>.event_processor  sA     (-yyB'?'?" >6=L3+3L+A+Ai($rJ   r[   )r   r   r   r   s      rH   r   zzpatch_request_response.<locals>._sentry_request_response.<locals>._sentry_sync_func.<locals>._make_request_event_processor  s$    
% 
% 
% 
% 
% +*rJ   )rf   rv   rw   r2   rz   transactionupdate_active_threadr   profileupdate_active_thread_idr   r;   r   extract_cookies_from_requestrX   r   r   )
rk   rl   r   current_scoper   r   r   r   r   r   s
           @rH   _sentry_sync_funczSpatch_request_response.<locals>._sentry_request_response.<locals>._sentry_sync_func  sF    )355EE(  &#8T4V444 * < > > ,8!-BBDDD)=??'3 (@@BBBq'0 +"?   6g>>	#@@BB+ + + + +  &:%D"0011';GG    x0000rJ   )r   r   wraps)r   is_coroutiner   r   r   old_request_responses       @rH   _sentry_request_responsez8patch_request_response.<locals>._sentry_request_response  s    )(33 d	%+7 +7 +7 +7 +7Z &DD _X&&.1 .1 .1 .1 '&.1` %D##D)))rJ   )r3   routingrequest_response)r   r   s    @rH   rQ   rQ     sB    $,=k* k* k* k* k*Z *BI&&&rJ   c                      	 ddl m n# t          $ r Y d S w xY wddlm}  | j        dt                    v}|rfd}|| _        d S d S )Nr   )Markup)Jinja2Templates_sentry_jinja2templates_initc                     fd}|                     dg            ||d         vr|d                             |            | g|R i |S )Nc                 h     t          j                                                              }d|iS )Nsentry_trace_meta)rf   rz   trace_propagation_meta)r   
trace_metar  s     rH   add_sentry_trace_metazTpatch_templates.<locals>._sentry_jinja2templates_init.<locals>.add_sentry_trace_meta2  s=    #V022IIKK 
 ( rJ   context_processors)r   append)rG   rk   rl   r  r  old_jinja2templates_inits       rH   r  z5patch_templates.<locals>._sentry_jinja2templates_init0  s         2B777$F3G,HHH+,334IJJJ++DB4BBB6BBBrJ   )
markupsafer  ImportErrorstarlette.templatingr  rI   r?   )r  r   r  r  r  s      @@rH   rR   rR     s    %%%%%%%    544444.74C = = O  @	C 	C 	C 	C 	C 	C$ $@   )@ @s    
c                   F    e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZdS )r   z
    Extracts useful information from the Starlette request
    (like form data or cookies) and adds it to the Sentry event.
    Nc                     || _         d S r   )r   )rG   r   s     rH   rI   z"StarletteRequestExtractor.__init__M  s    rJ   c                 N    d }t                      r|                                 }|S r   )r   r   )rG   r   s     rH   r   z6StarletteRequestExtractor.extract_cookies_from_requestQ  s'    "$$ 	%llnnGrJ   c                   K   t          j                    }i }t                      5  t                      r|                                 |d<   |                                  d {V }|s|cd d d            S |r4t          ||          s$t          j                    |d<   |cd d d            S | 	                                 d {V }|r||d<   |cd d d            S | 
                                 d {V }|r^i }|                                D ]4\  }}t          |t                    }	|	s|nt          j                    ||<   5||d<   |cd d d            S t          j                    |d<   |cd d d            S # 1 swxY w Y   d S )Nr   r   )rf   rv   r   r   r   content_lengthr   r   removed_because_over_size_limitjsonformitemsrB   r%   removed_because_raw_data)
rG   clientr   r  r  r  	form_datar   valis_files
             rH   r   z.StarletteRequestExtractor.extract_request_infoY  s     &(((** (	  (	 &(( 9*.,,..Y' $(#6#6#8#8888888N! $#(	  (	  (	  (	  (	  (	  (	  (	   $&@' ' $ (6'U'W'WV$#(	  (	  (	  (	  (	  (	  (	  (	 $ $$$$$$D $'+V$#+(	  (	  (	  (	  (	  (	  (	  (	 0 $$$$$$D $	 $

  HC(j99G  'G+DFF cNN (1V$#I(	  (	  (	  (	  (	  (	  (	  (	 N $2#J#L#LL Q(	  (	  (	  (	  (	  (	  (	  (	  (	  (	  (	  (	  (	  (	  (	  (	  (	  (	 s+   AE96)E9,"E9A-E9E99E= E=c                 d   K   d| j         j        v rt          | j         j        d                   S d S )Nzcontent-length)r   headersr   rG   s    rH   r  z(StarletteRequestExtractor.content_length  s4      t|333t|+,<=>>>trJ   c                     | j         j        S r   )r   r   r"  s    rH   r   z!StarletteRequestExtractor.cookies  s    |##rJ   c                    K   t           d S | j                                         d {V  | j                                         d {V S r   )	multipartr   bodyr  r"  s    rH   r  zStarletteRequestExtractor.form  s_      4 l!!!!!!!!!\&&(((((((((rJ   c                 Z    t          | j        j                            d                    S )Nzcontent-type)r   r   r!  r   r"  s    rH   is_jsonz!StarletteRequestExtractor.is_json  s#    $T\%9%=%=n%M%MNNNrJ   c                    K   |                                  sd S 	 | j                                         d {V S # t          $ r Y d S w xY wr   )r(  r   r  r   r"  s    rH   r  zStarletteRequestExtractor.json  sh      ||~~ 	4	**,,,,,,,,, 	 	 	44	s   9 
AA)rU   rV   rW   __doc__r   rI   r   r   r  r   r  r(  r  r[   rJ   rH   r   r   E  s         
 G    .  .  . `  $ $ $) ) )O O O    rJ   r   c                    |                      d          }|sd S |j        D ]^}|                    |           }|d         t          j        k    r1	 |j        c S # t          $ r |                      d          cY c S w xY w_d S )Nrouterr   path)r   routesmatchesr)   FULLr-  AttributeError)r~   r,  routematchs       rH   _transaction_name_from_routerr4    s    YYx  F t ) )e$$8uz!!)z!!!! ) ) )yy((((((() " 4s   AA<;A<c                    d }t           |         }|dk    r.|j                            d          }|rt          |          pd }n|dk    rt	          |j                  }|t
          }t          j        }|                     ||           d S )Nr/   r0   r^   )	r   r~   r   r   r4  _DEFAULT_TRANSACTION_NAMEr   ROUTEr{   )r~   r;   r   rb   r_   r/   s         rH   r   r     s    D/0FJ&&=$$Z00 	?,X66>$D	e	#	#,W];;|("(	tF33333rJ   c                     d }d }|j         dk    r!t          | j                  }t          j        }n&|j         dk    rt          |          }t          j        }||fS )Nr/   r0   )r;   r   rx   r   	COMPONENTr4  r7  )r}   
asgi_scoper   rb   r_   s        rH   ry   ry     s`    DF$
22(77",		&%	/	/,Z88"(<rJ   )F)\r   r   rD   collections.abcr   r   r   r  r   rf   sentry_sdk.constsr   sentry_sdk.integrationsr   r   r	   $sentry_sdk.integrations._wsgi_commonr
   r   r   r   sentry_sdk.integrations.asgir   sentry_sdk.scoper   sentry_sdk.tracingr   r   sentry_sdk.utilsr   r   r   r   r   r   typingr   r   r   r   r   r   r   r   r    sentry_sdk._typesr!   r"   r3   r#   rM   starlette.applicationsr$   starlette.datastructuresr%   starlette.middlewarer&   #starlette.middleware.authenticationr'   starlette.requestsr(   starlette.routingr)   starlette.typesr*   r+   r,   StarletteScoper-   r  starlette.middleware.exceptionsr.   starlette.exceptionspython_multipartr%  r6  r9   r2   r   r   r   r   r   rO   rP   r   rQ   rR   r   r4  r   ry   r[   rJ   rH   <module>rP     s%                                                         
            > = = = = = 4 4 4 4 4 4                       !           =XXXXXXXXXXXXXXXXXXXX<<<<<<<<5::::::000000333333//////      +*****''''''OOOOOOOOOOOOO 5 5 5
,3
4
4459CCCCCCC 9 9 9888888889	,,,,,       III 8 . 7 7 7 7 7; 7 7 7tD D DN 011/ / / 21/JE JE JEZ 011% % 21%>J J J&6 6 6:2 2 2B  qB qB qBh'@ '@ '@Tg g g g g g g gT  $4 4 4(    sN   :C CC C-,C-2C7 6D 7	D D DD DD