SILENT KILLERPanel

Current Path: > > opt > cloudlinux > venv > lib64 > python3.11 > site-packages > sentry_sdk > > integrations


Operation   : Linux premium131.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
Software     : Apache
Server IP    : 162.0.232.56 | Your IP: 216.73.216.111
Domains      : 1034 Domain(s)
Permission   : [ 0755 ]

Files and Folders in: //opt/cloudlinux/venv/lib64/python3.11/site-packages/sentry_sdk//integrations

NameTypeSizeLast ModifiedActions
__pycache__ Directory - -
django Directory - -
grpc Directory - -
opentelemetry Directory - -
redis Directory - -
spark Directory - -
__init__.py File 6827 bytes April 17 2025 13:10:59.
_wsgi_common.py File 4537 bytes April 17 2025 13:10:59.
aiohttp.py File 11553 bytes April 17 2025 13:10:59.
argv.py File 963 bytes April 17 2025 13:10:59.
arq.py File 6737 bytes April 17 2025 13:10:59.
asgi.py File 11821 bytes April 17 2025 13:10:59.
asyncio.py File 3049 bytes April 17 2025 13:10:59.
atexit.py File 1846 bytes April 17 2025 13:10:59.
aws_lambda.py File 15815 bytes April 17 2025 13:10:59.
beam.py File 5689 bytes April 17 2025 13:10:59.
boto3.py File 4542 bytes April 17 2025 13:10:59.
bottle.py File 6471 bytes April 17 2025 13:10:59.
celery.py File 19100 bytes April 17 2025 13:10:59.
chalice.py File 4769 bytes April 17 2025 13:10:59.
cloud_resource_context.py File 6755 bytes April 17 2025 13:10:59.
dedupe.py File 1184 bytes April 17 2025 13:10:59.
excepthook.py File 2260 bytes April 17 2025 13:10:59.
executing.py File 2041 bytes April 17 2025 13:10:59.
falcon.py File 7984 bytes April 17 2025 13:10:59.
fastapi.py File 4496 bytes April 17 2025 13:10:59.
flask.py File 7907 bytes April 17 2025 13:10:59.
gcp.py File 8213 bytes April 17 2025 13:10:59.
gnu_backtrace.py File 2930 bytes April 17 2025 13:10:59.
httpx.py File 5005 bytes April 17 2025 13:10:59.
huey.py File 4700 bytes April 17 2025 13:10:59.
logging.py File 9181 bytes April 17 2025 13:10:59.
loguru.py File 3051 bytes April 17 2025 13:10:59.
modules.py File 2110 bytes April 17 2025 13:10:59.
pure_eval.py File 4554 bytes April 17 2025 13:10:59.
pymongo.py File 6007 bytes April 17 2025 13:10:59.
pyramid.py File 7442 bytes April 17 2025 13:10:59.
quart.py File 7377 bytes April 17 2025 13:10:59.
rq.py File 5411 bytes April 17 2025 13:10:59.
sanic.py File 11326 bytes April 17 2025 13:10:59.
serverless.py File 1975 bytes April 17 2025 13:10:59.
socket.py File 2945 bytes April 17 2025 13:10:59.
sqlalchemy.py File 4244 bytes April 17 2025 13:10:59.
starlette.py File 23211 bytes April 17 2025 13:10:59.
starlite.py File 10089 bytes April 17 2025 13:10:59.
stdlib.py File 8251 bytes April 17 2025 13:10:59.
threading.py File 2937 bytes April 17 2025 13:10:59.
tornado.py File 7342 bytes April 17 2025 13:10:59.
trytond.py File 1745 bytes April 17 2025 13:10:59.
wsgi.py File 9581 bytes April 17 2025 13:10:59.

Reading File: //opt/cloudlinux/venv/lib64/python3.11/site-packages/sentry_sdk//integrations/beam.py

from __future__ import absolute_import

import sys
import types
from sentry_sdk._functools import wraps

from sentry_sdk.hub import Hub
from sentry_sdk._compat import reraise
from sentry_sdk.utils import capture_internal_exceptions, event_from_exception
from sentry_sdk.integrations import Integration
from sentry_sdk.integrations.logging import ignore_logger
from sentry_sdk._types import TYPE_CHECKING

if TYPE_CHECKING:
    from typing import Any
    from typing import Iterator
    from typing import TypeVar
    from typing import Optional
    from typing import Callable

    from sentry_sdk.client import Client
    from sentry_sdk._types import ExcInfo

    T = TypeVar("T")
    F = TypeVar("F", bound=Callable[..., Any])


