✘✘ GRAYBYTE WORDPRESS FILE MANAGER ✘✘

​🇳​​🇦​​🇲​​🇪♯➤ server366.web-hosting.com ​🇻​♯➤ 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP 🇾​♯➤ 2025

𝗛𝗢𝗠𝗘 𝗜𝗗 ♯➤ 67.223.118.204 ♯➤ 𝗔𝗗𝗠𝗜𝗡 𝗜𝗗 216.73.216.52
𝗢𝗣𝗧𝗜𝗢𝗡𝗦 ♯ CRL ♯➤ 𝗢𝗞 ┃ WGT ♯➤ 𝗢𝗞 ┃ SDO ♯➤ 𝗢𝗙𝗙 ┃ PKEX ♯➤ 𝗢𝗙𝗙
𝗗𝗘𝗔𝗖𝗧𝗜𝗩𝗔𝗧𝗘𝗗 ♯➤ 𝗔𝗟𝗟 𝗪𝗢𝗥𝗞𝗜𝗡𝗚....

𝗛𝗢𝗠𝗘
𝗖𝗨𝗥𝗥𝗘𝗡𝗧 𝗙𝗜𝗟𝗘 : /opt/hc_python/lib/python3.12/site-packages/sentry_sdk/integrations//litestar.py
from collections.abc import Set
from copy import deepcopy

import sentry_sdk
from sentry_sdk.consts import OP
from sentry_sdk.integrations import (
    _DEFAULT_FAILED_REQUEST_STATUS_CODES,
    DidNotEnable,
    Integration,
)
from sentry_sdk.integrations.asgi import SentryAsgiMiddleware
from sentry_sdk.integrations.logging import ignore_logger
from sentry_sdk.scope import should_send_default_pii
from sentry_sdk.tracing import SOURCE_FOR_STYLE, TransactionSource
from sentry_sdk.utils import (
    ensure_integration_enabled,
    event_from_exception,
    transaction_from_function,
)

try:
    from litestar import Litestar, Request  # type: ignore
    from litestar.data_extractors import ConnectionDataExtractor  # type: ignore
    from litestar.exceptions import HTTPException  # type: ignore
    from litestar.handlers.base import BaseRouteHandler  # type: ignore
    from litestar.middleware import DefineMiddleware  # type: ignore
    from litestar.routes.http import HTTPRoute  # type: ignore
except ImportError:
    raise DidNotEnable("Litestar is not installed")

from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from typing import Any, Optional, Union

    from litestar.middleware import MiddlewareProtocol
    from litestar.types import (  # type: ignore
        HTTPReceiveMessage,
        HTTPScope,
        Message,
        Middleware,
        Receive,
        Send,
        WebSocketReceiveMessage,
    )
    from litestar.types import (
        Scope as LitestarScope,
    )
    from litestar.types.asgi_types import ASGIApp  # type: ignore

    from sentry_sdk._types import Event, Hint

_DEFAULT_TRANSACTION_NAME = "generic Litestar request"


class LitestarIntegration(Integration):
    identifier = "litestar"
    origin = f"auto.http.{identifier}"

    def __init__(
        self,
        failed_request_status_codes: "Set[int]" = _DEFAULT_FAILED_REQUEST_STATUS_CODES,
    ) -> None:
        self.failed_request_status_codes = failed_request_status_codes

    @staticmethod
    def setup_once() -> None:
        patch_app_init()
        patch_middlewares()
        patch_http_route_handle()

        # The following line follows the pattern found in other integrations such as `DjangoIntegration.setup_once`.
        # The Litestar `ExceptionHandlerMiddleware.__call__` catches exceptions and does the following
        # (among other things):
        #   1. Logs them, some at least (such as 500s) as errors
        #   2. Calls after_exception hooks
        # The `LitestarIntegration`` provides an after_exception hook (see `patch_app_init` below) to create a Sentry event
        # from an exception, which ends up being called during step 2 above. However, the Sentry `LoggingIntegration` will
        # by default create a Sentry event from error logs made in step 1 if we do not prevent it from doing so.
        ignore_logger("litestar")


