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

1import traceback 

2from opentelemetry import trace 

3from opentelemetry.trace import StatusCode, Status 

4from rest_framework.views import exception_handler 

5 

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) 

10 

11 self.message = inner_exception_message 

12 self.traceback = traceback.format_exc() 

13 self.source = source 

14 

15 

16def otel_trace_exception_handler(exc, context): 

17 """ 

18 Custom exception handler that records exceptions in the active 

19 OpenTelemetry trace span. 

20 """ 

21 

22 # Call REST framework's default exception handler first, 

23 # to get the standard error response. 

24 response = exception_handler(exc, context) 

25 

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))) 

30 

31 return response