Blame lib/dbtexmf/core/error.py

Packit 0f19cf
#
Packit 0f19cf
# Dblatex Error Handler wrapper providing:
Packit 0f19cf
# - The ErrorHandler class definition, that must be the parent of any actual
Packit 0f19cf
#   error handler.
Packit 0f19cf
# - A general API.
Packit 0f19cf
#
Packit Service f3de8e
from __future__ import print_function
Packit Service f3de8e
Packit 0f19cf
import sys
Packit 0f19cf
import traceback
Packit 0f19cf
Packit 0f19cf
class ErrorHandler(object):
Packit 0f19cf
    """
Packit 0f19cf
    Object in charge to handle any error occured during the dblatex
Packit 0f19cf
    transformation process. The first mandatory argument is the <object>
Packit 0f19cf
    that signaled the error.
Packit 0f19cf
    """
Packit 0f19cf
    def __init__(self):
Packit 0f19cf
        pass
Packit 0f19cf
Packit 0f19cf
    def signal(self, object, *args, **kwargs):
Packit 0f19cf
        failure_track("Unexpected error occured")
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
_current_handler = None
Packit 0f19cf
_dump_stack = False
Packit 0f19cf
Packit 0f19cf
Packit 0f19cf
#
Packit 0f19cf
# Dblatex Error Handler API
Packit 0f19cf
#
Packit 0f19cf
# In a complex use of the API, a locking mechanism (thread.lock) should
Packit 0f19cf
# be used. The current implementation assumes that setup is done before
Packit 0f19cf
# any get().
Packit 0f19cf
#
Packit 0f19cf
def get_errhandler():
Packit 0f19cf
    global _current_handler
Packit 0f19cf
    # If nothing set, use a default handler that does nothing
Packit 0f19cf
    if not(_current_handler):
Packit 0f19cf
        _current_handler = ErrorHandler()
Packit 0f19cf
    return _current_handler
Packit 0f19cf
Packit 0f19cf
def set_errhandler(handler):
Packit 0f19cf
    global _current_handler
Packit 0f19cf
    if not(isinstance(handler, ErrorHandler)):
Packit 0f19cf
        raise ValueError("%s is not an ErrorHandler" % handler)
Packit 0f19cf
    _current_handler = handler
Packit 0f19cf
Packit 0f19cf
def signal_error(*args, **kwargs):
Packit 0f19cf
    get_errhandler().signal(*args, **kwargs)
Packit 0f19cf
Packit 0f19cf
def failure_track(msg):
Packit 0f19cf
    global _dump_stack
Packit Service f3de8e
    print((msg), file=sys.stderr)
Packit 0f19cf
    if _dump_stack:
Packit 0f19cf
        traceback.print_exc()
Packit 0f19cf
Packit 0f19cf
def failed_exit(msg, rc=1):
Packit 0f19cf
    failure_track(msg)
Packit 0f19cf
    sys.exit(rc)
Packit 0f19cf
Packit 0f19cf
def dump_stack():
Packit 0f19cf
    global _dump_stack
Packit 0f19cf
    _dump_stack = True
Packit 0f19cf