X7ROOT File Manager
Current Path:
/opt/hc_python/lib/python3.12/site-packages/sentry_sdk/integrations
opt
/
hc_python
/
lib
/
python3.12
/
site-packages
/
sentry_sdk
/
integrations
/
??
..
??
__init__.py
(12.44 KB)
??
__pycache__
??
_asgi_common.py
(3.11 KB)
??
_wsgi_common.py
(7.38 KB)
??
aiohttp.py
(12.7 KB)
??
anthropic.py
(14.17 KB)
??
argv.py
(911 B)
??
ariadne.py
(5.7 KB)
??
arq.py
(7.7 KB)
??
asgi.py
(12.5 KB)
??
asyncio.py
(4.5 KB)
??
asyncpg.py
(6.37 KB)
??
atexit.py
(1.61 KB)
??
aws_lambda.py
(17.65 KB)
??
beam.py
(5.06 KB)
??
boto3.py
(4.31 KB)
??
bottle.py
(6.46 KB)
??
celery
??
chalice.py
(4.59 KB)
??
clickhouse_driver.py
(5.96 KB)
??
cloud_resource_context.py
(7.6 KB)
??
cohere.py
(9.18 KB)
??
dedupe.py
(1.93 KB)
??
django
??
dramatiq.py
(7.28 KB)
??
excepthook.py
(2.35 KB)
??
executing.py
(1.95 KB)
??
falcon.py
(9.28 KB)
??
fastapi.py
(4.48 KB)
??
flask.py
(8.54 KB)
??
gcp.py
(8.26 KB)
??
gnu_backtrace.py
(2.75 KB)
??
google_genai
??
gql.py
(4.69 KB)
??
graphene.py
(4.92 KB)
??
grpc
??
httpx.py
(5.94 KB)
??
huey.py
(5.32 KB)
??
huggingface_hub.py
(14.6 KB)
??
langchain.py
(39.02 KB)
??
langgraph.py
(11.56 KB)
??
launchdarkly.py
(1.89 KB)
??
litellm.py
(9.99 KB)
??
litestar.py
(11.55 KB)
??
logging.py
(13.57 KB)
??
loguru.py
(6.38 KB)
??
mcp.py
(19.58 KB)
??
modules.py
(820 B)
??
openai.py
(24.54 KB)
??
openai_agents
??
openfeature.py
(1.1 KB)
??
opentelemetry
??
otlp.py
(3.06 KB)
??
pure_eval.py
(4.5 KB)
??
pydantic_ai
??
pymongo.py
(6.23 KB)
??
pyramid.py
(7.19 KB)
??
quart.py
(7.24 KB)
??
ray.py
(5.2 KB)
??
redis
??
rq.py
(5.18 KB)
??
rust_tracing.py
(8.87 KB)
??
sanic.py
(12.66 KB)
??
serverless.py
(1.76 KB)
??
socket.py
(3.09 KB)
??
spark
??
sqlalchemy.py
(4.24 KB)
??
starlette.py
(25.62 KB)
??
starlite.py
(10.31 KB)
??
statsig.py
(1.2 KB)
??
stdlib.py
(8.76 KB)
??
strawberry.py
(13.82 KB)
??
sys_exit.py
(2.43 KB)
??
threading.py
(6.94 KB)
??
tornado.py
(7.04 KB)
??
trytond.py
(1.61 KB)
??
typer.py
(1.77 KB)
??
unleash.py
(1.03 KB)
??
unraisablehook.py
(1.71 KB)
??
wsgi.py
(10.56 KB)
Editing: threading.py
import sys import warnings from functools import wraps from threading import Thread, current_thread from concurrent.futures import ThreadPoolExecutor, Future import sentry_sdk from sentry_sdk.integrations import Integration from sentry_sdk.scope import use_isolation_scope, use_scope from sentry_sdk.utils import ( event_from_exception, capture_internal_exceptions, logger, reraise, ) from typing import TYPE_CHECKING if TYPE_CHECKING: from typing import Any from typing import TypeVar from typing import Callable from typing import Optional from sentry_sdk._types import ExcInfo F = TypeVar("F", bound=Callable[..., Any]) T = TypeVar("T", bound=Any) class ThreadingIntegration(Integration): identifier = "threading" def __init__(self, propagate_hub=None, propagate_scope=True): # type: (Optional[bool], bool) -> None if propagate_hub is not None: logger.warning( "Deprecated: propagate_hub is deprecated. This will be removed in the future." ) # Note: propagate_hub did not have any effect on propagation of scope data # scope data was always propagated no matter what the value of propagate_hub was # This is why the default for propagate_scope is True self.propagate_scope = propagate_scope if propagate_hub is not None: self.propagate_scope = propagate_hub @staticmethod def setup_once(): # type: () -> None old_start = Thread.start try: from django import VERSION as django_version # noqa: N811 import channels # type: ignore[import-untyped] channels_version = channels.__version__ except ImportError: django_version = None channels_version = None is_async_emulated_with_threads = ( sys.version_info < (3, 9) and channels_version is not None and channels_version < "4.0.0" and django_version is not None and django_version >= (3, 0) and django_version < (4, 0) ) @wraps(old_start) def sentry_start(self, *a, **kw): # type: (Thread, *Any, **Any) -> Any integration = sentry_sdk.get_client().get_integration(ThreadingIntegration) if integration is None: return old_start(self, *a, **kw) if integration.propagate_scope: if is_async_emulated_with_threads: warnings.warn( "There is a known issue with Django channels 2.x and 3.x when using Python 3.8 or older. " "(Async support is emulated using threads and some Sentry data may be leaked between those threads.) " "Please either upgrade to Django channels 4.0+, use Django's async features " "available in Django 3.1+ instead of Django channels, or upgrade to Python 3.9+.", stacklevel=2, ) isolation_scope = sentry_sdk.get_isolation_scope() current_scope = sentry_sdk.get_current_scope() else: isolation_scope = sentry_sdk.get_isolation_scope().fork() current_scope = sentry_sdk.get_current_scope().fork() else: isolation_scope = None current_scope = None # Patching instance methods in `start()` creates a reference cycle if # done in a naive way. See # https://github.com/getsentry/sentry-python/pull/434 # # In threading module, using current_thread API will access current thread instance # without holding it to avoid a reference cycle in an easier way. with capture_internal_exceptions(): new_run = _wrap_run( isolation_scope, current_scope, getattr(self.run, "__func__", self.run), ) self.run = new_run # type: ignore return old_start(self, *a, **kw) Thread.start = sentry_start # type: ignore ThreadPoolExecutor.submit = _wrap_threadpool_executor_submit( # type: ignore ThreadPoolExecutor.submit, is_async_emulated_with_threads ) def _wrap_run(isolation_scope_to_use, current_scope_to_use, old_run_func): # type: (Optional[sentry_sdk.Scope], Optional[sentry_sdk.Scope], F) -> F @wraps(old_run_func) def run(*a, **kw): # type: (*Any, **Any) -> Any def _run_old_run_func(): # type: () -> Any try: self = current_thread() return old_run_func(self, *a[1:], **kw) except Exception: reraise(*_capture_exception()) if isolation_scope_to_use is not None and current_scope_to_use is not None: with use_isolation_scope(isolation_scope_to_use): with use_scope(current_scope_to_use): return _run_old_run_func() else: return _run_old_run_func() return run # type: ignore def _wrap_threadpool_executor_submit(func, is_async_emulated_with_threads): # type: (Callable[..., Future[T]], bool) -> Callable[..., Future[T]] """ Wrap submit call to propagate scopes on task submission. """ @wraps(func) def sentry_submit(self, fn, *args, **kwargs): # type: (ThreadPoolExecutor, Callable[..., T], *Any, **Any) -> Future[T] integration = sentry_sdk.get_client().get_integration(ThreadingIntegration) if integration is None: return func(self, fn, *args, **kwargs) if integration.propagate_scope and is_async_emulated_with_threads: isolation_scope = sentry_sdk.get_isolation_scope() current_scope = sentry_sdk.get_current_scope() elif integration.propagate_scope: isolation_scope = sentry_sdk.get_isolation_scope().fork() current_scope = sentry_sdk.get_current_scope().fork() else: isolation_scope = None current_scope = None def wrapped_fn(*args, **kwargs): # type: (*Any, **Any) -> Any if isolation_scope is not None and current_scope is not None: with use_isolation_scope(isolation_scope): with use_scope(current_scope): return fn(*args, **kwargs) return fn(*args, **kwargs) return func(self, wrapped_fn, *args, **kwargs) return sentry_submit def _capture_exception(): # type: () -> ExcInfo exc_info = sys.exc_info() client = sentry_sdk.get_client() if client.get_integration(ThreadingIntegration) is not None: event, hint = event_from_exception( exc_info, client_options=client.options, mechanism={"type": "threading", "handled": False}, ) sentry_sdk.capture_event(event, hint=hint) return exc_info
Upload File
Create Folder