
    tniG!                     V   d dl 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 d dlmZ d dl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 d d
lmZmZ d dlmZ d dlmZmZ 	 d dl Z n# e!$ r dZ Y nw xY w	 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, n# e!$ r  ed          w xY w	 d dl-Z-n# e!$ r  ed          w xY wdZ. G d de          Z/	 	 	 	 	 	 	 	 	 	 d4dZ0dd d!e1d"d#ddfd$Z2d5d'Z3 G d( d)e          Z4	 	 	 	 	 	 	 	 d6d-Z5 ee/          	 	 	 	 	 	 	 	 d7d0            Z6d8d3Z7dS )9    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                   R    e Zd ZdZde ZdZdefdedddd	fd
Ze	dd            Z
d	S )FlaskIntegrationflaskz
auto.http. r    transaction_stylehttp_methods_to_captureztuple[str, ...]returnNc                     |t           vrt          d|dt           d          || _        t          t	          t
          j        |                    | _        d S )Nz%Invalid value for transaction_style: z (must be in ))TRANSACTION_STYLE_VALUES
ValueErrorr&   tuplemapstrupperr'   )selfr&   r'   s      Z/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/sentry_sdk/integrations/flask.py__init__zFlaskIntegration.__init__:   si    
 $<<<*$$$&>&>&>@   "3',S<S-T-T'U'U$$$    c                     	 ddl m}  t          | k    rt          d          n# t          $ r Y nw xY wt          d          }t          t          |           t          j	        t                     t          j	        t                     t          j	        t                     t          j        	 	 	 	 	 	 	 	 dfd}|t          _        d S )Nr   )Quartz?This is not a Flask app but rather Quart pretending to be Flaskr$   r1   r   environDict[str, str]start_responseCallable[..., Any]r(   r   c                 @    t          j                                        t                      ||          S t          j                                        t                    }t	           fdt          j        |r|j        nt                    } |||          S )Nc                       g| R i |S N )akwold_appr1   s     r2   <lambda>zNFlaskIntegration.setup_once.<locals>.sentry_patched_wsgi_app.<locals>.<lambda>g   s!    !8!8!8!8R!8!8 r4   )span_originr'   )
