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.51 KB)
??
__pycache__
??
_asgi_common.py
(4 KB)
??
_wsgi_common.py
(7.28 KB)
??
aiohttp.py
(19.28 KB)
??
aiomysql.py
(9.09 KB)
??
anthropic.py
(39 KB)
??
argv.py
(876 B)
??
ariadne.py
(5.7 KB)
??
arq.py
(9.23 KB)
??
asgi.py
(20.06 KB)
??
asyncio.py
(9.28 KB)
??
asyncpg.py
(9.68 KB)
??
atexit.py
(1.51 KB)
??
aws_lambda.py
(17.41 KB)
??
beam.py
(4.91 KB)
??
boto3.py
(6.2 KB)
??
bottle.py
(7.21 KB)
??
celery
??
chalice.py
(4.51 KB)
??
clickhouse_driver.py
(5.85 KB)
??
cloud_resource_context.py
(7.49 KB)
??
cohere.py
(10.44 KB)
??
dedupe.py
(1.86 KB)
??
django
??
dramatiq.py
(8.02 KB)
??
excepthook.py
(2.25 KB)
??
executing.py
(1.93 KB)
??
falcon.py
(9.04 KB)
??
fastapi.py
(5.28 KB)
??
flask.py
(8.27 KB)
??
gcp.py
(10.57 KB)
??
gnu_backtrace.py
(2.72 KB)
??
google_genai
??
gql.py
(4.93 KB)
??
graphene.py
(5.71 KB)
??
grpc
??
httpx.py
(9.79 KB)
??
httpx2.py
(9.8 KB)
??
huey.py
(8.19 KB)
??
huggingface_hub.py
(15.28 KB)
??
langchain.py
(48.31 KB)
??
langgraph.py
(18.13 KB)
??
launchdarkly.py
(1.87 KB)
??
litellm.py
(13.03 KB)
??
litestar.py
(11.46 KB)
??
logging.py
(15.69 KB)
??
loguru.py
(6.35 KB)
??
mcp.py
(23.12 KB)
??
modules.py
(787 B)
??
openai.py
(53.38 KB)
??
openai_agents
??
openfeature.py
(1.08 KB)
??
opentelemetry
??
otlp.py
(7.99 KB)
??
pure_eval.py
(4.41 KB)
??
pydantic_ai
??
pymongo.py
(8.21 KB)
??
pyramid.py
(7.42 KB)
??
pyreqwest.py
(6.82 KB)
??
quart.py
(7.32 KB)
??
ray.py
(5.75 KB)
??
redis
??
rq.py
(7.81 KB)
??
rust_tracing.py
(9.44 KB)
??
sanic.py
(15.25 KB)
??
serverless.py
(1.58 KB)
??
socket.py
(5.02 KB)
??
spark
??
sqlalchemy.py
(5.24 KB)
??
starlette.py
(27.93 KB)
??
starlite.py
(11.04 KB)
??
statsig.py
(1.19 KB)
??
stdlib.py
(14.01 KB)
??
strawberry.py
(17.39 KB)
??
sys_exit.py
(2.35 KB)
??
threading.py
(6.88 KB)
??
tornado.py
(10.79 KB)
??
trytond.py
(1.67 KB)
??
typer.py
(1.72 KB)
??
unleash.py
(1.02 KB)
??
unraisablehook.py
(1.65 KB)
??
wsgi.py
(15.03 KB)
Editing: huey.py
import sys from datetime import datetime from typing import TYPE_CHECKING import sentry_sdk from sentry_sdk.api import continue_trace, get_baggage, get_traceparent from sentry_sdk.consts import OP, SPANSTATUS from sentry_sdk.integrations import DidNotEnable, Integration from sentry_sdk.scope import should_send_default_pii from sentry_sdk.traces import SegmentSource, SpanStatus, StreamedSpan from sentry_sdk.tracing import ( BAGGAGE_HEADER_NAME, SENTRY_TRACE_HEADER_NAME, TransactionSource, ) from sentry_sdk.tracing_utils import has_span_streaming_enabled from sentry_sdk.utils import ( SENSITIVE_DATA_SUBSTITUTE, _register_control_flow_exception, capture_internal_exceptions, ensure_integration_enabled, event_from_exception, reraise, ) if TYPE_CHECKING: from typing import Any, Callable, Optional, TypeVar, Union from sentry_sdk._types import Event, EventProcessor, Hint from sentry_sdk.utils import ExcInfo F = TypeVar("F", bound=Callable[..., Any]) try: from huey.api import Huey, PeriodicTask, Result, ResultGroup, Task from huey.exceptions import CancelExecution, RetryTask, TaskLockedException except ImportError: raise DidNotEnable("Huey is not installed") try: from huey.api import chord as HueyChord from huey.api import group as HueyGroup except ImportError: HueyChord = None HueyGroup = None HUEY_CONTROL_FLOW_EXCEPTIONS = (CancelExecution, RetryTask, TaskLockedException) class HueyIntegration(Integration): identifier = "huey" origin = f"auto.queue.{identifier}" @staticmethod def setup_once() -> None: patch_enqueue() patch_execute() _register_control_flow_exception( [CancelExecution, RetryTask, TaskLockedException] ) def patch_enqueue() -> None: old_enqueue = Huey.enqueue @ensure_integration_enabled(HueyIntegration, old_enqueue) def _sentry_enqueue( self: "Huey", item: "Any" ) -> "Optional[Union[Result, ResultGroup]]": if HueyChord is not None and isinstance(item, HueyChord): span_name = "Huey Chord" elif HueyGroup is not None and isinstance(item, HueyGroup): span_name = "Huey Task Group" else: span_name = item.name is_span_streaming_enabled = has_span_streaming_enabled( sentry_sdk.get_client().options ) span_ctx = None if is_span_streaming_enabled: span_ctx = sentry_sdk.traces.start_span( name=span_name, attributes={ "sentry.op": OP.QUEUE_SUBMIT_HUEY, "sentry.origin": HueyIntegration.origin, }, ) else: span_ctx = sentry_sdk.start_span( op=OP.QUEUE_SUBMIT_HUEY, name=span_name, origin=HueyIntegration.origin, ) no_headers_types = (PeriodicTask,) + tuple( t for t in [HueyGroup, HueyChord] if t is not None ) with span_ctx: if not isinstance(item, no_headers_types): # Attach trace propagation data to task kwargs. We do # not do this for periodic tasks, as these don't # really have an originating transaction. # Additionally, we do not do this for Huey groups or chords, as enqueue will # recursively call this method for each task within the list, resulting # in the trace propagation data being attached to each task individually # (which we want) item.kwargs["sentry_headers"] = { BAGGAGE_HEADER_NAME: get_baggage(), SENTRY_TRACE_HEADER_NAME: get_traceparent(), } return old_enqueue(self, item) Huey.enqueue = _sentry_enqueue def _make_event_processor(task: "Any") -> "EventProcessor": def event_processor(event: "Event", hint: "Hint") -> "Optional[Event]": with capture_internal_exceptions(): tags = event.setdefault("tags", {}) tags["huey_task_id"] = task.id tags["huey_task_retry"] = task.default_retries > task.retries extra = event.setdefault("extra", {}) extra["huey-job"] = { "task": task.name, "args": ( task.args if should_send_default_pii() else SENSITIVE_DATA_SUBSTITUTE ), "kwargs": ( task.kwargs if should_send_default_pii() else SENSITIVE_DATA_SUBSTITUTE ), "retry": (task.default_retries or 0) - task.retries, } return event return event_processor def _capture_exception(exc_info: "ExcInfo") -> None: scope = sentry_sdk.get_current_scope() is_span_streaming_enabled = has_span_streaming_enabled( sentry_sdk.get_client().options ) if exc_info[0] in HUEY_CONTROL_FLOW_EXCEPTIONS: if not is_span_streaming_enabled: scope.transaction.set_status(SPANSTATUS.ABORTED) elif type(scope._span) is StreamedSpan: scope._span._segment.status = SpanStatus.OK return if not is_span_streaming_enabled: scope.transaction.set_status(SPANSTATUS.INTERNAL_ERROR) elif type(scope._span) is StreamedSpan: scope._span._segment.status = SpanStatus.ERROR event, hint = event_from_exception( exc_info, client_options=sentry_sdk.get_client().options, mechanism={"type": HueyIntegration.identifier, "handled": False}, ) scope.capture_event(event, hint=hint) def _wrap_task_execute(func: "F") -> "F": @ensure_integration_enabled(HueyIntegration, func) def _sentry_execute(*args: "Any", **kwargs: "Any") -> "Any": try: result = func(*args, **kwargs) except Exception: exc_info = sys.exc_info() _capture_exception(exc_info) reraise(*exc_info) return result return _sentry_execute # type: ignore def patch_execute() -> None: old_execute = Huey._execute @ensure_integration_enabled(HueyIntegration, old_execute) def _sentry_execute( self: "Huey", task: "Task", timestamp: "Optional[datetime]" = None ) -> "Any": with sentry_sdk.isolation_scope() as scope: with capture_internal_exceptions(): scope._name = "huey" scope.clear_breadcrumbs() scope.add_event_processor(_make_event_processor(task)) sentry_headers = task.kwargs.pop("sentry_headers", None) is_span_streaming_enabled = has_span_streaming_enabled( sentry_sdk.get_client().options ) if is_span_streaming_enabled: headers = sentry_headers or {} sentry_sdk.traces.continue_trace(headers) span_ctx = sentry_sdk.traces.start_span( name=task.name, attributes={ "sentry.op": OP.QUEUE_TASK_HUEY, "sentry.origin": HueyIntegration.origin, "sentry.span.source": SegmentSource.TASK, "messaging.message.id": task.id, "messaging.message.system": "huey", "messaging.message.retry.count": (task.default_retries or 0) - task.retries, }, parent_span=None, ) else: transaction = continue_trace( sentry_headers or {}, name=task.name, op=OP.QUEUE_TASK_HUEY, source=TransactionSource.TASK, origin=HueyIntegration.origin, ) transaction.set_status(SPANSTATUS.OK) span_ctx = sentry_sdk.start_transaction(transaction) if not getattr(task, "_sentry_is_patched", False): task.execute = _wrap_task_execute(task.execute) task._sentry_is_patched = True with span_ctx: return old_execute(self, task, timestamp) Huey._execute = _sentry_execute
Upload File
Create Folder