
    gh$"                        S SK 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  S SKJr  S SKJrJrJrJr  S SKJr  \(       a"  S S	KJr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 r  S SK"J#r#J$r$  S SK"J%r&  S SK'J(r(J)r)J*r*  S SK+J,r,   S SK-r-Sr. " S S\5      r/S r0S r1S r2 " S S\5      r3S r4\" \/5      S 5       r5S r6g! \! a    Sr  Ndf = f! \! a	    \" S5      ef = f! \! a	    \" S5      ef = f)    N)_check_minimum_versionDidNotEnableIntegration)DEFAULT_HTTP_METHODS_TO_CAPTURERequestExtractor)SentryWsgiMiddleware)should_send_default_pii)SOURCE_FOR_STYLE)capture_internal_exceptionsensure_integration_enabledevent_from_exceptionpackage_version)TYPE_CHECKING)AnyCallableDictUnion)EventEventProcessor)_ScopedResponse)FileStorageImmutableMultiDict)FlaskRequest)request)before_render_templategot_request_exceptionrequest_started)MarkupzFlask is not installedzblinker is not installed)endpointurlc                   D    \ rS rSrSrS\ 3rSrS\4S jr\	S 5       r
Srg	)
FlaskIntegration4   flaskz
auto.http. r    c                     U[         ;  a  [        SU< S[         < S35      eXl        [        [	        [
        R                  U5      5      U l        g )Nz%Invalid value for transaction_style: z (must be in ))TRANSACTION_STYLE_VALUES
ValueErrortransaction_styletuplemapstrupperhttp_methods_to_capture)selfr+   r0   s      `/home/kali/devsecops-assessor/venv/lib/python3.13/site-packages/sentry_sdk/integrations/flask.py__init__FlaskIntegration.__init__:   sG     $<<$&>@  "3',S<S-T'U$    c                  t  ^  SSK Jn   [        U :X  a  [        S5      e [        S5      n[        [        U5        [        R                  " [        5        [        R                  " [        5        [        R                  " [        5        [        R                  mU4S jnU[        l        g ! [         a     Nf = f)Nr   )Quartz?This is not a Flask app but rather Quart pretending to be Flaskr%   c                 4  >^  [         R                  " 5       R                  [        5      c	  T" T X5      $ [         R                  " 5       R                  [        5      n[	        UU 4S j[        R
                  U(       a  UR                  O[        S9nU" X5      $ )Nc                     > T" T/U Q70 UD6$ N )akwold_appr1   s     r2   <lambda>NFlaskIntegration.setup_once.<locals>.sentry_patched_wsgi_app.<locals>.<lambda>h   s    !8!8R!8r5   )span_originr0   )
sentry_sdk
get_clientget_integrationr#   r   originr0   r   )r1   environstart_responseintegration
middlewarer>   s   `    r2   sentry_patched_wsgi_app<FlaskIntegration.setup_once.<locals>.sentry_patched_wsgi_app`   s{    $$&667GHPtW==$//1AABRSK-8,33 #  778J g66r5   )quartr7   r   r   ImportErrorr   r   r#   r   connect_add_sentry_tracer   _request_startedr   _capture_exception__call__)r7   versionrJ   r>   s      @r2   
setup_onceFlaskIntegration.setup_onceH   s    
	#~ #U   "'*/9&&'89 01%%&89..	7$ 1=  		s   B* *
B76B7)r0   r+   N)__name__
__module____qualname____firstlineno__
identifierrE   r+   r   r3   staticmethodrT   __static_attributes__r;   r5   r2   r#   r#   4   s;    J*&F % ?V )1 )1r5   r#   c                 ~    SU;   a  g [         R                  " 5       n[        UR                  5       5      nXRS'   XRS'   g )Nsentry_tracesentry_trace_meta)rB   get_current_scoper   trace_propagation_meta)sendertemplatecontextextrascope
trace_metas         r2   rO   rO   u   s?     ((*E4467J(N#- r5   c                      UR                   R                  UR                   R                  S.nU R                  X1   [        U   S9  g ! [
         a     g f = f)N)r!   r    )source)url_ruleruler    set_transaction_namer
   	Exception)rf   r+   r   name_for_styles       r2    _set_transaction_name_and_sourcero      sd    
##((((11
 	""-#$56 	# 	
  s   AA	 	
AAc                 >   [         R                  " 5       R                  [        5      nUc  g [        R
                  " 5       n[        [         R                  " 5       UR                  U5        [         R                  " 5       n[        XU5      nUR                  U5        g r:   )rB   rC   rD   r#   flask_request_get_current_objectro   r`   r+   get_isolation_scope_make_request_event_processoradd_event_processor)appkwargsrH   r   rf   evt_processors         r2   rP   rP      s}    '')99:JKK//1G %$$&(E(Ew **,E1#LM	m,r5   c                   D    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
