U 췀g[@sddlZddlZddlmZddlZddlmZddlmZddl m Z ddl m Z m Z ddlmZmZmZmZmZmZddlmZmZdd lmZmZmZdd lmZz,dd lmZ dd l!m"Z"m#Z#dd l$m%Z%Wne&k redYnXddl'm(Z(e(rPddl'm)Z)ddl'm*Z*ddl'm+Z+ddl'm,Z,ddl'm-Z-ddl.m/Z/m0Z0GdddeZ1ej2ddZ3ee1ddZ4ddZ5GdddeZ6dS) N)iscoroutinefunction)continue_trace)OP)should_send_default_pii)TRANSACTION_SOURCE_COMPONENTTRANSACTION_SOURCE_ROUTE)HAS_REAL_CONTEXTVARSCONTEXTVARS_ERROR_MESSAGEensure_integration_enabledevent_from_exceptioncapture_internal_exceptionstransaction_from_function) Integration DidNotEnable)RequestExtractor_filter_headers_is_json_content_type) ignore_logger) version_info)RequestHandler HTTPError) coroutinezTornado not installed) TYPE_CHECKING)Any)Optional)Dict)Callable) Generator)EventEventProcessorc@s&eZdZdZdeZeddZdS)TornadoIntegrationtornadoz auto.http.csztdkrtdts tdttdtjt}|rHfdd}ntfdd}|t_tj fdd }|t_ dS) N)rzTornado 6.0+ requiredzUThe tornado integration for Sentry requires Python 3.7+ or the aiocontextvars packageztornado.accessc s6t|$|f||IdHW5QRSQRXdSN_handle_request_impl)selfargskwargs old_executeM/opt/hc_python/lib/python3.8/site-packages/sentry_sdk/integrations/tornado.pysentry_execute_request_handlerKs zETornadoIntegration.setup_once..sentry_execute_request_handlerc ?s:t|(|f||EdH}|W5QRSQRXdSr#r$)r&r'r(resultr)r+r,r-Rs cs"t|||||||f||Sr#)_capture_exception)r&tyvaluetbr'r()old_log_exceptionr+r,sentry_log_exception]s z;TornadoIntegration.setup_once..sentry_log_exception) TORNADO_VERSIONrrr rrZ_executerrZ log_exception)Z awaitabler-r4r+)r*r3r, setup_once4s& zTornadoIntegration.setup_onceN)__name__ __module__ __qualname__ identifierorigin staticmethodr6r+r+r+r,r 0s r c cstt}|dkrdVt|}td}|jj}| t |}| |t |t jdttjd}tj|d|jid dVW5QRXW5QRXdS)Nzgeneric Tornado request)opnamesourcer;Ztornado_request)Zcustom_sampling_context) sentry_sdk get_clientZget_integrationr weakrefrefZisolation_scoperequestheadersZclear_breadcrumbs_make_event_processorZadd_event_processorrrZ HTTP_SERVERrr;Zstart_transaction)r&Z integration weak_handlerscoperE processor transactionr+r+r,r%es*    r%cCsDt|trdSt|||ftjdddd\}}tj||ddS)Nr!F)typeZhandled)Zclient_optionsZ mechanism)hint) isinstancerr r@rAoptionsZ capture_event)r0r1r2eventrLr+r+r,r/s  r/csfdd}|S)Nc s}|dkr|S|j}t4t||jj}t|p.tornado_processorr+)rGrar+r`r,rFs $rFc@sDeZdZddZddZddZddZd d Zd d Zd dZ dS)rXcCs|jjdkrdSt|jjS)Nr)rDbodylenr&r+r+r,content_lengths z&TornadoRequestExtractor.content_lengthcCsdd|jjDS)NcSsi|]\}}||jqSr+)r1.0kvr+r+r, sz3TornadoRequestExtractor.cookies..)rDcookiesitemsrdr+r+r,rkszTornadoRequestExtractor.cookiescCs|jjSr#)rDrbrdr+r+r,raw_datasz TornadoRequestExtractor.raw_datacCsdd|jjDS)NcSs i|]\}}|dd|DqS)cSsg|]}|ddqS)latin1replace)decode)rgrir+r+r, sz;TornadoRequestExtractor.form...r+)rgrhvsr+r+r,rjsz0TornadoRequestExtractor.form..)rDZbody_argumentsrlrdr+r+r,forms zTornadoRequestExtractor.formcCst|jjdS)Nz content-type)rrDrEgetrdr+r+r,is_jsonszTornadoRequestExtractor.is_jsoncCsdd|jjDS)NcSsi|]\}}|r||dqS)rr+rfr+r+r,rjsz1TornadoRequestExtractor.files..)rDfilesrlrdr+r+r,rvszTornadoRequestExtractor.filescCst|jp dS)Nr+)rcrb)r&filer+r+r, size_of_filesz$TornadoRequestExtractor.size_of_fileN) r7r8r9rerkrmrsrurvrxr+r+r+r,rXsrX)7rB contextlibinspectrr@Zsentry_sdk.apirZsentry_sdk.constsrZsentry_sdk.scoperZsentry_sdk.tracingrrZsentry_sdk.utilsrr r r r r Zsentry_sdk.integrationsrrZ$sentry_sdk.integrations._wsgi_commonrrrZsentry_sdk.integrations.loggingrr!rr5Z tornado.webrrZ tornado.genr ImportErrortypingrrrrrrZsentry_sdk._typesrrr contextmanagerr%r/rFrXr+r+r+r,s@             5 " )