summaryrefslogtreecommitdiffstats
path: root/python/qemu/machine.py
diff options
context:
space:
mode:
authorJohn Snow2020-10-07 01:58:06 +0200
committerJohn Snow2020-10-20 15:37:57 +0200
commitaad3f3bb6c8b63b33db30911748fe32928b7b4bd (patch)
tree8b05fc8b5e6fa38a88f7609ce3efa2c9daf4c36f /python/qemu/machine.py
parentpython/machine.py: fix _popen access (diff)
downloadqemu-aad3f3bb6c8b63b33db30911748fe32928b7b4bd.tar.gz
qemu-aad3f3bb6c8b63b33db30911748fe32928b7b4bd.tar.xz
qemu-aad3f3bb6c8b63b33db30911748fe32928b7b4bd.zip
python/qemu: make 'args' style arguments immutable
These arguments don't need to be mutable and aren't really used as such. Clarify their types as immutable and adjust code to match where necessary. In general, It's probably best not to accept a user-defined mutable object and store it as internal object state unless there's a strong justification for doing so. Instead, try to use generic types as input with empty tuples as the default, and coerce to list where necessary. Signed-off-by: John Snow <jsnow@redhat.com> Reviewed-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Message-id: 20201006235817.3280413-10-jsnow@redhat.com Signed-off-by: John Snow <jsnow@redhat.com>
Diffstat (limited to 'python/qemu/machine.py')
-rw-r--r--python/qemu/machine.py30
1 files changed, 17 insertions, 13 deletions
diff --git a/python/qemu/machine.py b/python/qemu/machine.py
index 4e762fcd52..e599cb7439 100644
--- a/python/qemu/machine.py
+++ b/python/qemu/machine.py
@@ -18,6 +18,7 @@ which provides facilities for managing the lifetime of a QEMU VM.
#
import errno
+from itertools import chain
import logging
import os
import shutil
@@ -30,6 +31,8 @@ from typing import (
Dict,
List,
Optional,
+ Sequence,
+ Tuple,
Type,
)
@@ -74,8 +77,12 @@ class QEMUMachine:
# vm is guaranteed to be shut down here
"""
- def __init__(self, binary, args=None, wrapper=None, name=None,
- test_dir="/var/tmp",
+ def __init__(self,
+ binary: str,
+ args: Sequence[str] = (),
+ wrapper: Sequence[str] = (),
+ name: Optional[str] = None,
+ test_dir: str = "/var/tmp",
monitor_address: Optional[SocketAddrT] = None,
socket_scm_helper=None, sock_dir=None,
drain_console=False, console_log=None):
@@ -97,14 +104,7 @@ class QEMUMachine:
# Direct user configuration
self._binary = binary
-
- if args is None:
- args = []
- # Copy mutable input: we will be modifying our copy
self._args = list(args)
-
- if wrapper is None:
- wrapper = []
self._wrapper = wrapper
self._name = name or "qemu-%d" % os.getpid()
@@ -136,7 +136,7 @@ class QEMUMachine:
self._iolog = None
self._qmp_set = True # Enable QMP monitor by default.
self._qmp_connection: Optional[qmp.QEMUMonitorProtocol] = None
- self._qemu_full_args = None
+ self._qemu_full_args: Tuple[str, ...] = ()
self._temp_dir = None
self._launched = False
self._machine = None
@@ -368,7 +368,7 @@ class QEMUMachine:
raise QEMUMachineError('VM already launched')
self._iolog = None
- self._qemu_full_args = None
+ self._qemu_full_args = ()
try:
self._launch()
self._launched = True
@@ -388,8 +388,12 @@ class QEMUMachine:
"""
devnull = open(os.path.devnull, 'rb')
self._pre_launch()
- self._qemu_full_args = (self._wrapper + [self._binary] +
- self._base_args + self._args)
+ self._qemu_full_args = tuple(
+ chain(self._wrapper,
+ [self._binary],
+ self._base_args,
+ self._args)
+ )
LOG.debug('VM launch command: %r', ' '.join(self._qemu_full_args))
self._popen = subprocess.Popen(self._qemu_full_args,
stdin=devnull,