File tree 3 files changed +36
-2
lines changed 3 files changed +36
-2
lines changed Original file line number Diff line number Diff line change 8
8
import logging
9
9
import queue
10
10
import threading
11
- import traceback
12
11
import os
13
12
import sys
14
13
22
21
from . import constants
23
22
24
23
from .logging import error_logger , logger
24
+ from .tracing import marshall_exception_trace
25
25
26
26
27
27
class DispatcherMeta (type ):
@@ -188,7 +188,7 @@ def _serialize_exception(self, exc):
188
188
f'Could not serialize original exception message.' )
189
189
190
190
try :
191
- stack_trace = '' . join ( traceback . format_tb ( exc . __traceback__ ) )
191
+ stack_trace = marshall_exception_trace ( exc )
192
192
except Exception :
193
193
stack_trace = ''
194
194
Original file line number Diff line number Diff line change
1
+ from typing import List
2
+ import traceback
3
+
4
+
5
+ def marshall_exception_trace (exc : Exception ) -> str :
6
+ stack_summary : traceback .StackSummary = traceback .extract_tb (
7
+ exc .__traceback__ )
8
+ if isinstance (exc , ModuleNotFoundError ):
9
+ stack_summary = _marshall_module_not_found_error (stack_summary )
10
+ return '' .join (stack_summary .format ())
11
+
12
+
13
+ def _marshall_module_not_found_error (
14
+ tbss : traceback .StackSummary
15
+ ) -> traceback .StackSummary :
16
+ tbss = _remove_frame_from_stack (tbss , '<frozen importlib._bootstrap>' )
17
+ tbss = _remove_frame_from_stack (
18
+ tbss , '<frozen importlib._bootstrap_external>' )
19
+ return tbss
20
+
21
+
22
+ def _remove_frame_from_stack (
23
+ tbss : traceback .StackSummary ,
24
+ framename : str
25
+ ) -> traceback .StackSummary :
26
+ filtered_stack_list : List [traceback .FrameSummary ] = list (
27
+ filter (lambda frame : getattr (frame , 'filename' ) != framename , tbss ))
28
+ filtered_stack : traceback .StackSummary = traceback .StackSummary .from_list (
29
+ filtered_stack_list )
30
+ return filtered_stack
Original file line number Diff line number Diff line change @@ -134,6 +134,10 @@ async def test_load_broken__import_error(self):
134
134
135
135
self .assertIn ('ImportError' ,
136
136
r .response .result .exception .message )
137
+ self .assertNotIn ('<frozen importlib._bootstrap>' ,
138
+ r .response .result .exception .message )
139
+ self .assertNotIn ('<frozen importlib._bootstrap_external>' ,
140
+ r .response .result .exception .message )
137
141
138
142
async def test_load_broken__inout_param (self ):
139
143
async with testutils .start_mockhost (
You can’t perform that action at this time.
0 commit comments