/opt/cloudlinux/venv/lib/python3.11/site-packages/sentry_sdk/integrations
import asyncio from copy import deepcopy 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.tracing import SOURCE_FOR_STYLE, TRANSACTION_SOURCE_ROUTE from sentry_sdk.utils import transaction_from_function if TYPE_CHECKING: from typing import Any, Callable, Dict from sentry_sdk.scope import Scope try: from sentry_sdk.integrations.starlette import ( StarletteIntegration, StarletteRequestExtractor, ) except DidNotEnable: raise DidNotEnable("Starlette is not installed") try: import fastapi # type: ignore except ImportError: raise DidNotEnable("FastAPI is not installed") _DEFAULT_TRANSACTION_NAME = "generic FastAPI request" class FastApiIntegration(StarletteIntegration): identifier = "fastapi" @staticmethod def setup_once(): # type: () -> None patch_get_request_handler() def _set_transaction_name_and_source(scope, transaction_style, request): # type: (Scope, str, Any) -> None name = "" if transaction_style == "endpoint": endpoint = request.scope.get("endpoint") if endpoint: name = transaction_from_function(endpoint) or "" elif transaction_style == "url": route = request.scope.get("route") if route: path = getattr(route, "path", None) if path is not None: name = path if not name: name = _DEFAULT_TRANSACTION_NAME source = TRANSACTION_SOURCE_ROUTE else: source = SOURCE_FOR_STYLE[transaction_style] scope.set_transaction_name(name, source=source) def patch_get_request_handler(): # type: () -> None old_get_request_handler = fastapi.routing.get_request_handler def _sentry_get_request_handler(*args, **kwargs): # type: (*Any, **Any) -> Any dependant = kwargs.get("dependant") if ( dependant and dependant.call is not None and not asyncio.iscoroutinefunction(dependant.call) ): old_call = dependant.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) dependant.call = _sentry_call old_app = old_get_request_handler(*args, **kwargs) 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) with hub.configure_scope() as sentry_scope: request = args[0] _set_transaction_name_and_source( sentry_scope, integration.transaction_style, request ) extractor = StarletteRequestExtractor(request) info = await extractor.extract_request_info() def _make_request_event_processor(req, integration): # type: (Any, Any) -> Callable[[Dict[str, Any], Dict[str, Any]], Dict[str, Any]] def event_processor(event, hint): # type: (Dict[str, Any], Dict[str, Any]) -> Dict[str, Any] # 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) ) return await old_app(*args, **kwargs) return _sentry_app fastapi.routing.get_request_handler = _sentry_get_request_handler
.
Edit
..
Edit
__init__.py
Edit
__pycache__
Edit
_wsgi_common.py
Edit
aiohttp.py
Edit
argv.py
Edit
arq.py
Edit
asgi.py
Edit
asyncio.py
Edit
atexit.py
Edit
aws_lambda.py
Edit
beam.py
Edit
boto3.py
Edit
bottle.py
Edit
celery.py
Edit
chalice.py
Edit
cloud_resource_context.py
Edit
dedupe.py
Edit
django
Edit
excepthook.py
Edit
executing.py
Edit
falcon.py
Edit
fastapi.py
Edit
flask.py
Edit
gcp.py
Edit
gnu_backtrace.py
Edit
grpc
Edit
httpx.py
Edit
huey.py
Edit
logging.py
Edit
loguru.py
Edit
modules.py
Edit
opentelemetry
Edit
pure_eval.py
Edit
pymongo.py
Edit
pyramid.py
Edit
quart.py
Edit
redis
Edit
rq.py
Edit
sanic.py
Edit
serverless.py
Edit
socket.py
Edit
spark
Edit
sqlalchemy.py
Edit
starlette.py
Edit
starlite.py
Edit
stdlib.py
Edit
threading.py
Edit
tornado.py
Edit
trytond.py
Edit
wsgi.py
Edit