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: sqlalchemy.py
from sentry_sdk.consts import SPANDATA, SPANSTATUS from sentry_sdk.integrations import DidNotEnable, Integration, _check_minimum_version from sentry_sdk.traces import SpanStatus, StreamedSpan from sentry_sdk.tracing import Span from sentry_sdk.tracing_utils import ( add_query_source, record_sql_queries, ) from sentry_sdk.utils import ( capture_internal_exceptions, ensure_integration_enabled, parse_version, ) try: from sqlalchemy import __version__ as SQLALCHEMY_VERSION # type: ignore from sqlalchemy.engine import Engine # type: ignore from sqlalchemy.event import listen # type: ignore except ImportError: raise DidNotEnable("SQLAlchemy not installed.") from typing import TYPE_CHECKING if TYPE_CHECKING: from typing import Any, ContextManager, Optional, Union class SqlalchemyIntegration(Integration): identifier = "sqlalchemy" origin = f"auto.db.{identifier}" @staticmethod def setup_once() -> None: version = parse_version(SQLALCHEMY_VERSION) _check_minimum_version(SqlalchemyIntegration, version) listen(Engine, "before_cursor_execute", _before_cursor_execute) listen(Engine, "after_cursor_execute", _after_cursor_execute) listen(Engine, "handle_error", _handle_error) @ensure_integration_enabled(SqlalchemyIntegration) def _before_cursor_execute( conn: "Any", cursor: "Any", statement: "Any", parameters: "Any", context: "Any", executemany: bool, *args: "Any", ) -> None: ctx_mgr = record_sql_queries( cursor, statement, parameters, paramstyle=context and context.dialect and context.dialect.paramstyle or None, executemany=executemany, span_origin=SqlalchemyIntegration.origin, ) context._sentry_sql_span_manager = ctx_mgr span = ctx_mgr.__enter__() if span is not None: _set_db_data(span, conn) context._sentry_sql_span = span @ensure_integration_enabled(SqlalchemyIntegration) def _after_cursor_execute( conn: "Any", cursor: "Any", statement: "Any", parameters: "Any", context: "Any", *args: "Any", ) -> None: ctx_mgr: "Optional[ContextManager[Any]]" = getattr( context, "_sentry_sql_span_manager", None ) # Record query source immediately before span is finished: accurate end timestamp and before the span is flushed. span: "Optional[Union[Span, StreamedSpan]]" = getattr( context, "_sentry_sql_span", None ) if isinstance(span, StreamedSpan): with capture_internal_exceptions(): add_query_source(span) if ctx_mgr is not None: context._sentry_sql_span_manager = None ctx_mgr.__exit__(None, None, None) if isinstance(span, Span): with capture_internal_exceptions(): add_query_source(span) def _handle_error(context: "Any", *args: "Any") -> None: execution_context = context.execution_context if execution_context is None: return span: "Optional[Span]" = getattr(execution_context, "_sentry_sql_span", None) if span is not None: if isinstance(span, StreamedSpan): span.status = SpanStatus.ERROR else: span.set_status(SPANSTATUS.INTERNAL_ERROR) # _after_cursor_execute does not get called for crashing SQL stmts. Judging # from SQLAlchemy codebase it does seem like any error coming into this # handler is going to be fatal. ctx_mgr: "Optional[ContextManager[Any]]" = getattr( execution_context, "_sentry_sql_span_manager", None ) if ctx_mgr is not None: execution_context._sentry_sql_span_manager = None ctx_mgr.__exit__(None, None, None) # See: https://docs.sqlalchemy.org/en/20/dialects/index.html def _get_db_system(name: str) -> "Optional[str]": name = str(name) if "sqlite" in name: return "sqlite" if "postgres" in name: return "postgresql" if "mariadb" in name: return "mariadb" if "mysql" in name: return "mysql" if "oracle" in name: return "oracle" return None def _set_db_data(span: "Union[Span, StreamedSpan]", conn: "Any") -> None: db_system = _get_db_system(conn.engine.name) if isinstance(span, StreamedSpan): if db_system is not None: span.set_attribute(SPANDATA.DB_SYSTEM_NAME, db_system) else: if db_system is not None: span.set_data(SPANDATA.DB_SYSTEM, db_system) if isinstance(span, StreamedSpan): set_on_span = span.set_attribute else: set_on_span = span.set_data try: driver = conn.dialect.driver if driver: set_on_span(SPANDATA.DB_DRIVER_NAME, driver) except Exception: pass if conn.engine.url is None: return db_name = conn.engine.url.database if isinstance(span, StreamedSpan): if db_name is not None: span.set_attribute(SPANDATA.DB_NAMESPACE, db_name) else: if db_name is not None: span.set_data(SPANDATA.DB_NAME, db_name) server_address = conn.engine.url.host if server_address is not None: set_on_span(SPANDATA.SERVER_ADDRESS, server_address) server_port = conn.engine.url.port if server_port is not None: set_on_span(SPANDATA.SERVER_PORT, server_port)
Upload File
Create Folder