class SentryLitestarASGIMiddleware(SentryAsgiMiddleware):
    def __init__(
        self, app: "ASGIApp", span_origin: str = LitestarIntegration.origin
    ) -> None:
        super().__init__(
            app=app,
            unsafe_context_data=False,
            transaction_style="endpoint",
            mechanism_type="asgi",
            span_origin=span_origin,
            asgi_version=3,
        )

    def _capture_request_exception(self, exc: Exception) -> None:
        """Avoid catching exceptions from request handlers.

        Those exceptions are already handled in Litestar.after_exception handler.
        We still catch exceptions from application lifespan handlers.
        """
        pass


def patch_app_init() -> None:
    """
    Replaces the Litestar class's `__init__` function in order to inject `after_exception` handlers and set the
    `SentryLitestarASGIMiddleware` as the outmost middleware in the stack.
    See:
    - https://docs.litestar.dev/2/usage/applications.html#after-exception
    - https://docs.litestar.dev/2/usage/middleware/using-middleware.html
    """
    old__init__ = Litestar.__init__

    @ensure_integration_enabled(LitestarIntegration, old__init__)
    def injection_wrapper(self: "Litestar", *args: "Any", **kwargs: "Any") -> None:
        kwargs["after_exception"] = [
            exception_handler,
            *(kwargs.get("after_exception") or []),
        ]

        middleware = kwargs.get("middleware") or []
        kwargs["middleware"] = [SentryLitestarASGIMiddleware, *middleware]
        old__init__(self, *args, **kwargs)

    Litestar.__init__ = injection_wrapper


def patch_middlewares() -> None:
    old_resolve_middleware_stack = BaseRouteHandler.resolve_middleware

    @ensure_integration_enabled(LitestarIntegration, old_resolve_middleware_stack)
    def resolve_middleware_wrapper(self: "BaseRouteHandler") -> "list[Middleware]":
        return [
            enable_span_for_middleware(middleware)
            for middleware in old_resolve_middleware_stack(self)
        ]

    BaseRouteHandler.resolve_middleware = resolve_middleware_wrapper


def enable_span_for_middleware(middleware: "Middleware") -> "Middleware":
    if (
        not hasattr(middleware, "__call__")  # noqa: B004
        or middleware is SentryLitestarASGIMiddleware
    ):
        return middleware

    if isinstance(middleware, DefineMiddleware):
        old_call: "ASGIApp" = middleware.middleware.__call__
    else:
        old_call = middleware.__call__

    async def _create_span_call(
        self: "MiddlewareProtocol",
        scope: "LitestarScope",
        receive: "Receive",
        send: "Send",
    ) -> None:
        if sentry_sdk.get_client().get_integration(LitestarIntegration) is None:
            return await old_call(self, scope, receive, send)

        middleware_name = self.__class__.__name__
        with sentry_sdk.start_span(
            op=OP.MIDDLEWARE_LITESTAR,
            name=middleware_name,
            origin=LitestarIntegration.origin,
        ) as middleware_span:
            middleware_span.set_tag("litestar.middleware_name", middleware_name)

            # Creating spans for the "receive" callback
            async def _sentry_receive(
                *args: "Any", **kwargs: "Any"
            ) -> "Union[HTTPReceiveMessage, WebSocketReceiveMessage]":
                if sentry_sdk.get_client().get_integration(LitestarIntegration) is None:
                    return await receive(*args, **kwargs)
                with sentry_sdk.start_span(
                    op=OP.MIDDLEWARE_LITESTAR_RECEIVE,
                    name=getattr(receive, "__qualname__", str(receive)),
                    origin=LitestarIntegration.origin,
                ) as span:
                    span.set_tag("litestar.middleware_name", middleware_name)
                    return await receive(*args, **kwargs)

            receive_name = getattr(receive, "__name__", str(receive))
            receive_patched = receive_name == "_sentry_receive"
            new_receive = _sentry_receive if not receive_patched else receive

            # Creating spans for the "send" callback
            async def _sentry_send(message: "Message") -> None:
                if sentry_sdk.get_client().get_integration(LitestarIntegration) is None:
                    return await send(message)
                with sentry_sdk.start_span(
                    op=OP.MIDDLEWARE_LITESTAR_SEND,
                    name=getattr(send, "__qualname__", str(send)),
                    origin=LitestarIntegration.origin,
                ) as span:
                    span.set_tag("litestar.middleware_name", middleware_name)
                    return await send(message)

            send_name = getattr(send, "__name__", str(send))
            send_patched = send_name == "_sentry_send"
            new_send = _sentry_send if not send_patched else send

            return await old_call(self, scope, new_receive, new_send)

    not_yet_patched = old_call.__name__ not in ["_create_span_call"]

    if not_yet_patched:
        if isinstance(middleware, DefineMiddleware):
            middleware.middleware.__call__ = _create_span_call
        else:
            middleware.__call__ = _create_span_call

    return middleware