rg)FlaskRequestExtractor   c                 .    U R                   R                  $ r:   )r   rF   r1   s    r2   envFlaskRequestExtractor.env       ||###r5   c           	          U R                   R                  R                  5        VVs0 s H1  u  pU[        U[        5      (       a  [        U5      S:X  a  US   OU_M3     snn$ s  snnf )N   r   )r   cookiesitems
isinstancelistlen)r1   kvs      r2   r   FlaskRequestExtractor.cookies   s_     ,,224
4 z!T**s1v{qtA4
 	
 
s   8A$c                 6    U R                   R                  5       $ r:   )r   get_datar}   s    r2   raw_dataFlaskRequestExtractor.raw_data   s    ||$$&&r5   c                 .    U R                   R                  $ r:   )r   formr}   s    r2   r   FlaskRequestExtractor.form   s    ||   r5   c                 .    U R                   R                  $ r:   )r   filesr}   s    r2   r   FlaskRequestExtractor.files   s    ||!!!r5   c                 .    U R                   R                  $ r:   )r   is_jsonr}   s    r2   r   FlaskRequestExtractor.is_json   r   r5   c                 4    U R                   R                  SS9$ )NT)silent)r   get_jsonr}   s    r2   jsonFlaskRequestExtractor.json   s    ||$$D$11r5   c                     UR                   $ r:   )content_length)r1   files     r2   size_of_file"FlaskRequestExtractor.size_of_file   s    """r5   r;   N)rV   rW   rX   rY   r~   r   r   r   r   r   r   r   r\   r;   r5   r2   rz   rz      s*    $
'!"$2#r5   rz   c                    ^ U4S jnU$ )Nc                   > Tc  U $ [        5          [        T5      R                  U 5        S S S 5        [        5       (       a   [        5          [	        U 5        S S S 5        U $ U $ ! , (       d  f       N?= f! , (       d  f       U $ = fr:   )r   rz   extract_into_eventr	   _add_user_to_event)eventhintr   s     r2   inner,_make_request_event_processor.<locals>.inner   so     ?L(*!'*==eD + #$$,."5) / u +* /. s   A%A6%
A36
Br;   )rv   r   rH   r   s    `  r2   rt   rt      s    $ Lr5   c                     [        U[        R                  " 5       R                  SSS.S9u  p4[        R                  " X4S9  g )Nr%   F)typehandled)client_options	mechanism)r   )r   rB   rC   optionscapture_event)rb   	exceptionrw   r   r   s        r2   rQ   rQ      s=     '!,,.66"u5KE U.r5   c                    [         c  g [         R                  nUc  g [        5          U R                  S0 5      n UR                  SUR	                  5       5         UR                  SUR                  5         UR                  SUR                  5        S S S 5        g ! [
         a     NOf = f! [         a     NBf = f! [         a     N5f = f! , (       d  f       g = f)Nuseridemailusername)	flask_logincurrent_userr   
setdefaultget_idAttributeErrorr   rm   r   )r   r   	user_infos      r2   r   r      s    ##D|	$	& $$VR0		  t{{}5 	  $**5	  T]];; 
'	&  	
 	   		
  		= 
'	&sd   C BB.9B>
B+(C*B++C.
B;8C:B;;C>
CC
CC
C)7rB   sentry_sdk.integrationsr   r   r   $sentry_sdk.integrations._wsgi_commonr   r   sentry_sdk.integrations.wsgir   sentry_sdk.scoper	   sentry_sdk.tracingr
   sentry_sdk.utilsr   r   r   r   typingr   r   r   r   r   sentry_sdk._typesr   r   r   werkzeug.datastructuresr   r   r   rM   r%   r   r   r   rq   flask.signalsr   r   r   
markupsafer   blinkerr)   r#   rO   ro   rP   rz   rt   rQ   r   r;   r5   r2   <module>r      s    U U > 4 /  !117<G
1$. 
 "3 / >1{ >1B.-&"#, "#J0 ,-/ ./(]  K  1
/
001
  3
1
223s*   %C *C 	C# CCC #C2