Source code for libICEpost.src.base.Functions.runtimeWarning

#####################################################################
#                                  DOC                              #
#####################################################################

"""
@author: F. Ramognino       <federico.ramognino@polimi.it>
Last update:        12/06/2023

Functions for warnings and error messages.
"""

#####################################################################
#                               IMPORT                              #
#####################################################################

from functools import wraps
import sys
import traceback
import inspect

import colorama
colorama.init(autoreset=False)

from libICEpost import GLOBALS

[docs] class bcolors: HEADER = '\033[95m' OKBLUE = '\033[94m' OKCYAN = '\033[96m' OKGREEN = '\033[92m' WARNING = '\033[93m' FAIL = '\033[91m' ENDC = '\033[0m' BOLD = '\033[1m' UNDERLINE = '\033[4m'
[docs] def enf(msg, style): styles = \ { "header":bcolors.HEADER, "blue":bcolors.OKBLUE, "green":bcolors.OKGREEN, "cyan":bcolors.OKCYAN, "warning":bcolors.WARNING, "fail":bcolors.FAIL, "bold":bcolors.BOLD, "underline":bcolors.UNDERLINE } return styles[style] + msg + bcolors.ENDC
############################################################################# # MAIN FUNCTIONS # #############################################################################
[docs] def printStack(e=None): """ Print the current call-stack. If an error was raised, print the traceback with the error message. """ formatForWhere = " " + enf("At line","bold") + ": {:n} " + enf("in","bold") + " '{:s}' " + enf("calling","bold") + " '{:s}'" #print("printStack()") if not(e is None): Where = traceback.extract_tb(e.__traceback__) else: Where = traceback.extract_stack()[:-2] ii = 0 for stackLine in Where: print (enf(enf(str(ii) + ")","warning"),"bold") + formatForWhere.format(stackLine[1], stackLine[0], stackLine[-1])) ii += 1
#############################################################################
[docs] def baseRuntimeWarning(WarningMSG, Msg, verbosityLevel=1, stack=True): Where = traceback.extract_stack() if (verbosityLevel <= GLOBALS.__VERBOSITY_LEVEL__): tabbedMSG = "" for cc in Msg: tabbedMSG += cc if cc == "\n": tabbedMSG += " "*len(WarningMSG) print (WarningMSG + tabbedMSG) if stack: printStack() print ("")
#############################################################################
[docs] def runtimeWarning(Msg, verbosityLevel=1, stack=True): """ Print a runtime warning message (Msg) and the call-stack. """ baseRuntimeWarning(enf(enf("Runtime Warning: ", "warning"), "bold"), Msg, verbosityLevel, stack)
#############################################################################
[docs] def runtimeError(Msg, verbosityLevel=1, stack=True): """ Print a runtime error message (Msg) and the call-stack. """ baseRuntimeWarning(enf(enf("Runtime Error: ", "warning"), "bold"), Msg, verbosityLevel, stack)
############################################################################# #Decorator for printing helper
[docs] def helpOnFail(func): @wraps(func) def wrapper(*args, **kwargs): try: return func(*args, **kwargs) except Exception as e: e.add_note(f"help({func.__name__}):\n" + inspect.getdoc(func)) raise e return wrapper