def patch_http_route_handle() -> None:
    old_handle = HTTPRoute.handle

    async def handle_wrapper(
        self: "HTTPRoute", scope: "HTTPScope", receive: "Receive", send: "Send"
    ) -> None:
        if sentry_sdk.get_client().get_integration(LitestarIntegration) is None:
            return await old_handle(self, scope, receive, send)

        sentry_scope = sentry_sdk.get_isolation_scope()
        request: "Request[Any, Any]" = scope["app"].request_class(
            scope=scope, receive=receive, send=send
        )
        extracted_request_data = ConnectionDataExtractor(
            parse_body=True, parse_query=True
        )(request)
        body = extracted_request_data.pop("body")

        request_data = await body

        def event_processor(event: "Event", _: "Hint") -> "Event":
            route_handler = scope.get("route_handler")

            request_info = event.get("request", {})
            request_info["content_length"] = len(scope.get("_body", b""))
            if should_send_default_pii():
                request_info["cookies"] = extracted_request_data["cookies"]
            if request_data is not None:
                request_info["data"] = request_data

            func = None
            if route_handler.name is not None:
                tx_name = route_handler.name
            # Accounts for use of type `Ref` in earlier versions of litestar without the need to reference it as a type
            elif hasattr(route_handler.fn, "value"):
                func = route_handler.fn.value
            else:
                func = route_handler.fn
            if func is not None:
                tx_name = transaction_from_function(func)

            tx_info = {"source": SOURCE_FOR_STYLE["endpoint"]}

            if not tx_name:
                tx_name = _DEFAULT_TRANSACTION_NAME
                tx_info = {"source": TransactionSource.ROUTE}

            event.update(
                {
                    "request": deepcopy(request_info),
                    "transaction": tx_name,
                    "transaction_info": tx_info,
                }
            )
            return event

        sentry_scope._name = LitestarIntegration.identifier
        sentry_scope.add_event_processor(event_processor)

        return await old_handle(self, scope, receive, send)

    HTTPRoute.handle = handle_wrapper


def retrieve_user_from_scope(scope: "LitestarScope") -> "Optional[dict[str, Any]]":
    scope_user = scope.get("user")
    if isinstance(scope_user, dict):
        return scope_user
    if hasattr(scope_user, "asdict"):  # dataclasses
        return scope_user.asdict()

    return None


@ensure_integration_enabled(LitestarIntegration)
def exception_handler(exc: Exception, scope: "LitestarScope") -> None:
    user_info: "Optional[dict[str, Any]]" = None
    if should_send_default_pii():
        user_info = retrieve_user_from_scope(scope)
    if user_info and isinstance(user_info, dict):
        sentry_scope = sentry_sdk.get_isolation_scope()
        sentry_scope.set_user(user_info)

    if isinstance(exc, HTTPException):
        integration = sentry_sdk.get_client().get_integration(LitestarIntegration)
        if (
            integration is not None
            and exc.status_code not in integration.failed_request_status_codes
        ):
            return

    event, hint = event_from_exception(
        exc,
        client_options=sentry_sdk.get_client().options,
        mechanism={"type": LitestarIntegration.identifier, "handled": False},
    )

    sentry_sdk.capture_event(event, hint=hint)


