
    \jG!                     *   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 	 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, 	 d dl-Z-dZ. G d de      Z/	 	 	 	 	 	 	 	 	 	 d$dZ0ddde1ddddfdZ2d%dZ3 G d d e      Z4	 	 	 	 	 	 	 	 d&d!Z5 ee/      	 	 	 	 	 	 	 	 d'd"       Z6d(d#Z7y# e!$ r dZ Y w xY w# e!$ r	  ed      w xY w# e!$ r	  ed      w xY w))    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                   J    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
y	)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                  |            | _        y )Nz%Invalid value for transaction_style: z (must be in ))TRANSACTION_STYLE_VALUES
ValueErrorr&   tuplemapstrupperr'   )selfr&   r'   s      G/root/env/lib/python3.12/site-packages/sentry_sdk/integrations/flask.py__init__zFlaskIntegration.__init__:   sI    
 $<<$&>@  "3',S<S-T'U$    c                  z   	 ddl m}  t        | k(  rt        d      	 t        d      }t        t        |       t        j                  t               t        j                  t               t        j                  t               t        j                  	 	 	 	 	 	 	 	 dfd}|t        _        y # t        $ r Y w xY w)Nr   )Quartz?This is not a Flask app but rather Quart pretending to be Flaskr$   c                 ,    t        j                         j                  t              
  ||      S t        j                         j                  t              }t	         fdt        j
                  |r|j                  nt              } |||      S )Nc                       g| i |S N )akwold_appr1   s     r2   <lambda>zNFlaskIntegration.setup_once.<locals>.sentry_patched_wsgi_app.<locals>.<lambda>g   s    !8!8R!8 r4   )span_originr'   )
