Source code for wlauto.exceptions

#    Copyright 2013-2015 ARM Limited
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# See the License for the specific language governing permissions and
# limitations under the License.

from wlauto.utils.misc import get_traceback, TimeoutError  # NOQA pylint: disable=W0611

[docs]class WAError(Exception): """Base class for all Workload Automation exceptions.""" pass
[docs]class NotFoundError(WAError): """Raised when the specified item is not found.""" pass
[docs]class ValidationError(WAError): """Raised on failure to validate an extension.""" pass
[docs]class DeviceError(WAError): """General Device error.""" pass
[docs]class DeviceNotRespondingError(WAError): """The device is not responding.""" def __init__(self, device): super(DeviceNotRespondingError, self).__init__('Device {} is not responding.'.format(device))
[docs]class WorkloadError(WAError): """General Workload error.""" pass
[docs]class HostError(WAError): """Problem with the host on which WA is running.""" pass
[docs]class ModuleError(WAError): """ Problem with a module. .. note:: Modules for specific extension types should raise execeptions appropriate to that extension. E.g. a ``Device`` module should raise ``DeviceError``. This is intended for situation where a module is unsure (and/or doesn't care) what its owner is. """ pass
[docs]class InstrumentError(WAError): """General Instrument error.""" pass
[docs]class ResultProcessorError(WAError): """General ResultProcessor error.""" pass
[docs]class ResourceError(WAError): """General Resolver error.""" pass
[docs]class CommandError(WAError): """Raised by commands when they have encountered an error condition during execution.""" pass
[docs]class ToolError(WAError): """Raised by tools when they have encountered an error condition during execution.""" pass
[docs]class LoaderError(WAError): """Raised when there is an error loading an extension or an external resource. Apart form the usual message, the __init__ takes an exc_info parameter which should be the result of sys.exc_info() for the original exception (if any) that caused the error.""" def __init__(self, message, exc_info=None): super(LoaderError, self).__init__(message) self.exc_info = exc_info def __str__(self): if self.exc_info: orig = self.exc_info[1] orig_name = type(orig).__name__ if isinstance(orig, WAError): reason = 'because of:\n{}: {}'.format(orig_name, orig) else: reason = 'because of:\n{}\n{}: {}'.format(get_traceback(self.exc_info), orig_name, orig) return '\n'.join([self.message, reason]) else: return self.message
[docs]class ConfigError(WAError): """Raised when configuration provided is invalid. This error suggests that the user should modify their config and try again.""" pass
[docs]class WorkerThreadError(WAError): """ This should get raised in the main thread if a non-WAError-derived exception occurs on a worker/background thread. If a WAError-derived exception is raised in the worker, then it that exception should be re-raised on the main thread directly -- the main point of this is to preserve the backtrace in the output, and backtrace doesn't get output for WAErrors. """ def __init__(self, thread, exc_info): self.thread = thread self.exc_info = exc_info orig = self.exc_info[1] orig_name = type(orig).__name__ message = 'Exception of type {} occured on thread {}:\n'.format(orig_name, thread) message += '{}\n{}: {}'.format(get_traceback(self.exc_info), orig_name, orig) super(WorkerThreadError, self).__init__(message)