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: boto3.py
from functools import partial from typing import TYPE_CHECKING import sentry_sdk from sentry_sdk.consts import OP, SPANDATA from sentry_sdk.integrations import DidNotEnable, Integration, _check_minimum_version from sentry_sdk.traces import StreamedSpan from sentry_sdk.tracing import Span from sentry_sdk.tracing_utils import has_span_streaming_enabled from sentry_sdk.utils import ( capture_internal_exceptions, parse_url, parse_version, ) if TYPE_CHECKING: from typing import Any, Dict, Optional, Type, Union from botocore.model import ServiceId try: from botocore import __version__ as BOTOCORE_VERSION from botocore.awsrequest import AWSRequest from botocore.client import BaseClient from botocore.response import StreamingBody except ImportError: raise DidNotEnable("botocore is not installed") class Boto3Integration(Integration): identifier = "boto3" origin = f"auto.http.{identifier}" @staticmethod def setup_once() -> None: version = parse_version(BOTOCORE_VERSION) _check_minimum_version(Boto3Integration, version, "botocore") orig_init = BaseClient.__init__ def sentry_patched_init( self: "BaseClient", *args: "Any", **kwargs: "Any" ) -> None: orig_init(self, *args, **kwargs) meta = self.meta service_id = meta.service_model.service_id meta.events.register( "request-created", partial(_sentry_request_created, service_id=service_id), ) meta.events.register("after-call", _sentry_after_call) meta.events.register("after-call-error", _sentry_after_call_error) BaseClient.__init__ = sentry_patched_init # type: ignore def _sentry_request_created( service_id: "ServiceId", request: "AWSRequest", operation_name: str, **kwargs: "Any" ) -> None: description = "aws.%s.%s" % (service_id.hyphenize(), operation_name) client = sentry_sdk.get_client() if client.get_integration(Boto3Integration) is None: return is_span_streaming_enabled = has_span_streaming_enabled(client.options) span: "Union[Span, StreamedSpan]" if is_span_streaming_enabled: span = sentry_sdk.traces.start_span( name=description, attributes={ "sentry.op": OP.HTTP_CLIENT, "sentry.origin": Boto3Integration.origin, SPANDATA.RPC_METHOD: f"{service_id}/{operation_name}", }, ) if request.url is not None: with capture_internal_exceptions(): parsed_url = parse_url(request.url, sanitize=False) span.set_attribute(SPANDATA.URL_FULL, parsed_url.url) span.set_attribute(SPANDATA.URL_QUERY, parsed_url.query) span.set_attribute(SPANDATA.URL_FRAGMENT, parsed_url.fragment) if request.method is not None: span.set_attribute(SPANDATA.HTTP_REQUEST_METHOD, request.method) else: span = sentry_sdk.start_span( op=OP.HTTP_CLIENT, name=description, origin=Boto3Integration.origin, ) if request.url is not None: with capture_internal_exceptions(): parsed_url = parse_url(request.url, sanitize=False) span.set_data("aws.request.url", parsed_url.url) span.set_data(SPANDATA.HTTP_QUERY, parsed_url.query) span.set_data(SPANDATA.HTTP_FRAGMENT, parsed_url.fragment) span.set_tag("aws.service_id", service_id.hyphenize()) span.set_tag("aws.operation_name", operation_name) if request.method is not None: span.set_data(SPANDATA.HTTP_METHOD, request.method) # We do it in order for subsequent http calls/retries be # attached to this span. span.__enter__() # request.context is an open-ended data-structure # where we can add anything useful in request life cycle. request.context["_sentrysdk_span"] = span def _sentry_after_call( context: "Dict[str, Any]", parsed: "Dict[str, Any]", **kwargs: "Any" ) -> None: span: "Optional[Union[Span, StreamedSpan]]" = context.pop("_sentrysdk_span", None) # Span could be absent if the integration is disabled. if span is None: return span.__exit__(None, None, None) body = parsed.get("Body") if not isinstance(body, StreamingBody): return streaming_span: "Union[Span, StreamedSpan]" if isinstance(span, StreamedSpan): streaming_span = sentry_sdk.traces.start_span( name=span.name, parent_span=span, attributes={ "sentry.op": OP.HTTP_CLIENT_STREAM, "sentry.origin": Boto3Integration.origin, }, ) else: streaming_span = span.start_child( op=OP.HTTP_CLIENT_STREAM, name=span.description, origin=Boto3Integration.origin, ) orig_read = body.read orig_close = body.close def sentry_streaming_body_read(*args: "Any", **kwargs: "Any") -> bytes: try: ret = orig_read(*args, **kwargs) if ret: return ret if isinstance(streaming_span, StreamedSpan): streaming_span.end() else: streaming_span.finish() return ret except Exception: if isinstance(streaming_span, StreamedSpan): streaming_span.end() else: streaming_span.finish() raise body.read = sentry_streaming_body_read # type: ignore def sentry_streaming_body_close(*args: "Any", **kwargs: "Any") -> None: if isinstance(streaming_span, StreamedSpan): streaming_span.end() else: streaming_span.finish() orig_close(*args, **kwargs) body.close = sentry_streaming_body_close # type: ignore def _sentry_after_call_error( context: "Dict[str, Any]", exception: "Type[BaseException]", **kwargs: "Any" ) -> None: span: "Optional[Union[Span, StreamedSpan]]" = context.pop("_sentrysdk_span", None) # Span could be absent if the integration is disabled. if span is None: return span.__exit__(type(exception), exception, None)
Upload File
Create Folder