Skip to content

Commit 5dc055b

Browse files
committed
Simplify friendly traceback calling code
1 parent cbca6bf commit 5dc055b

File tree

1 file changed

+11
-46
lines changed

1 file changed

+11
-46
lines changed

backend/main/workers/tracebacks.py

Lines changed: 11 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,16 @@
3030
log = logging.getLogger(__name__)
3131

3232

33-
def get_friendly_object(e):
33+
def friendly_message(e, double_newline: bool):
3434
try:
3535
fr = FriendlyTraceback(type(e), e, e.__traceback__)
36-
return fr
36+
fr.assign_generic()
37+
fr.assign_cause()
38+
39+
return fr.info["generic"] + "\n" + double_newline * "\n" + fr.info.get("cause", "")
3740
except (Exception, SystemExit):
38-
log.exception("Failed to build FriendlyTraceback object")
41+
log.exception("Failed to build friendly message")
42+
return ""
3943

4044

4145
def didyoumean_suggestions(e) -> List[str]:
@@ -48,44 +52,8 @@ def didyoumean_suggestions(e) -> List[str]:
4852
return []
4953

5054

51-
def friendly_generic(fr: FriendlyTraceback):
52-
try:
53-
fr.assign_generic()
54-
return fr.info["generic"]
55-
except Exception:
56-
log.exception("Failed to get generic friendly explanation")
57-
return ""
58-
59-
60-
def friendly_syntax_cause(fr: FriendlyTraceback):
61-
try:
62-
fr.set_cause_syntax()
63-
return fr.info["cause"]
64-
# return _friendly_cause(e, lambda info: analyze_syntax.set_cause_syntax(type(e), e))
65-
except Exception:
66-
log.exception("Failed to get syntax cause of exception")
67-
68-
69-
def _friendly_cause(fr: FriendlyTraceback):
70-
try:
71-
cause = str()
72-
fr.assign_cause()
73-
if "cause" in fr.info:
74-
cause = fr.info["cause"]
75-
except Exception:
76-
log.exception("Failed to get likely cause of exception")
77-
return ""
78-
else:
79-
return cause
80-
81-
82-
def friendly_runtime_cause(fr):
83-
return _friendly_cause(fr)
84-
85-
8655
def print_friendly_syntax_error(e):
8756
lines = iter(traceback.format_exception(*sys.exc_info()))
88-
fr = get_friendly_object(e)
8957
for line in lines:
9058
if line.strip().startswith('File "my_program.py"'):
9159
break
@@ -94,11 +62,12 @@ def print_friendly_syntax_error(e):
9462
{''.join(lines).rstrip()}
9563
at line {e.lineno}
9664
97-
{friendly_generic(fr)}
98-
{friendly_syntax_cause(fr)}
65+
{friendly_message(e, double_newline=False)}
9966
""",
10067
file=sys.stderr,
10168
)
69+
70+
10271
class TracebackSerializer:
10372
def format_exception(self, e) -> List[dict]:
10473
if e.__cause__ is not None:
@@ -109,8 +78,6 @@ def format_exception(self, e) -> List[dict]:
10978
result[-1]["tail"] = traceback._context_message
11079
else:
11180
result = []
112-
# create FriendlyTraceback object
113-
fr = get_friendly_object(e)
11481

11582
result.append(
11683
dict(
@@ -121,9 +88,7 @@ def format_exception(self, e) -> List[dict]:
12188
),
12289
tail="",
12390
didyoumean=didyoumean_suggestions(e),
124-
friendly=markdown(
125-
friendly_generic(fr) + "\n\n" + friendly_runtime_cause(fr)
126-
),
91+
friendly=markdown(friendly_message(e, double_newline=True)),
12792
)
12893
)
12994
return result

0 commit comments

Comments
 (0)