mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-03-26 18:22:55 -07:00
By passing all of the arguments to the base class and overriding the __str__ method when we want a different "human readable" message that isn't just printing the list of arguments, we can ensure that all custom error classes have a reasonable __repr__ implementation. In the case of ExecuteError, the pseudo-field that isn't actually correlated to an input argument can be re-imagined as a read-only property; this forces consistency in the class and makes the repr output more obviously correct. Signed-off-by: John Snow <jsnow@redhat.com> cherry picked from commit python-qemu-qmp@afdb7893f3b34212da4259b7202973f9a8cb85b3 Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
54 lines
1.7 KiB
Python
54 lines
1.7 KiB
Python
"""
|
|
QMP Error Classes
|
|
|
|
This package seeks to provide semantic error classes that are intended
|
|
to be used directly by clients when they would like to handle particular
|
|
semantic failures (e.g. "failed to connect") without needing to know the
|
|
enumeration of possible reasons for that failure.
|
|
|
|
QMPError serves as the ancestor for all exceptions raised by this
|
|
package, and is suitable for use in handling semantic errors from this
|
|
library. In most cases, individual public methods will attempt to catch
|
|
and re-encapsulate various exceptions to provide a semantic
|
|
error-handling interface.
|
|
|
|
.. admonition:: QMP Exception Hierarchy Reference
|
|
|
|
| `Exception`
|
|
| +-- `QMPError`
|
|
| +-- `ConnectError`
|
|
| +-- `StateError`
|
|
| +-- `ExecInterruptedError`
|
|
| +-- `ExecuteError`
|
|
| +-- `ListenerError`
|
|
| +-- `ProtocolError`
|
|
| +-- `DeserializationError`
|
|
| +-- `UnexpectedTypeError`
|
|
| +-- `ServerParseError`
|
|
| +-- `BadReplyError`
|
|
| +-- `GreetingError`
|
|
| +-- `NegotiationError`
|
|
"""
|
|
|
|
|
|
class QMPError(Exception):
|
|
"""Abstract error class for all errors originating from this package."""
|
|
|
|
|
|
class ProtocolError(QMPError):
|
|
"""
|
|
Abstract error class for protocol failures.
|
|
|
|
Semantically, these errors are generally the fault of either the
|
|
protocol server or as a result of a bug in this library.
|
|
|
|
:param error_message: Human-readable string describing the error.
|
|
"""
|
|
def __init__(self, error_message: str, *args: object):
|
|
super().__init__(error_message, *args)
|
|
#: Human-readable error message, without any prefix.
|
|
self.error_message: str = error_message
|
|
|
|
def __str__(self) -> str:
|
|
return self.error_message
|