|
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 |
|