WRAPPED_FUNC = "_wrapped_{}_"
INSPECT_FUNC = "_inspect_{}"  # Required format per apache_beam/transforms/core.py
USED_FUNC = "_sentry_used_"


class BeamIntegration(Integration):
    identifier = "beam"

    @staticmethod
    def setup_once():
        # type: () -> None
        from apache_beam.transforms.core import DoFn, ParDo  # type: ignore

        ignore_logger("root")
        ignore_logger("bundle_processor.create")

        function_patches = ["process", "start_bundle", "finish_bundle", "setup"]
        for func_name in function_patches:
            setattr(
                DoFn,
                INSPECT_FUNC.format(func_name),
                _wrap_inspect_call(DoFn, func_name),
            )

        old_init = ParDo.__init__

        def sentry_init_pardo(self, fn, *args, **kwargs):
            # type: (ParDo, Any, *Any, **Any) -> Any
            # Do not monkey patch init twice
            if not getattr(self, "_sentry_is_patched", False):
                for func_name in function_patches:
                    if not hasattr(fn, func_name):
                        continue
                    wrapped_func = WRAPPED_FUNC.format(func_name)

                    # Check to see if inspect is set and process is not
                    # to avoid monkey patching process twice.
                    # Check to see if function is part of object for
                    # backwards compatibility.
                    process_func = getattr(fn, func_name)
                    inspect_func = getattr(fn, INSPECT_FUNC.format(func_name))
                    if not getattr(inspect_func, USED_FUNC, False) and not getattr(
                        process_func, USED_FUNC, False
                    ):
                        setattr(fn, wrapped_func, process_func)
                        setattr(fn, func_name, _wrap_task_call(process_func))

                self._sentry_is_patched = True
            old_init(self, fn, *args, **kwargs)

        ParDo.__init__ = sentry_init_pardo


def _wrap_inspect_call(cls, func_name):
    # type: (Any, Any) -> Any

    if not hasattr(cls, func_name):
        return None

    def _inspect(self):
        # type: (Any) -> Any
        """
        Inspect function overrides the way Beam gets argspec.
        """
        wrapped_func = WRAPPED_FUNC.format(func_name)
        if hasattr(self, wrapped_func):
            process_func = getattr(self, wrapped_func)
        else:
            process_func = getattr(self, func_name)
            setattr(self, func_name, _wrap_task_call(process_func))
            setattr(self, wrapped_func, process_func)

        # getfullargspec is deprecated in more recent beam versions and get_function_args_defaults
        # (which uses Signatures internally) should be used instead.
        try:
            from apache_beam.transforms.core import get_function_args_defaults

            return get_function_args_defaults(process_func)
        except ImportError:
            from apache_beam.typehints.decorators import getfullargspec  # type: ignore

            return getfullargspec(process_func)

    setattr(_inspect, USED_FUNC, True)
    return _inspect


def _wrap_task_call(func):
    # type: (F) -> F
    """
    Wrap task call with a try catch to get exceptions.
    Pass the client on to raise_exception so it can get rebinded.
    """
    client = Hub.current.client

    @wraps(func)
    def _inner(*args, **kwargs):
        # type: (*Any, **Any) -> Any
        try:
            gen = func(*args, **kwargs)
        except Exception:
            raise_exception(client)

        if not isinstance(gen, types.GeneratorType):
            return gen
        return _wrap_generator_call(gen, client)

    setattr(_inner, USED_FUNC, True)
    return _inner  # type: ignore


def _capture_exception(exc_info, hub):
    # type: (ExcInfo, Hub) -> None
    """
    Send Beam exception to Sentry.
    """
    integration = hub.get_integration(BeamIntegration)
    if integration is None:
        return

    client = hub.client
    if client is None:
        return

    event, hint = event_from_exception(
        exc_info,
        client_options=client.options,
        mechanism={"type": "beam", "handled": False},
    )
    hub.capture_event(event, hint=hint)


def raise_exception(client):
    # type: (Optional[Client]) -> None
    """
    Raise an exception. If the client is not in the hub, rebind it.
    """
    hub = Hub.current
    if hub.client is None:
        hub.bind_client(client)
    exc_info = sys.exc_info()
    with capture_internal_exceptions():
        _capture_exception(exc_info, hub)
    reraise(*exc_info)


def _wrap_generator_call(gen, client):
    # type: (Iterator[T], Optional[Client]) -> Iterator[T]
    """
    Wrap the generator to handle any failures.
    """
    while True:
        try:
            yield next(gen)
        except StopIteration:
            break
        except Exception:
            raise_exception(client)

SILENT KILLER Tool