1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- #!/usr/bin/env python
- """errorable: Base class for classes with error state."""
- import logging
- import sys
- class Errorable:
- def __init__(self):
- self._update_ui_fn = lambda: None
- self._last_error = None
- self._err_children = []
- def reset_error(self):
- self.last_error = None
- def get_last_error(self):
- errors = ""
- for child in self._err_children:
- if child.last_error is not None:
- if len(errors) > 0:
- errors += ", %s" % child.last_error
- else:
- errors += "%s" % child.last_error
- if self._last_error is not None:
- if len(errors) > 0:
- errors += ", %s" % self._last_error
- else:
- errors += "%s" % self._last_error
- if len(errors) == 0:
- return None
- else:
- return errors
- def set_last_error(self, error):
- self._last_error = error
- if error is None:
- for child in self._err_children:
- child.last_error = None
- last_error = property(get_last_error, set_last_error)
- def _report_error(self, error=None):
- if error is None:
- error_str = 'General error'
- else:
- error_str = str(error)
- self.last_error = error_str
- # (1) Get exception info (if any)
- t = sys.exc_info()[0]
- v = sys.exc_info()[1]
- # (2) Get calling stack frame
- try:
- caller = str(sys._getframe(1).f_code.co_name)
- except:
- caller = "Unknown"
- logging.error("Error in %s" % caller)
- logging.error(str(error))
- if t is not None:
- logging.error("Underlying: %s, %s" % (t, v))
- self._update_ui_fn()
|