sentry_sdk
get_clientget_integrationr#   r   originr'   r   )r1   r7   r9   integration
middlewarerA   s   `    r2   sentry_patched_wsgi_appz<FlaskIntegration.setup_once.<locals>.sentry_patched_wsgi_app^   s     $&&667GHHPwtWn===$/11AABRSSK-88888,3 #9K778  J :g~666r4   )r1   r   r7   r8   r9   r:   r(   r   )quartr6   r   r   ImportErrorr   r   r#   r   connect_add_sentry_tracer   _request_startedr   _capture_exception__call__)r6   versionrJ   rA   s      @r2   
setup_oncezFlaskIntegration.setup_onceG   s	   
	######~~ #U     	 	 	D	 "'**/999&'8999 0111%&8999.	7	7"2	7DX	7	7 	7 	7 	7 	7 	7& 1s    $ 
11)r(   N)__name__
__module____qualname__
identifierrG   r&   r   r/   r3   staticmethodrS   r>   r4   r2   r#   r#   4   s        J&*&&F ",5TV VV "3V 
	V V V V )1 )1 )1 \)1 )1 )1r4   r#   senderr   templater   contextDict[str, Any]extrar(   c                     d|v rd S t          j                    }t          |                                          }||d<   ||d<   d S )Nsentry_tracesentry_trace_meta)rD   get_current_scoper   trace_propagation_meta)rY   rZ   r[   r]   scope
trace_metas         r2   rN   rN   t   sV       (**E446677J(GN#-G   r4   rc   zsentry_sdk.Scoper&   r   r   c                     	 |j         j        |j         j        d}|                     ||         t          |                    d S # t
          $ r Y d S w xY w)N)r!   r    )source)url_ruleruler    set_transaction_namer
   	Exception)rc   r&   r   name_for_styles       r2    _set_transaction_name_and_sourcerl      s    
#((1
 
 	"",-#$56 	# 	
 	
 	
 	
 	
    s   AA 
AAappkwargsc                 J   t          j                                        t                    }|d S t	          j                    }t          t          j                    |j        |           t          j	                    }t          | ||          }|                    |           d S r=   )rD   rE   rF   r#   flask_request_get_current_objectrl   ra   r&   get_isolation_scope_make_request_event_processoradd_event_processor)rm   rn   rH   r   rc   evt_processors         r2   rO   rO      s    '))99:JKKK/11G %$&&(Ew   *,,E1#wLLM	m,,,,,r4   c                   ^    e Zd ZddZddZdefdZddZdd	Zde	fd
Z
ddZdddefdZdS )FlaskRequestExtractorr(   r8   c                     | j         j        S r=   )r   r7   r1   s    r2   envzFlaskRequestExtractor.env       |##r4   Dict[Any, Any]c                 R    d | j         j                                        D             S )Nc                 z    i | ]8\  }}|t          |t                    rt          |          d k    r|d         n|9S )   r   )
isinstancelistlen).0kvs      r2   
<dictcomp>z1FlaskRequestExtractor.cookies.<locals>.<dictcomp>   sS     
 
 
1 z!T**As1vv{{qtt
 
 
r4   )r   cookiesitemsry   s    r2   r   zFlaskRequestExtractor.cookies   s4    
 
,2244
 
 
 	
r4   c                 4    | j                                         S r=   )r   get_datary   s    r2   raw_datazFlaskRequestExtractor.raw_data   s    |$$&&&r4   ImmutableMultiDict[str, Any]c                     | j         j        S r=   )r   formry   s    r2   r   zFlaskRequestExtractor.form   s    |  r4   c                     | j         j        S r=   )r   filesry   s    r2   r   zFlaskRequestExtractor.files   s    |!!r4   c                     | j         j        S r=   )r   is_jsonry   s    r2   r   zFlaskRequestExtractor.is_json   r{   r4   r   c                 8    | j                             d          S )NT)silent)r   get_jsonry   s    r2   jsonzFlaskRequestExtractor.json   s    |$$D$111r4   filer   c                     |j         S r=   )content_length)r1   r   s     r2   size_of_filez"FlaskRequestExtractor.size_of_file   s    ""r4   N)r(   r8   )r(   r|   )r(   r   )r(   r   )rT   rU   rV   rz   r   bytesr   r   r   boolr   r   intr   r>   r4   r2   rw   rw      s        $ $ $ $
 
 
 
'% ' ' ' '! ! ! !" " " "$ $ $ $ $2 2 2 2# #3 # # # # # #r4   rw   Callable[[], Request]rH   r   c                     dfd}|S )Neventr   hintdict[str, Any]r(   c                 &   | S t                      5  t                                        |            d d d            n# 1 swxY w Y   t                      r5t                      5  t	          |            d d d            n# 1 swxY w Y   | S r=   )r   rw   extract_into_eventr	   _add_user_to_event)r   r   r   s     r2   innerz,_make_request_event_processor.<locals>.inner   s#    ?L(** 	E 	E!'**==eDDD	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E #$$ 	*,.. * *"5)))* * * * * * * * * * * * * * * s#   #AA
A*BB
B
)r   r   r   r   r(   r   r>   )rm   r   rH   r   s    `  r2   rs   rs      s(           Lr4   	exception Union[ValueError, BaseException]c                     t          |t          j                    j        ddd          \  }}t          j        ||           d S )Nr$   F)typehandled)client_options	mechanism)r   )r   rD   rE   optionscapture_event)rY   r   rn   r   r   s        r2   rP   rP      sW     '!,..6"u55  KE4 U......r4   r   r   c                    t           d S t           j        }|d S t                      5  |                     di           }	 |                    d|                                           n# t
          $ r Y nw xY w	 |                    d|j                   n# t          $ r Y nw xY w	 |                    d|j                   n# t          $ r Y nw xY wd d d            d S # 1 swxY w Y   d S )Nuseridemailusername)	flask_logincurrent_userr   
setdefaultget_idAttributeErrorr   rj   r   )r   r   	user_infos      r2   r   r      sn   #D|	$	&	&   $$VR00		  t{{}}5555 	 	 	
 D		  $*5555 	 	 	D		  T];;;; 	 	 	D	=                 s}   C  (A)(C )
A63C 5A66C :BC 
B# C "B##C 'CC 
CC CC  C$'C$)
rY   r   rZ   r   r[   r\   r]   r   r(   N)rm   r   rn   r   r(   N)rm   r   r   r   rH   r#   r(   r   )rY   r   r   r   rn   r   r(   N)r   r   r(   N)8rD   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   rL   r$   r   r   r   rp   flask.signalsr   r   r   
markupsafer   blinkerr+   r#   rN   r/   rl   rO   rw   rs   rP   r   r>   r4   r2   <module>r      s       U U U U U U U U U U        > = = = = = 4 4 4 4 4 4 / / / / / /            !           H11111111111177777777<<<<<<GGGGGGGG   KKK
1$$$$$$$$......         
 "!!!!!! 1 1 1
,/
0
0013NNNN 3 3 3
,1
2
223 / =1 =1 =1 =1 =1{ =1 =1 =1@	.	.$	./?	.JO	.		. 	. 	. 	.25@I	    - - - -$# # # # #, # # #:	2AS   , ,--	/	/ B	/NS	/		/ 	/ 	/ .-	/' ' ' ' ' 's*    A% %A/.A/3B B#'B, ,B=