diff --git a/sentry_sdk/integrations/fastapi.py b/sentry_sdk/integrations/fastapi.py index 023e4e4efc..27624ed817 100644 --- a/sentry_sdk/integrations/fastapi.py +++ b/sentry_sdk/integrations/fastapi.py @@ -2,12 +2,16 @@ from copy import deepcopy from functools import wraps +import sentry_sdk from sentry_sdk._types import TYPE_CHECKING -from sentry_sdk.hub import Hub, _should_send_default_pii from sentry_sdk.integrations import DidNotEnable from sentry_sdk.scope import Scope from sentry_sdk.tracing import SOURCE_FOR_STYLE, TRANSACTION_SOURCE_ROUTE -from sentry_sdk.utils import transaction_from_function, logger +from sentry_sdk.utils import ( + transaction_from_function, + logger, + ensure_integration_enabled_async, +) if TYPE_CHECKING: from typing import Any, Callable, Dict @@ -84,54 +88,53 @@ def _sentry_get_request_handler(*args, **kwargs): @wraps(old_call) def _sentry_call(*args, **kwargs): # type: (*Any, **Any) -> Any - hub = Hub.current - with hub.configure_scope() as sentry_scope: - if sentry_scope.profile is not None: - sentry_scope.profile.update_active_thread_id() - return old_call(*args, **kwargs) + sentry_scope = Scope.get_isolation_scope() + if sentry_scope.profile is not None: + sentry_scope.profile.update_active_thread_id() + return old_call(*args, **kwargs) dependant.call = _sentry_call old_app = old_get_request_handler(*args, **kwargs) + @ensure_integration_enabled_async(FastApiIntegration, old_app) async def _sentry_app(*args, **kwargs): # type: (*Any, **Any) -> Any - hub = Hub.current - integration = hub.get_integration(FastApiIntegration) - if integration is None: - return await old_app(*args, **kwargs) - + integration = sentry_sdk.get_client().get_integration(FastApiIntegration) request = args[0] _set_transaction_name_and_source( Scope.get_current_scope(), integration.transaction_style, request ) - with hub.configure_scope() as sentry_scope: - extractor = StarletteRequestExtractor(request) - info = await extractor.extract_request_info() - - def _make_request_event_processor(req, integration): - # type: (Any, Any) -> Callable[[Event, Dict[str, Any]], Event] - def event_processor(event, hint): - # type: (Event, Dict[str, Any]) -> Event - - # Extract information from request - request_info = event.get("request", {}) - if info: - if "cookies" in info and _should_send_default_pii(): - request_info["cookies"] = info["cookies"] - if "data" in info: - request_info["data"] = info["data"] - event["request"] = deepcopy(request_info) - - return event - - return event_processor - - sentry_scope._name = FastApiIntegration.identifier - sentry_scope.add_event_processor( - _make_request_event_processor(request, integration) - ) + sentry_scope = Scope.get_isolation_scope() + extractor = StarletteRequestExtractor(request) + info = await extractor.extract_request_info() + + def _make_request_event_processor(req, integration): + # type: (Any, Any) -> Callable[[Event, Dict[str, Any]], Event] + def event_processor(event, hint): + # type: (Event, Dict[str, Any]) -> Event + + # Extract information from request + request_info = event.get("request", {}) + if info: + if ( + "cookies" in info + and sentry_sdk.get_client().should_send_default_pii() + ): + request_info["cookies"] = info["cookies"] + if "data" in info: + request_info["data"] = info["data"] + event["request"] = deepcopy(request_info) + + return event + + return event_processor + + sentry_scope._name = FastApiIntegration.identifier + sentry_scope.add_event_processor( + _make_request_event_processor(request, integration) + ) return await old_app(*args, **kwargs)