U 췀g<@s.ddlZddlZddlmZddlZddlmZddlmZm Z ddl m Z ddl m Z ddlmZddlmZmZmZmZmZmZzdd lmZWnek re d YnXzJddlmmZdd lmZdd lmZdd l m!Z"ddl#m$Z$m%Z%Wnek re dYnXzddl&m'Z(m)Z*Wnek rNdZ(dZ*YnXddl+m,Z,e,rddl+m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2ddl3m4Z4m5Z5ddl#m6Z6ddl7m8Z8m9Z9m:Z:ddl;mddZ?GdddeZ@Gddde@ZAd d!ZBd"d#ZCd$d%ZDd&d'ZEd(d)ZFdS)*N isawaitable)OP) Integration DidNotEnable) ignore_logger)should_send_default_pii)TRANSACTION_SOURCE_COMPONENT)capture_internal_exceptionsensure_integration_enabledevent_from_exceptionloggerpackage_version_get_installed_modules)cached_propertyz;strawberry-graphql integration requires Python 3.8 or newer)Schema)SchemaExtension)should_skip_tracing)async_base_viewsync_base_viewz#strawberry-graphql is not installed)SentryTracingExtensionSentryTracingExtensionSync) TYPE_CHECKING)AnyCallable GeneratorListOptionalUnion) GraphQLErrorGraphQLResolveInfo)GraphQLHTTPResponse)ExecutionContextExecutionResultSubscriptionExecutionResult)EventEventProcessorzstrawberry.executionc@s0eZdZdZdeZdddZeddZdS) StrawberryIntegration strawberryz auto.graphql.NcCs |dkrtd|||_dS)N)NFTz6Invalid value for async_execution: "{}" (must be bool)) ValueErrorformatasync_execution)selfr+r-P/opt/hc_python/lib/python3.8/site-packages/sentry_sdk/integrations/strawberry.py__init__@szStrawberryIntegration.__init__cCsDtd}|dkrtd||dkr.tdtttdS)Nzstrawberry-graphqlz)Unparsable strawberry-graphql version: {})rz-strawberry-graphql 0.209.5 or newer required.)rrr*_patch_schema_init_patch_execute _patch_views)versionr-r-r. setup_onceJsz StrawberryIntegration.setup_once)N)__name__ __module__ __qualname__ identifieroriginr/ staticmethodr6r-r-r-r.r'<s   r'cs&tjtfdd}|t_dS)Ncstt}|dkr&|f||S|dp2g}|jdk rF|j}n&t|}td|r\dnd|rfdnddd|D}| |rt nt ||d<|f||S) N extensionszfAssuming strawberry is running %s. If not, initialize it as StrawberryIntegration(async_execution=%s).asyncsyncFalseTruecSsg|]}|ttfkr|qSr-)StrawberrySentryAsyncExtensionStrawberrySentrySyncExtension).0 extensionr-r-r. vs zK_patch_schema_init.._sentry_patched_schema_init..) sentry_sdk get_clientget_integrationr'getr+_guess_if_using_asyncr infoappendSentryAsyncExtensionSentrySyncExtension)r,argskwargsZ integrationr=Zshould_use_async_extensionZold_schema_initr-r._sentry_patched_schema_init`s(    z7_patch_schema_init.._sentry_patched_schema_init)rr/ functoolswraps)rSr-rRr.r2\s%r2c@s^eZdZddddZeddZddZd d Zd d Zd dZ ddZ ddZ ddZ dS)rNNexecution_contextcCs|r ||_dSNrV)r,rWr-r-r.r/szSentryAsyncExtension.__init__cCs*||jj}|jjr&d|jj|S|S)Nz{}:{}) hash_queryrWqueryoperation_namer*)r,Z query_hashr-r-r._resource_namesz#SentryAsyncExtension._resource_namecCst|dS)Nzutf-8)hashlibmd5encode hexdigest)r,rZr-r-r.rYszSentryAsyncExtension.hash_queryccsJ|jj|_d}tj}|jjdkr(d|j_|jjdrFd}tj}n|jjdrbd}tj }|}|jr||d |j7}t j d|j|ddt }|r|j||tjd |_nt j||tjd |_|jd ||jd |j|jd |jj|jd |jdV|jj}|r<|jjr<|jj|_t|_||_|jdS)NrZZmutationZ subscriptionz {}zgraphql.operation)r[operation_type)categorydataopnamer;zgraphql.operation.typezgraphql.operation.namezgraphql.documentzgraphql.resource_name)rWr[Z_operation_namerZ GRAPHQL_QUERYrZstrip startswithZGRAPHQL_MUTATIONZGRAPHQL_SUBSCRIPTIONr*rGZadd_breadcrumbZget_current_span start_childr'r; graphql_spanZ start_spanset_datar\Zcontaining_transactionrgr sourcerffinish)r,rbrf descriptionspanZ transactionr-r-r. on_operationsV    z!SentryAsyncExtension.on_operationccs,|jjtjdtjd|_dV|jdS)NZ validationre)rkrjrZGRAPHQL_VALIDATEr'r;Zvalidation_spanrnr,r-r-r. on_validatesz SentryAsyncExtension.on_validateccs,|jjtjdtjd|_dV|jdS)NZparsingre)rkrjrZ GRAPHQL_PARSEr'r;Z parsing_spanrnrrr-r-r.on_parseszSentryAsyncExtension.on_parsecCs t||SrX)strawberry_should_skip_tracing)r,_nextrLr-r-r.rsz(SentryAsyncExtension.should_skip_tracingcs(|||f||}t|r$|IdH}|SrXr)r,rvrootrLrPrQresultr-r-r._resolves zSentryAsyncExtension._resolvec s|||r(|j|||f||IdHSd|j|j}|jjtjd|t j dr}| d|j| d|jj | d|| dd tt|j|j|||f||IdHW5QRSQRXdS Nz{}.{}z resolving {}rezgraphql.field_namezgraphql.parent_typezgraphql.field_pathz graphql.path.)rryr* parent_type field_namerkrjrGRAPHQL_RESOLVEr'r;rlrgjoinmapstrpathas_listr,rvrwrLrPrQZ field_pathrpr-r-r.resolves  zSentryAsyncExtension.resolve) r7r8r9r/rr\rYrqrsrtrryrr-r-r-r.rNs  :   rNc@seZdZddZdS)rOc Os|||r|||f||Sd|j|j}|jjtjd|tj dh}| d|j| d|jj | d|| dd t t|j|||f||W5QRSQRXdSrz)rr*r|r}rkrjrr~r'r;rlrgrrrrrrr-r-r.rs  zSentrySyncExtension.resolveN)r7r8r9rr-r-r-r.rOsrOcs>tjtjfdd}ttfdd}|t_|t_dS)NcsP||IdH}ttdkr&|Sd|krLt}t|d}|||SNrW)rGrHrIr'get_isolation_scope_make_request_event_processoradd_event_processorrPrQrxscopeevent_processor)old_execute_asyncr-r._sentry_patched_execute_async.s  z5_patch_execute.._sentry_patched_execute_asynccs4||}d|kr0t}t|d}|||Sr)rGrrrr)old_execute_syncr-r._sentry_patched_execute_sync<s    z4_patch_execute.._sentry_patched_execute_sync)strawberry_schemaexecuteZ execute_syncr r')rrr-)rrr.r3)s  r3csPtjjtjjfdd}fdd}ttdd|tj_|tj_dS)Ncs||||||dSrXr-r,errors response_data)_sentry_patched_handle_errorsold_async_view_handle_errorsr-r.(_sentry_patched_async_view_handle_errorsQs z>_patch_views.._sentry_patched_async_view_handle_errorscs||||||dSrXr-r)rold_sync_view_handle_errorsr-r.'_sentry_patched_sync_view_handle_errorsVs z=_patch_views.._sentry_patched_sync_view_handle_errorsc Ssp|sdSt}t|}||t>|D]2}t|tjtj ddd\}}tj ||dq.W5QRXdS)NF)typeZhandled)Zclient_optionsZ mechanism)hint) rGr_make_response_event_processorrr r rHoptionsr'r:Z capture_event)r,rrrrerroreventrr-r-r.r[s  z3_patch_views.._sentry_patched_handle_errors)rZAsyncBaseHTTPViewZ_handle_errorsrZSyncBaseHTTPViewr r')rrr-)rrrr.r4Ls r4csfdd}|S)Nc sttr`|di}d|d<|dsdji}jrFj|d<jrVj|d<||d<n(z|dd=Wnttfk rYnXW5QRX|S)NrequestgraphqlZ api_targetrdrZ variablesZ operationName) r r setdefaultrJrZrr[KeyError TypeError)rrZ request_datardrVr-r.inner|s       z,_make_request_event_processor..innerr-)rWrr-rVr.rys rcsfdd}|S)Nc s4t$tr&|di}di|d<W5QRX|S)Ncontextsrdresponse)r rr)rrrrr-r.rs  z-_make_response_event_processor..innerr-)rrr-rr.rs rcCs2t|kr dSt|krdStddddhtt@S)NTFZ starletteZstarliteZlitestarZfastapi)rBrCboolsetr)r=r-r-r.rKsrK)GrTr]inspectrrGZsentry_sdk.constsrZsentry_sdk.integrationsrrZsentry_sdk.integrations.loggingrZsentry_sdk.scoperZsentry_sdk.tracingr Zsentry_sdk.utilsr r r r rrr ImportErrorZstrawberry.schema.schemaZschemarr(rZstrawberry.extensionsrZ#strawberry.extensions.tracing.utilsrruZstrawberry.httprrZstrawberry.extensions.tracingrrBrrCtypingrrrrrrrrrr r!Zstrawberry.typesr"r#r$Zsentry_sdk._typesr%r&r'r2rNrOr3r4rrrKr-r-r-r.sX              - #-