Coverage for backend/core/exceptions.py: 71%
17 statements
« prev ^ index » next coverage.py v7.10.7, created at 2025-11-06 23:27 +0000
« prev ^ index » next coverage.py v7.10.7, created at 2025-11-06 23:27 +0000
1import traceback
2from opentelemetry import trace
3from opentelemetry.trace import StatusCode, Status
4from rest_framework.views import exception_handler
6class DetailedException(Exception):
7 def __init__(self, inner_exception: Exception, source: str):
8 inner_exception_message = str(inner_exception)
9 super().__init__(inner_exception_message)
11 self.message = inner_exception_message
12 self.traceback = traceback.format_exc()
13 self.source = source
16def otel_trace_exception_handler(exc, context):
17 """
18 Custom exception handler that records exceptions in the active
19 OpenTelemetry trace span.
20 """
22 # Call REST framework's default exception handler first,
23 # to get the standard error response.
24 response = exception_handler(exc, context)
26 # Record exception in current trace span
27 current_span = trace.get_current_span()
28 current_span.record_exception(exc)
29 current_span.set_status(Status(StatusCode.ERROR, str(exc)))
31 return response