Current_dir [ 𝗡𝗢𝗧 𝗪𝗥𝗜𝗧𝗘𝗔𝗕𝗟𝗘 ] Document_root [ 𝗪𝗥𝗜𝗧𝗘𝗔𝗕𝗟𝗘 ]


[ Back ]
𝗡𝗔𝗠𝗘
𝗦𝗜𝗭𝗘
𝗟𝗔𝗦𝗧 𝗧𝗢𝗨𝗖𝗛
𝗨𝗦𝗘𝗥
𝗦𝗧𝗔𝗧𝗨𝗦
𝗙𝗨𝗡𝗖𝗧𝗜𝗢𝗡𝗦
..
--
11 Jun 2026 5.00 AM
root / root
0755
__pycache__
--
11 Jun 2026 5.00 AM
root / root
0755
celery
--
11 Jun 2026 5.00 AM
root / root
0755
django
--
11 Jun 2026 5.00 AM
root / root
0755
google_genai
--
11 Jun 2026 5.00 AM
root / root
0755
grpc
--
11 Jun 2026 5.00 AM
root / root
0755
openai_agents
--
11 Jun 2026 5.00 AM
root / root
0755
opentelemetry
--
11 Jun 2026 5.00 AM
root / root
0755
pydantic_ai
--
11 Jun 2026 5.00 AM
root / root
0755
redis
--
11 Jun 2026 5.00 AM
root / root
0755
spark
--
11 Jun 2026 5.00 AM
root / root
0755
__init__.py
12.511 KB
11 Jun 2026 5.00 AM
root / root
0644
_asgi_common.py
4.003 KB
11 Jun 2026 5.00 AM
root / root
0644
_wsgi_common.py
7.281 KB
11 Jun 2026 5.00 AM
root / root
0644
aiohttp.py
19.277 KB
11 Jun 2026 5.00 AM
root / root
0644
aiomysql.py
9.09 KB
11 Jun 2026 5.00 AM
root / root
0644
anthropic.py
39 KB
11 Jun 2026 5.00 AM
root / root
0644
argv.py
0.855 KB
11 Jun 2026 5.00 AM
root / root
0644
ariadne.py
5.698 KB
11 Jun 2026 5.00 AM
root / root
0644
arq.py
9.229 KB
11 Jun 2026 5.00 AM
root / root
0644
asgi.py
20.061 KB
11 Jun 2026 5.00 AM
root / root
0644
asyncio.py
9.275 KB
11 Jun 2026 5.00 AM
root / root
0644
asyncpg.py
9.68 KB
11 Jun 2026 5.00 AM
root / root
0644
atexit.py
1.509 KB
11 Jun 2026 5.00 AM
root / root
0644
aws_lambda.py
17.41 KB
11 Jun 2026 5.00 AM
root / root
0644
beam.py
4.907 KB
11 Jun 2026 5.00 AM
root / root
0644
boto3.py
6.198 KB
11 Jun 2026 5.00 AM
root / root
0644
bottle.py
7.208 KB
11 Jun 2026 5.00 AM
root / root
0644
chalice.py
4.506 KB
11 Jun 2026 5.00 AM
root / root
0644
clickhouse_driver.py
5.846 KB
11 Jun 2026 5.00 AM
root / root
0644
cloud_resource_context.py
7.488 KB
11 Jun 2026 5.00 AM
root / root
0644
cohere.py
10.44 KB
11 Jun 2026 5.00 AM
root / root
0644
dedupe.py
1.857 KB
11 Jun 2026 5.00 AM
root / root
0644
dramatiq.py
8.016 KB
11 Jun 2026 5.00 AM
root / root
0644
excepthook.py
2.249 KB
11 Jun 2026 5.00 AM
root / root
0644
executing.py
1.935 KB
11 Jun 2026 5.00 AM
root / root
0644
falcon.py
9.04 KB
11 Jun 2026 5.00 AM
root / root
0644
fastapi.py
5.281 KB
11 Jun 2026 5.00 AM
root / root
0644
flask.py
8.274 KB
11 Jun 2026 5.00 AM
root / root
0644
gcp.py
10.57 KB
11 Jun 2026 5.00 AM
root / root
0644
gnu_backtrace.py
2.724 KB
11 Jun 2026 5.00 AM
root / root
0644
gql.py
4.927 KB
11 Jun 2026 5.00 AM
root / root
0644
graphene.py
5.707 KB
11 Jun 2026 5.00 AM
root / root
0644
httpx.py
9.788 KB
11 Jun 2026 5.00 AM
root / root
0644
httpx2.py
9.804 KB
11 Jun 2026 5.00 AM
root / root
0644
huey.py
8.189 KB
11 Jun 2026 5.00 AM
root / root
0644
huggingface_hub.py
15.282 KB
11 Jun 2026 5.00 AM
root / root
0644
langchain.py
48.313 KB
11 Jun 2026 5.00 AM
root / root
0644
langgraph.py
18.125 KB
11 Jun 2026 5.00 AM
root / root
0644
launchdarkly.py
1.873 KB
11 Jun 2026 5.00 AM
root / root
0644
litellm.py
13.033 KB
11 Jun 2026 5.00 AM
root / root
0644
litestar.py
11.464 KB
11 Jun 2026 5.00 AM
root / root
0644
logging.py
15.692 KB
11 Jun 2026 5.00 AM
root / root
0644
loguru.py
6.352 KB
11 Jun 2026 5.00 AM
root / root
0644
mcp.py
23.121 KB
11 Jun 2026 5.00 AM
root / root
0644
modules.py
0.769 KB
11 Jun 2026 5.00 AM
root / root
0644
openai.py
53.385 KB
11 Jun 2026 5.00 AM
root / root
0644
openfeature.py
1.076 KB
11 Jun 2026 5.00 AM
root / root
0644
otlp.py
7.99 KB
11 Jun 2026 5.00 AM
root / root
0644
pure_eval.py
4.413 KB
11 Jun 2026 5.00 AM
root / root
0644
pymongo.py
8.212 KB
11 Jun 2026 5.00 AM
root / root
0644
pyramid.py
7.416 KB
11 Jun 2026 5.00 AM
root / root
0644
pyreqwest.py
6.824 KB
11 Jun 2026 5.00 AM
root / root
0644
quart.py
7.318 KB
11 Jun 2026 5.00 AM
root / root
0644
ray.py
5.747 KB
11 Jun 2026 5.00 AM
root / root
0644
rq.py
7.807 KB
11 Jun 2026 5.00 AM
root / root
0644
rust_tracing.py
9.436 KB
11 Jun 2026 5.00 AM
root / root
0644
sanic.py
15.252 KB
11 Jun 2026 5.00 AM
root / root
0644
serverless.py
1.583 KB
11 Jun 2026 5.00 AM
root / root
0644
socket.py
5.018 KB
11 Jun 2026 5.00 AM
root / root
0644
sqlalchemy.py
5.242 KB
11 Jun 2026 5.00 AM
root / root
0644
starlette.py
27.935 KB
11 Jun 2026 5.00 AM
root / root
0644
starlite.py
11.037 KB
11 Jun 2026 5.00 AM
root / root
0644
statsig.py
1.186 KB
11 Jun 2026 5.00 AM
root / root
0644
stdlib.py
14.007 KB
11 Jun 2026 5.00 AM
root / root
0644
strawberry.py
17.391 KB
11 Jun 2026 5.00 AM
root / root
0644
sys_exit.py
2.352 KB
11 Jun 2026 5.00 AM
root / root
0644
threading.py
6.875 KB
11 Jun 2026 5.00 AM
root / root
0644
tornado.py
10.789 KB
11 Jun 2026 5.00 AM
root / root
0644
trytond.py
1.675 KB
11 Jun 2026 5.00 AM
root / root
0644
typer.py
1.725 KB
11 Jun 2026 5.00 AM
root / root
0644
unleash.py
1.021 KB
11 Jun 2026 5.00 AM
root / root
0644
unraisablehook.py
1.654 KB
11 Jun 2026 5.00 AM
root / root
0644
wsgi.py
15.031 KB
11 Jun 2026 5.00 AM
root / root
0644

✘✘ GRAYBYTE WORDPRESS FILE MANAGER @ 2026 CONTACT ME ✘✘
Static GIF Static GIF