Source code for pyrad.util.debug_utils
# Make sure that deprecation warnings get printed by default
import warnings as _warnings
import pdb
import traceback
import sys
import os
import inspect
_warnings.simplefilter("always", DeprecationWarning)
ORANGE = "\033[38;5;208m"
RESET = "\033[0m"
def orange_warning_format(message, category, filename, lineno, file=None, line=None):
print(f"{ORANGE}{category.__name__}:{message}\n{RESET}")
_warnings.showwarning = orange_warning_format
[docs]
def warn(message, use_debug=True):
_warnings.warn(message)
sys.stderr.flush()
if os.environ.get("PYRAD_DEBUG", False) and use_debug:
trace = traceback.format_stack()
idx_warn = (["warn" in line for line in trace]).index(True)
print(f"\033[91mException triggered from {trace[idx_warn]}\033[0m")
parent_frame = inspect.currentframe().f_back
pdb.Pdb().set_trace(parent_frame)
def custom_excepthook(exc_type, exc_value, exc_traceback):
# Print the exception
traceback.print_exception(exc_type, exc_value, exc_traceback)
# If the environment variable is set, enter debugger
if os.environ.get("PYRAD_DEBUG", False):
print("\nStarting pdb due to unhandled exception...\n")
pdb.post_mortem(exc_traceback)
[docs]
def enable_debug_on_error():
sys.excepthook = custom_excepthook