0i$"ddlZddlmZmZmZddlmZmZddlm Z ddl m Z ddl m Z ddlmZmZmZmZddlmZer"dd lmZmZmZmZdd lmZmZdd lmZdd lmZmZ ddl Z dd l"m#Z#m$Z$ddl"m%Z&ddl'm(Z(m)Z)m*Z*ddl+m,Z, ddl-Z-dZ.GddeZ/dZ0dZ1dZ2GddeZ3dZ4ee/dZ5dZ6y#e!$rdZ YcwxYw#e!$r edwxYw#e!$r edwxYw)N)_check_minimum_version DidNotEnable Integration)DEFAULT_HTTP_METHODS_TO_CAPTURERequestExtractor)SentryWsgiMiddleware)should_send_default_pii)SOURCE_FOR_STYLE)capture_internal_exceptionsensure_integration_enabledevent_from_exceptionpackage_version) TYPE_CHECKING)AnyCallableDictUnion)EventEventProcessor)_ScopedResponse) FileStorageImmutableMultiDict)FlaskRequest)request)before_render_templategot_request_exceptionrequest_started)MarkupzFlask is not installedzblinker is not installed)endpointurlc:eZdZdZdeZdZdefdZedZ y)FlaskIntegrationflaskz auto.http.r c|tvrtd|dtd||_tt t j ||_y)Nz%Invalid value for transaction_style: z (must be in ))TRANSACTION_STYLE_VALUES ValueErrortransaction_styletuplemapstrupperhttp_methods_to_capture)selfr*r/s L/opt/hc_python/lib/python3.12/site-packages/sentry_sdk/integrations/flask.py__init__zFlaskIntegration.__init__:sI $< <$&>@ "3',SzNFlaskIntegration.setup_once..sentry_patched_wsgi_app..hs!8!8R!8r3) span_originr/) sentry_sdk get_clientget_integrationr#roriginr/r)r0environstart_response integration middlewarer<s` r1sentry_patched_wsgi_appz.sentry_patched_wsgi_app`s$$&667GHPtWn==$//1AABRSK-8,33# 778 Jg~6 6r3)quartr5rr ImportErrorrrr#rconnect_add_sentry_tracer_request_startedr_capture_exception__call__)r5versionrGr<s @r1 setup_oncezFlaskIntegration.setup_onceHs  #~#U"'*/9&&'89 01%%&89.. 7$1=   sB%% B10B1N) __name__ __module__ __qualname__ identifierrBr*rr2 staticmethodrPr9r3r1r#r#4s;J* &F% ? V)1)1r3r#c |d|vrytj}t|j}||d<||d<y)N sentry_tracesentry_trace_meta)r?get_current_scopertrace_propagation_meta)sendertemplatecontextextrascope trace_metas r1rKrKusC   ( ( *E4467J(GN#-G  r3c |jj|jjd}|j||t|y#t $rYywxYw)N)r!r )source)url_ruleruler set_transaction_namer Exception)r_r*rname_for_styles r1 _set_transaction_name_and_sourcerhsg  ##((((11  "" , -#$56 #     sA A AAc 6tjjt}|yt j }t tj|j|tj}t|||}|j|yr8) r?r@rAr# flask_request_get_current_objectrhrYr*get_isolation_scope_make_request_event_processoradd_event_processor)appkwargsrErr_ evt_processors r1rLrLs'')99:JKK//1G%$$& (E(Ew  * * ,E1#w LM m,r3c<eZdZdZdZdZdZdZdZdZ dZ y ) FlaskRequestExtractorc.|jjSr8)rrCr0s r1envzFlaskRequestExtractor.env||###r3c |jjjDcic]+\}}|t|trt |dk(r|dn|-c}}Scc}}w)Nr)rcookiesitems isinstancelistlen)r0kvs r1rzzFlaskRequestExtractor.cookiess^ ,,224 41 z!T*s1v{qt A4   s0Ac6|jjSr8)rget_datarus r1raw_datazFlaskRequestExtractor.raw_datas||$$&&r3c.|jjSr8)rformrus r1rzFlaskRequestExtractor.forms||   r3c.|jjSr8)rfilesrus r1rzFlaskRequestExtractor.filess||!!!r3c.|jjSr8)ris_jsonrus r1rzFlaskRequestExtractor.is_jsonrwr3c:|jjdS)NT)silent)rget_jsonrus r1jsonzFlaskRequestExtractor.jsons||$$D$11r3c|jSr8)content_length)r0files r1 size_of_filez"FlaskRequestExtractor.size_of_files"""r3N) rQrRrSrvrzrrrrrrr9r3r1rsrss*$ '!"$2#r3rscfd}|S)Nc|St5tj|dddtr t5t |ddd|S|S#1swY5xYw#1swY|SxYwr8)r rsextract_into_eventr _add_user_to_event)eventhintrs r1innerz,_make_request_event_processor..innersi ?L ( * !' * = =e D+ # $,."5)/ u + */ sA A+A(+A5r9)rorrErs ` r1rmrms$ Lr3c t|tjjddd\}}tj||y)Nr$F)typehandled)client_options mechanism)r)r r?r@options capture_event)r[ exceptionrprrs r1rMrMsA'!,,.66"u5KE4 U.r3ctytj}|yt5|jdi} |jd|j  |jd|j  |jd|jdddy#t $rYNwxYw#t$rY@wxYw#t$rY2wxYw#1swYyxYw)Nuseridemailusername) flask_login current_userr setdefaultget_idAttributeErrorrrfr)rr user_infos r1rrs  # #D | $ &$$VR0    t{{} 5    $** 5   T]] ;; ' &            = ' &sdC  BB+7B: B(%C 'B((C + B74C 6B77C : CC CC  C)7r?sentry_sdk.integrationsrrr$sentry_sdk.integrations._wsgi_commonrrsentry_sdk.integrations.wsgirsentry_sdk.scoper sentry_sdk.tracingr sentry_sdk.utilsr r r rtypingrrrrrsentry_sdk._typesrrrwerkzeug.datastructuresrrrrIr$rrrrj flask.signalsrrr markupsaferblinkerr(r#rKrhrLrsrmrMrr9r3r1rsUU>4/!117<G 1$. "3/>1{>1B.  -&"#,"#J0,-/./(]K1 / 001 3 1 223s* B>%C C>CC CC*