90 lines
2.5 KiB
Python
90 lines
2.5 KiB
Python
#
|
|
# Copyright (C) 2003-2007 Swedish Institute of Computer Science.
|
|
#
|
|
# Please refer to the file named LICENSE in the same directory as this
|
|
# file for licensing information.
|
|
#
|
|
|
|
# $Id: error.py,v 1.1 2007/08/21 14:41:01 fros4943 Exp $
|
|
|
|
import errno
|
|
import os
|
|
|
|
import chakana.debug
|
|
|
|
class Error(Exception):
|
|
def __init__(self, message):
|
|
Exception.__init__(self, message)
|
|
|
|
class CommandFailed(Error):
|
|
"""Exception thrown when a system command fails. The command string,
|
|
environment, working directory, output, and exit status are recorded.
|
|
The exit status is typically the value returned by os.system, but may
|
|
also be an exception, for example an error.Timeout object."""
|
|
|
|
def __init__(self, command, status, output):
|
|
Error.__init__(self, "Command failed with exit code " + str(status) +
|
|
": " + command + "\n" + "Output:\n" + output + "\ncwd: " +
|
|
os.getcwd() + "\n")
|
|
self._command = command
|
|
self._status = status
|
|
self._output = output
|
|
self._environ = os.environ.copy()
|
|
self._cwd = os.getcwd()
|
|
|
|
def command(self):
|
|
return self._command
|
|
|
|
def status(self):
|
|
return self._status
|
|
|
|
def output(self):
|
|
return self._output
|
|
|
|
def environ(self):
|
|
return self._environ
|
|
|
|
def cwd(self):
|
|
return self._cwd
|
|
|
|
class SanityCheckFailed(Error):
|
|
def __init__(self, message):
|
|
Error.__init__(self, "Sanity check failed: " + message)
|
|
|
|
class NoSuchProcess(OSError):
|
|
def __init__(self):
|
|
OSError.__init__(self, errno.ESRCH, "No such process")
|
|
|
|
class Timeout(Error):
|
|
def __init__(self, child, timeout):
|
|
Error.__init__(self, "Timeout (" + str(timeout) + " s) executing " +
|
|
child.getName())
|
|
self.child = child
|
|
self.timeout = timeout
|
|
|
|
class Discarded(Error):
|
|
def __init__(self):
|
|
Error.__init__(self, "Monitor was discarded")
|
|
|
|
class ChildException(Error):
|
|
def __init__(self, error, exc_info):
|
|
Error.__init__(self, "Exception in child thread: " + str(error) +
|
|
":\n" + chakana.debug.exceptionDump(exc_info))
|
|
self.error = error
|
|
self.exc_info = exc_info
|
|
|
|
class CoojaError(Error):
|
|
def __init__(self, response):
|
|
Error.__init__(self, "COOJA error: " +
|
|
response.documentElement.childNodes[0].nodeValue)
|
|
|
|
class CoojaExit(Error):
|
|
def __init__(self):
|
|
Error.__init__(self, "COOJA has exited")
|
|
|
|
def errnoError(errNum, fileName = None):
|
|
if isinstance(errNum, str):
|
|
return errnoError(getattr(errno, errNum), fileName)
|
|
return OSError(errNum, os.strerror(errNum), fileName)
|
|
|