40 lines
1.1 KiB
Python
40 lines
1.1 KiB
Python
import sys
|
|
from textwrap import indent
|
|
|
|
|
|
def _get_error_message(exc):
|
|
if hasattr(exc, '__str__'):
|
|
message = str(exc)
|
|
return message[0].upper() + message[1:]
|
|
return '\n'.join(exc.args),
|
|
|
|
|
|
def print_error(exc, trace, context=None, method=None):
|
|
"""
|
|
Error handler. Whatever happens in a plugin or component, if it looks like an exception, taste like an exception
|
|
or somehow make me think it is an exception, I'll handle it.
|
|
|
|
:param exc: the culprit
|
|
:param trace: Hercule Poirot's logbook.
|
|
:return: to hell
|
|
"""
|
|
|
|
from colorama import Fore, Style
|
|
|
|
prefix = '{}{} | {}'.format(Fore.RED, Style.BRIGHT, Style.RESET_ALL)
|
|
|
|
print(
|
|
Style.BRIGHT,
|
|
Fore.RED,
|
|
type(exc).__name__,
|
|
' (in {}{})'.format(type(context).__name__, '.{}()'.format(method) if method else '') if context else '',
|
|
Style.RESET_ALL,
|
|
'\n',
|
|
indent(_get_error_message(exc), prefix + Style.BRIGHT),
|
|
Style.RESET_ALL,
|
|
sep='',
|
|
file=sys.stderr,
|
|
)
|
|
print(prefix, file=sys.stderr)
|
|
print(indent(trace, prefix, predicate=lambda line: True), file=sys.stderr)
|