U 췀g@s`ddlZddlZddlmZddlmZmZmZmZm Z ddl m Z m Z m Z ddlmZddlmZddlmZerddlmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZmZmZddlm Z m!Z!z ddlm"Z"m#Z#m$Z$m%Z&m'Z(Wne)k re dYnXdZ*Gddde Z+GdddeZ,ddZ-ddZ.ddZ/dS)N)SOURCE_FOR_STYLE)capture_internal_exceptionsensure_integration_enabledevent_from_exception parse_versiontransaction_from_function) Integration DidNotEnable$_DEFAULT_FAILED_REQUEST_STATUS_CODES)SentryWsgiMiddleware)RequestExtractor) TYPE_CHECKING)Set)_ScopedResponse)Any)Dict)Callable)Optional) FileUpload FormsDict LocalRequest)EventProcessorEvent)Bottle HTTPResponseRouterequest __version__zBottle not installed)endpointurlc@s:eZdZdZdeZdZd edddZedd Z d S) BottleIntegrationbottlez auto.http.r)failed_request_status_codescCs(|tkrtd|tf||_||_dS)Nz7Invalid value for transaction_style: %s (must be in %s))TRANSACTION_STYLE_VALUES ValueErrortransaction_styler#)selfr&r#r(L/opt/hc_python/lib/python3.8/site-packages/sentry_sdk/integrations/bottle.py__init__7szBottleIntegration.__init__cstt}|dkrtdt|dkr.tdtjttfdd}|t_tjt fdd}|t_t j t fdd }|t _ dS) NzUnparsable Bottle version: {})r zBottle 0.12 or newer required.cs"tfddtjd}|||S)Ncsf||SNr()akw)old_appr'r(r)XzOBottleIntegration.setup_once..sentry_patched_wsgi_app..)Z span_origin)r r origin)r'environZstart_responseZ middleware)r/r'r)sentry_patched_wsgi_appTs  z=BottleIntegration.setup_once..sentry_patched_wsgi_appcsNtt}|dkr ||St}d|_|t|t|||}|S)Nr!) sentry_sdk get_clientget_integrationr Zget_isolation_scope_nameZadd_event_processor_make_request_event_processorbottle_request)r'r3 integrationscoperes) old_handler(r)_patched_handlebs   z5BottleIntegration.setup_once.._patched_handlecs<|f||ttdkr*Sfdd}|S)Nc shz||}Wn2tk r@}zt|dd|W5d}~XYnXt|trd|jjkrdt|dd|S)NF)handledT) Exception_capture_exception isinstancer status_coder#)argskwargsr> exceptionr<Zprepared_callbackr(r)wrapped_callbacks   zUBottleIntegration.setup_once..patched_make_callback..wrapped_callback)r6r7r8r )r'rFrGrJ)old_make_callbackrIr)patched_make_callbackvs z;BottleIntegration.setup_once..patched_make_callback) rBOTTLE_VERSIONr formatr__call__rr Z_handle functoolswrapsrZ_make_callback)versionr5r@rLr()r/r?rKr) setup_onceGs" zBottleIntegration.setup_onceN)r) __name__ __module__ __qualname__ identifierr2r&r r* staticmethodrSr(r(r(r)r 1s  r c@s<eZdZddZddZddZddZd d Zd d Zd S)BottleRequestExtractorcCs|jjSr,)rr3r4r(r(r)envszBottleRequestExtractor.envcCs|jjSr,)rcookiesr4r(r(r)r[szBottleRequestExtractor.cookiescCs |jjSr,)rbodyreadr4r(r(r)raw_dataszBottleRequestExtractor.raw_datacCs|r dS|jjSr,)is_jsonrZformsdecoder4r(r(r)formszBottleRequestExtractor.formcCs|r dS|jjSr,)r_rfilesr4r(r(r)rbszBottleRequestExtractor.filescCs|jSr,)content_length)r'filer(r(r) size_of_filesz#BottleRequestExtractor.size_of_fileN) rTrUrVrZr[r^rarbrer(r(r(r)rYs rYcCsVd}|dkr|jjpd}n |dkr:|jjp8t|jjp8d}||d<dt|i|d<dS)Nr"rrZ transactionsourceZtransaction_info)Zrouterulenamercallbackr)eventr&rrhr(r(r) _set_transaction_name_and_sources rkcsfdd}|S)Nc s2t|jtt|W5QRX|Sr,)rkr&rrYZextract_into_event)rjhintr<rr(r)event_processorsz6_make_request_event_processor..event_processorr()Zapprr<rnr(rmr)r:s r:cCs0t|tjd|dd\}}tj||ddS)Nr!)typerA)Zclient_optionsZ mechanism)rl)rr6r7optionsZ capture_event)rHrArjrlr(r(r)rCs  rC)0rPr6Zsentry_sdk.tracingrZsentry_sdk.utilsrrrrrZsentry_sdk.integrationsrr r Zsentry_sdk.integrations.wsgir Z$sentry_sdk.integrations._wsgi_commonr typingr collections.abcrrrrrrr!rrrZsentry_sdk._typesrrrrrrr;rrM ImportErrorr$r rYrkr:rCr(r(r(r)s4           c