Skip to content

Commit

Permalink
Merge pull request #59 from imnotjames/chore/optional-traceback
Browse files Browse the repository at this point in the history
chore: make traceback module optional
  • Loading branch information
FoamyGuy committed Jan 1, 2024
2 parents db3b03c + 8d69d54 commit 7469b5f
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 2 deletions.
9 changes: 7 additions & 2 deletions asyncio/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,12 @@
"""

from adafruit_ticks import ticks_ms as ticks, ticks_diff, ticks_add
import sys, select, traceback
import sys, select

try:
from traceback import print_exception
except:
from .traceback import print_exception

# Import TaskQueue and Task, preferring built-in C code over Python code
try:
Expand Down Expand Up @@ -380,7 +385,7 @@ def default_exception_handler(loop, context):
"""The default exception handler that is called."""

exc = context["exception"]
traceback.print_exception(None, exc, exc.__traceback__)
print_exception(None, exc, exc.__traceback__)

def call_exception_handler(context):
"""Call the current exception handler. The argument *context* is passed through
Expand Down
57 changes: 57 additions & 0 deletions asyncio/traceback.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# SPDX-FileCopyrightText: 2019-2020 Damien P. George
#
# SPDX-License-Identifier: MIT
#
# MicroPython uasyncio module
# MIT license; Copyright (c) 2019-2020 Damien P. George
"""
Fallback traceback module if the system traceback is missing.
"""

try:
from typing import List
except ImportError:
pass

import sys


def _print_traceback(traceback, limit=None, file=sys.stderr) -> List[str]:
if limit is None:
if hasattr(sys, "tracebacklimit"):
limit = sys.tracebacklimit

n = 0
while traceback is not None:
frame = traceback.tb_frame
line_number = traceback.tb_lineno
frame_code = frame.f_code
filename = frame_code.co_filename
name = frame_code.co_name
print(' File "%s", line %d, in %s' % (filename, line_number, name), file=file)
traceback = traceback.tb_next
n = n + 1
if limit is not None and n >= limit:
break


def print_exception(exception, value=None, traceback=None, limit=None, file=sys.stderr):
"""
Print exception information and stack trace to file.
"""
if traceback:
print("Traceback (most recent call last):", file=file)
_print_traceback(traceback, limit=limit, file=file)

if isinstance(exception, BaseException):
exception_type = type(exception).__name__
elif hasattr(exception, "__name__"):
exception_type = exception.__name__
else:
exception_type = type(value).__name__

valuestr = str(value)
if value is None or not valuestr:
print(exception_type, file=file)
else:
print("%s: %s" % (str(exception_type), valuestr), file=file)

0 comments on commit 7469b5f

Please sign in to comment.