U \h@sddlmZddlZddlmZmZddlmZmZddl m Z ddl m Z ddl mZz ddlZWnek r|dZYnXddlmZmZmZmZdd lmZm Z m!Z!m"Z"Gd d d e Z#d d Z$ddZ%ddZ&GdddeZ'ddZ(ddZ)ddZ*dS))absolute_importN)Hub_should_send_default_pii)capture_internal_exceptionsevent_from_exception) Integration)SentryWsgiMiddleware)RequestExtractor)RequestFlask_request_ctx_stack_app_ctx_stack)appcontext_pushedappcontext_tearing_downgot_request_exceptionrequest_startedc@s*eZdZdZdZdddZeddZdS) FlaskIntegrationflaskNendpointcCs&d}||krtd||f||_dS)N)rurlz7Invalid value for transaction_style: %s (must be in %s)) ValueErrortransaction_style)selfrZTRANSACTION_STYLE_VALUESr /flask.py__init__(szFlaskIntegration.__init__csDttttttttt j fdd}|t _ dS)Ncs4tjtdkr||Stfdd||S)Ncsf||SNr)akw)old_apprrrAzNFlaskIntegration.setup_once..sentry_patched_wsgi_app..)rcurrentget_integrationrr)renvironZstart_responserrrsentry_patched_wsgi_app<s  z.sentry_patched_wsgi_app) rZconnect _push_appctxr _pop_appctxr_request_startedr_capture_exceptionr __call__)r'rr%r setup_once2s     zFlaskIntegration.setup_once)r)__name__ __module__ __qualname__Z identifierrr staticmethodr-rrrrr#s  rc OsJtj}|tdk rF|}||tj_| }d|_ W5QRXdS)Nr) rr"r#rZ push_scope __enter__r topsentry_sdk_scope_managerconfigure_scope_name)argskwargshub scope_managerscoperrrr(Hs r(cOs(ttjdd}|dk r$|ddddS)Nr4)getattrr r3__exit__)r7r8r:rrrr)Usr)c Ks\tj}|t}|dkrdSttjj}t jj }| }| t |||W5QRXdSr)rr"r#rweakrefrefr r3requestr appr5Zadd_event_processor_make_request_event_processor)senderr8r9 integration weak_requestrAr;rrrr*\s  r*c@sLeZdZddZddZddZddZd d Zd d Zd dZ ddZ dS)FlaskRequestExtractorcCs|jjSr)r@r$r&rrrenvnszFlaskRequestExtractor.envcCs|jjSr)r@cookiesr&rrrrHrszFlaskRequestExtractor.cookiescCs|jjSr)r@datar&rrrraw_datavszFlaskRequestExtractor.raw_datacCs|jjSr)r@formr&rrrrKzszFlaskRequestExtractor.formcCs|jjSr)r@filesr&rrrrL~szFlaskRequestExtractor.filescCs|jjSr)r@is_jsonr&rrrrMszFlaskRequestExtractor.is_jsoncCs |jSr)r@Zget_jsonr&rrrjsonszFlaskRequestExtractor.jsoncCs|jSr)Zcontent_length)rfilerrr size_of_filesz"FlaskRequestExtractor.size_of_fileN) r.r/r0rGrHrJrKrLrMrNrPrrrrrFmsrFcsfdd}|S)Nc s}|dkr|Sz2jdkr,|jj|d<njdkrB|jj|d<Wntk rXYnXtt||W5QRXtrtt |W5QRX|S)NrZ transactionr) rZurl_rulerZrule ExceptionrrFZextract_into_eventr_add_user_to_event)eventhintr@rDrErrinners   z,_make_request_event_processor..innerr)rArErDrVrrUrrBsrBcKsFtj}|tdkrdSt||jjdddd\}}|j||ddS)NrF)typeZhandled)Zclient_optionsZ mechanism)rT)rr"r#rrZclientZoptionsZ capture_event)rCZ exceptionr8r9rSrTrrrr+s r+c Cstdkr dStj}|dkrdSt|di}z||d<Wntk rVYnXz|j|d<|d<Wntk rYnXz|j|d<Wntk rYnXW5QRXdS)Nuseridemailusername) flask_loginZ current_userr setdefaultZget_idAttributeErrorrZrQr[)rSrXZ user_inforrrrRs&  rR)+Z __future__rr>Zsentry_sdk.hubrrZsentry_sdk.utilsrrZsentry_sdk.integrationsrZsentry_sdk.integrations.wsgirZ$sentry_sdk.integrations._wsgi_commonr Z_ScopedResponseZAnyZDictZImmutableTypeConversionDictZImmutableMultiDictZ FileStorageZUnionCallabler\ ImportErrorrr r r r Z flask.signalsrrrrrr(r)r*rFrBr+rRrrrrs(      %