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