U 췀g @sddlZddlZddlmZddlZddlmZmZddlm Z ddl m Z ddl m Z ddlmZddlmZmZmZdd lmZerdd lmZdd lmZdd lmZmZz ddlZWnek rdZYnXz@dd lmZmZm Z m!Z!m"Z"m#Z#ddl$m%Z%m&Z&m'Z'm(Z(m)Z)Wnek r4edYn6Xzddl*m+Z+Wn"ek rhddl,m+Z+YnXdZ-GdddeZ.ddZ/ddZ0ddZ1ddZ2ddZ3ddZ4d d!Z5dS)"N)wraps) DidNotEnable Integration)_filter_headers)SentryAsgiMiddleware)should_send_default_pii)SOURCE_FOR_STYLE)capture_internal_exceptionsensure_integration_enabledevent_from_exception) TYPE_CHECKING)Any)Union)EventEventProcessor)has_request_contexthas_websocket_contextRequestQuartrequest websocket)got_background_exceptiongot_request_exceptiongot_websocket_exceptionrequest_startedwebsocket_startedzQuart is not installed)Scaffold)endpointurlc@s4eZdZdZdeZdZd ddZeddZd S) QuartIntegrationquartz auto.http.rcCs"|tkrtd|tf||_dS)Nz7Invalid value for transaction_style: %s (must be in %s))TRANSACTION_STYLE_VALUES ValueErrortransaction_style)selfr$r&K/opt/hc_python/lib/python3.8/site-packages/sentry_sdk/integrations/quart.py__init__?szQuartIntegration.__init__cCsBtttttttttttt dSN) rconnect_request_websocket_startedrr_capture_exceptionrrpatch_asgi_apppatch_scaffold_router&r&r&r' setup_onceHs     zQuartIntegration.setup_onceN)r) __name__ __module__ __qualname__ identifieroriginr$r( staticmethodr/r&r&r&r'r9s   rcstjfdd}|t_dS)NcsXttdkr&|||IdHStfddtjd}|j|_||||IdHS)Ncsf||Sr)r&)akw)old_appr%r&r'`zApatch_asgi_app..sentry_patched_asgi_app..)Z span_origin) sentry_sdk get_clientget_integrationrrr4Z _run_asgi3__call__)r%scopeZreceivesendZ middlewarer8)r%r'sentry_patched_asgi_appZs z/patch_asgi_app..sentry_patched_asgi_app)rr>)rBr&rAr'r-Vs r-cstjfdd}|t_dS)Ncs||fdd}|S)NcsBtr:ts:tttfdd}|SS)NcsBt}|jdk r|jt}|jdk r8|j||Sr))r;get_current_scopeZ transactionZupdate_active_threadget_isolation_scopeZprofileZupdate_active_thread_id)argskwargsZ current_scopeZ sentry_scopeold_funcr&r' _sentry_funcxs    zTpatch_scaffold_route.._sentry_route..decorator.._sentry_func)inspect isfunctionasyncioiscoroutinefunctionrr r)rHrIZ old_decoratorrGr' decoratorqs z>patch_scaffold_route.._sentry_route..decoratorr&)rErFrOZ old_routerNr' _sentry_routems  z+patch_scaffold_route.._sentry_route)rZroute)rQr&rPr'r.is r.cCsFz,|jj|jjd}|j||t|dWntk r@YnXdS)N)rr)source)Zurl_rulerulerZset_transaction_namer Exception)r?r$rZname_for_styler&r&r' _set_transaction_name_and_sources rUcsjtt}|dkrdStr(t}tr6t}t t |j |t }t |||}||dSr))r;r<r=rrrZ_get_current_objectrrrUrCr$rD_make_request_event_processorZadd_event_processor)apprF integrationZrequest_websocketr?Z evt_processorr&r&r'r+s r+csfdd}|S)Nc s~dkr |Stb|di}j|d<j|d<j|d<ttj|d<trpdj di|d<t |W5QRX|S) Nrr query_stringmethodheadersZ REMOTE_ADDRrenv) r setdefaultrrYrZrdictr[rZ access_route_add_user_to_event)eventhintZ request_inforr&r'inners    z,_make_request_event_processor..innerr&)rWrrXrcr&rbr'rVs rVcsJtt}|dkrdSt|tjdddd\}}tj||ddS)Nr F)typeZhandled)Zclient_optionsZ mechanism)ra)r;r<r=rr optionsZ capture_event)Zsender exceptionrFrXr`rar&r&r'r,s r,c CsLtdkr dStj}|dkrdSt|di}tjj|d<W5QRXdS)Nuserid) quart_authZ current_userr r]Z_auth_id)r`rgZ user_infor&r&r'r_s r_)6rLrJ functoolsrr;Zsentry_sdk.integrationsrrZ$sentry_sdk.integrations._wsgi_commonrZsentry_sdk.integrations.asgirZsentry_sdk.scoperZsentry_sdk.tracingrZsentry_sdk.utilsr r r typingr r rZsentry_sdk._typesrrri ImportErrorr rrrrrrZ quart.signalsrrrrrZquart.scaffoldrZflask.sansio.scaffoldr"rr-r.rUr+rVr,r_r&r&r&r'sH            &