scripts/qemu.py: use a more consistent docstring style

Signed-off-by: Cleber Rosa <crosa@redhat.com>
Message-Id: <20181004161852.11673-10-crosa@redhat.com>
[ehabkost: reverted unintentional submodule update]
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
This commit is contained in:
Cleber Rosa 2018-10-04 12:18:51 -04:00 committed by Eduardo Habkost
parent cbcdf1a951
commit e301e65c97

View file

@ -59,9 +59,9 @@ class QEMUMachineAddDeviceError(QEMUMachineError):
""" """
class MonitorResponseError(qmp.qmp.QMPError): class MonitorResponseError(qmp.qmp.QMPError):
''' """
Represents erroneous QMP monitor reply Represents erroneous QMP monitor reply
''' """
def __init__(self, reply): def __init__(self, reply):
try: try:
desc = reply["error"]["desc"] desc = reply["error"]["desc"]
@ -72,14 +72,15 @@ class MonitorResponseError(qmp.qmp.QMPError):
class QEMUMachine(object): class QEMUMachine(object):
'''A QEMU VM """
A QEMU VM
Use this object as a context manager to ensure the QEMU process terminates:: Use this object as a context manager to ensure the QEMU process terminates::
with VM(binary) as vm: with VM(binary) as vm:
... ...
# vm is guaranteed to be shut down here # vm is guaranteed to be shut down here
''' """
def __init__(self, binary, args=None, wrapper=None, name=None, def __init__(self, binary, args=None, wrapper=None, name=None,
test_dir="/var/tmp", monitor_address=None, test_dir="/var/tmp", monitor_address=None,
@ -141,7 +142,9 @@ class QEMUMachine(object):
self._args.append(args) self._args.append(args)
def add_fd(self, fd, fdset, opaque, opts=''): def add_fd(self, fd, fdset, opaque, opts=''):
'''Pass a file descriptor to the VM''' """
Pass a file descriptor to the VM
"""
options = ['fd=%d' % fd, options = ['fd=%d' % fd,
'set=%d' % fdset, 'set=%d' % fdset,
'opaque=%s' % opaque] 'opaque=%s' % opaque]
@ -197,7 +200,9 @@ class QEMUMachine(object):
@staticmethod @staticmethod
def _remove_if_exists(path): def _remove_if_exists(path):
'''Remove file object at path if it exists''' """
Remove file object at path if it exists
"""
try: try:
os.remove(path) os.remove(path)
except OSError as exception: except OSError as exception:
@ -300,7 +305,9 @@ class QEMUMachine(object):
raise raise
def _launch(self): def _launch(self):
'''Launch the VM and establish a QMP connection''' """
Launch the VM and establish a QMP connection
"""
devnull = open(os.path.devnull, 'rb') devnull = open(os.path.devnull, 'rb')
self._pre_launch() self._pre_launch()
self._qemu_full_args = (self._wrapper + [self._binary] + self._qemu_full_args = (self._wrapper + [self._binary] +
@ -314,14 +321,18 @@ class QEMUMachine(object):
self._post_launch() self._post_launch()
def wait(self): def wait(self):
'''Wait for the VM to power off''' """
Wait for the VM to power off
"""
self._popen.wait() self._popen.wait()
self._qmp.close() self._qmp.close()
self._load_io_log() self._load_io_log()
self._post_shutdown() self._post_shutdown()
def shutdown(self): def shutdown(self):
'''Terminate the VM and clean up''' """
Terminate the VM and clean up
"""
if self.is_running(): if self.is_running():
try: try:
self._qmp.cmd('quit') self._qmp.cmd('quit')
@ -345,7 +356,9 @@ class QEMUMachine(object):
self._launched = False self._launched = False
def qmp(self, cmd, conv_keys=True, **args): def qmp(self, cmd, conv_keys=True, **args):
'''Invoke a QMP command and return the response dict''' """
Invoke a QMP command and return the response dict
"""
qmp_args = dict() qmp_args = dict()
for key, value in args.items(): for key, value in args.items():
if conv_keys: if conv_keys:
@ -356,11 +369,11 @@ class QEMUMachine(object):
return self._qmp.cmd(cmd, args=qmp_args) return self._qmp.cmd(cmd, args=qmp_args)
def command(self, cmd, conv_keys=True, **args): def command(self, cmd, conv_keys=True, **args):
''' """
Invoke a QMP command. Invoke a QMP command.
On success return the response dict. On success return the response dict.
On failure raise an exception. On failure raise an exception.
''' """
reply = self.qmp(cmd, conv_keys, **args) reply = self.qmp(cmd, conv_keys, **args)
if reply is None: if reply is None:
raise qmp.qmp.QMPError("Monitor is closed") raise qmp.qmp.QMPError("Monitor is closed")
@ -369,13 +382,17 @@ class QEMUMachine(object):
return reply["return"] return reply["return"]
def get_qmp_event(self, wait=False): def get_qmp_event(self, wait=False):
'''Poll for one queued QMP events and return it''' """
Poll for one queued QMP events and return it
"""
if len(self._events) > 0: if len(self._events) > 0:
return self._events.pop(0) return self._events.pop(0)
return self._qmp.pull_event(wait=wait) return self._qmp.pull_event(wait=wait)
def get_qmp_events(self, wait=False): def get_qmp_events(self, wait=False):
'''Poll for queued QMP events and return a list of dicts''' """
Poll for queued QMP events and return a list of dicts
"""
events = self._qmp.get_events(wait=wait) events = self._qmp.get_events(wait=wait)
events.extend(self._events) events.extend(self._events)
del self._events[:] del self._events[:]
@ -383,7 +400,7 @@ class QEMUMachine(object):
return events return events
def event_wait(self, name, timeout=60.0, match=None): def event_wait(self, name, timeout=60.0, match=None):
''' """
Wait for specified timeout on named event in QMP; optionally filter Wait for specified timeout on named event in QMP; optionally filter
results by match. results by match.
@ -391,7 +408,7 @@ class QEMUMachine(object):
branch processing on match's value None branch processing on match's value None
{"foo": {"bar": 1}} matches {"foo": None} {"foo": {"bar": 1}} matches {"foo": None}
{"foo": {"bar": 1}} does not matches {"foo": {"baz": None}} {"foo": {"bar": 1}} does not matches {"foo": {"baz": None}}
''' """
def event_match(event, match=None): def event_match(event, match=None):
if match is None: if match is None:
return True return True
@ -424,29 +441,29 @@ class QEMUMachine(object):
return None return None
def get_log(self): def get_log(self):
''' """
After self.shutdown or failed qemu execution, this returns the output After self.shutdown or failed qemu execution, this returns the output
of the qemu process. of the qemu process.
''' """
return self._iolog return self._iolog
def add_args(self, *args): def add_args(self, *args):
''' """
Adds to the list of extra arguments to be given to the QEMU binary Adds to the list of extra arguments to be given to the QEMU binary
''' """
self._args.extend(args) self._args.extend(args)
def set_machine(self, machine_type): def set_machine(self, machine_type):
''' """
Sets the machine type Sets the machine type
If set, the machine type will be added to the base arguments If set, the machine type will be added to the base arguments
of the resulting QEMU command line. of the resulting QEMU command line.
''' """
self._machine = machine_type self._machine = machine_type
def set_console(self, device_type=None): def set_console(self, device_type=None):
''' """
Sets the device type for a console device Sets the device type for a console device
If set, the console device and a backing character device will If set, the console device and a backing character device will
@ -464,7 +481,7 @@ class QEMUMachine(object):
@param device_type: the device type, such as "isa-serial" @param device_type: the device type, such as "isa-serial"
@raises: QEMUMachineAddDeviceError if the device type is not given @raises: QEMUMachineAddDeviceError if the device type is not given
and can not be determined. and can not be determined.
''' """
if device_type is None: if device_type is None:
if self._machine is None: if self._machine is None:
raise QEMUMachineAddDeviceError("Can not add a console device:" raise QEMUMachineAddDeviceError("Can not add a console device:"