sentry_sdk
get_clientget_integrationr#   r   originr'   r   )r1   environstart_responseintegration
middlewarer=   s   `    r2   sentry_patched_wsgi_appz<FlaskIntegration.setup_once.<locals>.sentry_patched_wsgi_app^   s     $$&667GHPtWn==$//1AABRSK-8,33 #  778J g~66r4   )r1   r   rD   Dict[str, str]rE   zCallable[..., Any]r(   r   )quartr6   r   r   ImportErrorr   r   r#   r   connect_add_sentry_tracer   _request_startedr   _capture_exception__call__)r6   versionrH   r=   s      @r2   
setup_oncezFlaskIntegration.setup_onceG   s    
	#~ #U   "'*/9&&'89 01%%&89..	7	7"2	7DX	7	7& 1?  		s   B. .	B:9B:)r(   N)__name__
__module____qualname__
identifierrC   r&   r   r/   r3   staticmethodrR   r:   r4   r2   r#   r#   4   sZ    J*&F ",5TVV "3V 
	V )1 )1r4   r#   r(   c                 |    d|v ry t        j                         }t        |j                               }||d<   ||d<   y )Nsentry_tracesentry_trace_meta)r@   get_current_scoper   trace_propagation_meta)sendertemplatecontextextrascope
trace_metas         r2   rM   rM   t   sE      ((*E4467J(GN#-G r4   ra   zsentry_sdk.Scoper&   r   r   c                     	 |j                   j                  |j                   j                  d}| j                  ||   t        |          y # t
        $ r Y y w xY w)N)r!   r    )source)url_ruleruler    set_transaction_namer
   	Exception)ra   r&   r   name_for_styles       r2    _set_transaction_name_and_sourcerj      sg    
##((((11
 	"",-#$56 	# 	
  s   A
A 	AAc                 6   t        j                         j                  t              }|y t	        j
                         }t        t        j                         |j                  |       t        j                         }t        | ||      }|j                  |       y r9   )r@   rA   rB   r#   flask_request_get_current_objectrj   r[   r&   get_isolation_scope_make_request_event_processoradd_event_processor)appkwargsrF   r   ra   evt_processors         r2   rN   rN      s    '')99:JKK//1G %$$&(E(Ew **,E1#w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y)FlaskRequestExtractorr(   c                 .    | j                   j                  S r9   )r   rD   r1   s    r2   envzFlaskRequestExtractor.env       ||###r4   c           	          | j                   j                  j                         D ci c]+  \  }}|t        |t              rt        |      dk(  r|d   n|- c}}S c c}}w )N   r   )r   cookiesitems
isinstancelistlen)r1   kvs      r2   r|   zFlaskRequestExtractor.cookies   sY     ,,224
1 z!T*s1v{qtA
 	
 
s   0Ac                 6    | j                   j                         S r9   )r   get_datarw   s    r2   raw_datazFlaskRequestExtractor.raw_data   s    ||$$&&r4   c                 .    | j                   j                  S r9   )r   formrw   s    r2   r   zFlaskRequestExtractor.form   s    ||   r4   c                 .    | j                   j                  S r9   )r   filesrw   s    r2   r   zFlaskRequestExtractor.files   s    ||!!!r4   c                 .    | j                   j                  S r9   )r   is_jsonrw   s    r2   r   zFlaskRequestExtractor.is_json   ry   r4   c                 :    | j                   j                  d      S )NT)silent)r   get_jsonrw   s    r2   jsonzFlaskRequestExtractor.json   s    ||$$D$11r4   filer   c                     |j                   S r9   )content_length)r1   r   s     r2   size_of_filez"FlaskRequestExtractor.size_of_file   s    """r4   N)r(   rI   )r(   zDict[Any, Any])r(   zImmutableMultiDict[str, Any])r(   r   )rS   rT   rU   rx   r|   bytesr   r   r   boolr   r   intr   r:   r4   r2   ru   ru      sF    $
'% '!"$ $2# #3 #r4   ru   c                     dfd}|S )Nc                     | S t               5  t              j                  |        d d d        t               r t               5  t	        |        d d d        | S | S # 1 sw Y   5xY w# 1 sw Y   | S xY wr9   )r   ru   extract_into_eventr	   _add_user_to_event)eventhintr   s     r2   innerz,_make_request_event_processor.<locals>.inner   sy     ?L(* 	E!'*==eD	E #$,. *"5)* u	E 	E* s   AA+A(+A5)r   r   r   zdict[str, Any]r(   r   r:   )rq   r   rF   r   s    `  r2   ro   ro      s      Lr4   c                     t        |t        j                         j                  ddd      \  }}t        j                  ||       y )Nr$   F)typehandled)client_options	mechanism)r   )r   r@   rA   optionscapture_event)r]   	exceptionrr   r   r   s        r2   rO   rO      sA     '!,,.66"u5KE4 U.r4   c                    t         y t         j                  }|y t               5  | j                  di       }	 |j                  d|j	                                	 |j                  d|j                         	 |j                  d|j                         d d d        y # t
        $ r Y Nw xY w# t        $ r Y @w xY w# t        $ r Y 2w xY w# 1 sw Y   y xY w)Nuseridemailusername)	flask_logincurrent_userr   
setdefaultget_idAttributeErrorr   rh   r   )r   r   	user_infos      r2   r   r      s    ##D|	$	&  $$VR0		  t{{}5 	  $**5	  T]];;   	
 	   		
  		= sd   C	 BB+7B:	B(%C	'B((C	+	B74C	6B77C	:	CC	CC		C)
r]   r   r^   r   r_   zDict[str, Any]r`   r   r(   N)rq   r   rr   r   r(   N)rq   r   r   zCallable[[], Request]rF   r#   r(   r   )r]   r   r   z Union[ValueError, BaseException]rr   r   r(   N)r   r   r(   N)8r@   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   rK   r$   r   r   r   rl   flask.signalsr   r   r   
markupsafer   blinkerr+   r#   rM   r/   rj   rN   ru   ro   rO   r   r:   r4   r2   <module>r      s    U U > 4 /  !117<G
1$. 
 "3 / =1{ =1@	.	.$	./?	.JO	.		.25@I	 -$#, #:	2AS, ,-	/	/ B	/NS	/		/ .	/'K  K  1
/
001
  3
1
223s*    C& %C3 D &C0/C03DD