Pull request

Patch 01/15 fixes the check-python-tox test.
 -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCAAdFiEE+ber27ys35W+dsvQfe+BBqr8OQ4FAmDdIfAACgkQfe+BBqr8
 OQ6GMA/8DSnn5Zre+/K3CISAi4NZXBsyWa6QnHeE4IPvHgjjGGd8XCGrAmJmnVT8
 kXuxwjNfWvLKaU7cy6EGWyWXptoRtHGWJSw/XwNypmx7fqdVuj6tsk5hjQYexziP
 7SmECD3hWvNnCaflD7P1pTDc7gCustXNL2a80wZWBHB92iT3w5X6BmPWXQrykqhm
 z5/NtT1hhQ6OdZkPXsZwyqSLBXVSkZ8zG+YLuS1VlzXkpmPkD1DjZS45O7+AeJ0U
 Uh3bEmFDB0IAE34EjCRouVmlqgYMc+MRc9OBrYBnuO8VEfwZlthfdjzhbsP91ZF1
 AKmYSJzs5wc8Y5iTTzlRXIOuCMiMn6ByI2zUUSoJ/vSfwMwBFotC+daaDaB2wYQk
 Ik9MhqhELer1SZdinyHHLNXENaLAy1Fycxs6cDpCVJ18EIKyfr/mqXQZ5k+8KrEv
 LsjcQXzlW2+uWxBxUT1nGUAXeYYL/IusKNca4Xn0FyP6MRP87aC/oCeHrjn/qYbz
 LEquYdo09gl/wAbW1b5iW9QUMwn9UUqaM/z5LyEwADkB4e8qlk63dZwSXzsqD0mg
 2nTYqP7X9K9ZRCgTxlNUCl4f8pDZgH7KFOPqMfY+M4WnRioDjRkIj8SN3gwXaBd9
 GLK7tQG/91hN6BIB+bcE/S/hZxSAXQzXlTQdKlHPeMpM0VFijvo=
 =5d/K
 -----END PGP SIGNATURE-----

Merge remote-tracking branch 'remotes/jsnow-gitlab/tags/python-pull-request' into staging

Pull request

Patch 01/15 fixes the check-python-tox test.

# gpg: Signature made Thu 01 Jul 2021 03:01:20 BST
# gpg:                using RSA key F9B7ABDBBCACDF95BE76CBD07DEF8106AAFC390E
# gpg: Good signature from "John Snow (John Huston) <jsnow@redhat.com>" [full]
# Primary key fingerprint: FAEB 9711 A12C F475 812F  18F2 88A9 064D 1835 61EB
#      Subkey fingerprint: F9B7 ABDB BCAC DF95 BE76  CBD0 7DEF 8106 AAFC 390E

* remotes/jsnow-gitlab/tags/python-pull-request:
  python: Fix broken ReST docstrings
  python: remove auto-generated pyproject.toml file
  python: Update help text on 'make clean', 'make distclean'
  python: Update help text on 'make check', 'make develop'
  python: add 'make check-dev' invocation
  python: only check qemu/ subdir with flake8
  python: Fix .PHONY Make specifiers
  python: update help text for check-tox
  python: rename 'venv-check' target to 'check-pipenv'
  python: Add no-install usage instructions
  python: README.rst touchups
  python: Re-lock pipenv at *oldest* supported versions
  python: Remove global pylint suppressions
  python: expose typing information via PEP 561
  python/qom: Do not use 'err' name at module scope

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
Peter Maydell 2021-07-01 10:08:05 +01:00
commit dd62bf14b7
17 changed files with 188 additions and 105 deletions

View File

@ -30,7 +30,7 @@ check-python-pipenv:
stage: test
image: $CI_REGISTRY_IMAGE/qemu/python:latest
script:
- make -C python venv-check
- make -C python check-pipenv
variables:
GIT_DEPTH: 1
needs:

1
python/.gitignore vendored
View File

@ -14,3 +14,4 @@ qemu.egg-info/
# virtual environments (pipenv et al)
.venv/
.tox/
.dev-venv/

View File

@ -1,48 +1,99 @@
.PHONY: help venv venv-check check clean distclean develop
QEMU_VENV_DIR=.dev-venv
.PHONY: help
help:
@echo "python packaging help:"
@echo ""
@echo "make venv: Create pipenv's virtual environment."
@echo " NOTE: Requires Python 3.6 and pipenv."
@echo " Will download packages from PyPI."
@echo " Hint: (On Fedora): 'sudo dnf install python36 pipenv'"
@echo "make check-pipenv:"
@echo " Run tests in pipenv's virtual environment."
@echo " These tests use the oldest dependencies."
@echo " Requires: Python 3.6 and pipenv."
@echo " Hint (Fedora): 'sudo dnf install python3.6 pipenv'"
@echo ""
@echo "make venv-check: run linters using pipenv's virtual environment."
@echo " Hint: If you don't know which test to run, run this one!"
@echo "make check-tox:"
@echo " Run tests against multiple python versions."
@echo " These tests use the newest dependencies."
@echo " Requires: Python 3.6 - 3.10, and tox."
@echo " Hint (Fedora): 'sudo dnf install python3-tox python3.10'"
@echo ""
@echo "make develop: Install deps for 'make check', and"
@echo " the qemu libs in editable/development mode."
@echo "make check-dev:"
@echo " Run tests in a venv against your default python3 version."
@echo " These tests use the newest dependencies."
@echo " Requires: Python 3.x"
@echo ""
@echo "make check: run linters using the current environment."
@echo "make check:"
@echo " Run tests in your *current environment*."
@echo " Performs no environment setup of any kind."
@echo ""
@echo "make check-tox: run linters using multiple python versions."
@echo "make develop:"
@echo " Install deps needed for for 'make check',"
@echo " and install the qemu package in editable mode."
@echo " (Can be used in or outside of a venv.)"
@echo ""
@echo "make clean: remove package build output."
@echo "make pipenv"
@echo " Creates pipenv's virtual environment (.venv)"
@echo ""
@echo "make distclean: remove venv files, qemu package forwarder,"
@echo " built distribution files, and everything"
@echo " from 'make clean'."
@echo "make dev-venv"
@echo " Creates a simple venv for check-dev. ($(QEMU_VENV_DIR))"
@echo ""
@echo "make clean:"
@echo " Remove package build output."
@echo ""
@echo "make distclean:"
@echo " remove pipenv/venv files, qemu package forwarder,"
@echo " built distribution files, and everything from 'make clean'."
@echo ""
@echo -e "Have a nice day ^_^\n"
venv: .venv
.PHONY: pipenv
pipenv: .venv
.venv: Pipfile.lock
@PIPENV_VENV_IN_PROJECT=1 pipenv sync --dev --keep-outdated
rm -f pyproject.toml
@touch .venv
venv-check: venv
.PHONY: check-pipenv
check-pipenv: pipenv
@pipenv run make check
develop:
pip3 install -e .[devel]
.PHONY: dev-venv
dev-venv: $(QEMU_VENV_DIR) $(QEMU_VENV_DIR)/bin/activate
$(QEMU_VENV_DIR) $(QEMU_VENV_DIR)/bin/activate: setup.cfg
@echo "VENV $(QEMU_VENV_DIR)"
@python3 -m venv $(QEMU_VENV_DIR)
@( \
echo "ACTIVATE $(QEMU_VENV_DIR)"; \
. $(QEMU_VENV_DIR)/bin/activate; \
echo "INSTALL qemu[devel] $(QEMU_VENV_DIR)"; \
make develop 1>/dev/null; \
)
@touch $(QEMU_VENV_DIR)
.PHONY: check-dev
check-dev: dev-venv
@( \
echo "ACTIVATE $(QEMU_VENV_DIR)"; \
. $(QEMU_VENV_DIR)/bin/activate; \
make check; \
)
.PHONY: develop
develop:
pip3 install --disable-pip-version-check -e .[devel]
.PHONY: check
check:
@avocado --config avocado.cfg run tests/
.PHONY: check-tox
check-tox:
@tox
.PHONY: clean
clean:
python3 setup.py clean --all
rm -f pyproject.toml
.PHONY: distclean
distclean: clean
rm -rf qemu.egg-info/ .venv/ .tox/ dist/
rm -rf qemu.egg-info/ .venv/ .tox/ $(QEMU_VENV_DIR) dist/

113
python/Pipfile.lock generated
View File

@ -31,19 +31,19 @@
},
"astroid": {
"hashes": [
"sha256:4db03ab5fc3340cf619dbc25e42c2cc3755154ce6009469766d7143d1fc2ee4e",
"sha256:8a398dfce302c13f14bab13e2b14fe385d32b73f4e4853b9bdfb64598baa1975"
"sha256:09bdb456e02564731f8b5957cdd0c98a7f01d2db5e90eb1d794c353c28bfd705",
"sha256:6a8a51f64dae307f6e0c9db752b66a7951e282389d8362cc1d39a56f3feeb31d"
],
"markers": "python_version ~= '3.6'",
"version": "==2.5.6"
"version": "==2.6.0"
},
"avocado-framework": {
"hashes": [
"sha256:42aa7962df98d6b78d4efd9afa2177226dc630f3d83a2a7d5baf7a0a7da7fa1b",
"sha256:d96ae343abf890e1ef3b3a6af5ce49e35f6bded0715770c4acb325bca555c515"
"sha256:3fca7226d7d164f124af8a741e7fa658ff4345a0738ddc32907631fd688b38ed",
"sha256:48ac254c0ae2ef0c0ceeb38e3d3df0388718eda8f48b3ab55b30b252839f42b1"
],
"markers": "python_version >= '3.6'",
"version": "==88.1"
"index": "pypi",
"version": "==87.0"
},
"distlib": {
"hashes": [
@ -61,25 +61,27 @@
},
"flake8": {
"hashes": [
"sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b",
"sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907"
"sha256:6a35f5b8761f45c5513e3405f110a86bea57982c3b75b766ce7b65217abe1670",
"sha256:c01f8a3963b3571a8e6bd7a4063359aff90749e160778e03817cd9b71c9e07d2"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'",
"version": "==3.9.2"
"index": "pypi",
"version": "==3.6.0"
},
"fusepy": {
"hashes": [
"sha256:72ff783ec2f43de3ab394e3f7457605bf04c8cf288a2f4068b4cde141d4ee6bd"
"sha256:10f5c7f5414241bffecdc333c4d3a725f1d6605cae6b4eaf86a838ff49cdaf6c",
"sha256:a9f3a3699080ddcf0919fd1eb2cf743e1f5859ca54c2018632f939bdfac269ee"
],
"version": "==3.0.1"
"index": "pypi",
"version": "==2.0.4"
},
"importlib-metadata": {
"hashes": [
"sha256:8c501196e49fb9df5df43833bdb1e4328f64847763ec8a50703148b73784d581",
"sha256:d7eb1dea6d6a6086f8be21784cc9e3bcfa55872b52309bc5fad53a8ea444465d"
"sha256:90bb658cdbbf6d1735b6341ce708fc7024a3e14e99ffdc5783edea9f9b077f83",
"sha256:dc15b2969b4ce36305c51eebe62d418ac7791e9a157911d58bfb1f9ccd8e2070"
],
"markers": "python_version < '3.8'",
"version": "==4.0.1"
"version": "==1.7.0"
},
"importlib-resources": {
"hashes": [
@ -91,11 +93,11 @@
},
"isort": {
"hashes": [
"sha256:0a943902919f65c5684ac4e0154b1ad4fac6dcaa5d9f3426b732f1c8b5419be6",
"sha256:2bb1680aad211e3c9944dbce1d4ba09a989f04e238296c87fe2139faa26d655d"
"sha256:408e4d75d84f51b64d0824894afee44469eba34a4caee621dc53799f80d71ccc",
"sha256:64022dea6a06badfa09b300b4dfe8ba968114a737919e8ed50aea1c288f078aa"
],
"markers": "python_version >= '3.6' and python_version < '4.0'",
"version": "==5.8.0"
"index": "pypi",
"version": "==5.1.2"
},
"lazy-object-proxy": {
"hashes": [
@ -134,31 +136,23 @@
},
"mypy": {
"hashes": [
"sha256:0d0a87c0e7e3a9becdfbe936c981d32e5ee0ccda3e0f07e1ef2c3d1a817cf73e",
"sha256:25adde9b862f8f9aac9d2d11971f226bd4c8fbaa89fb76bdadb267ef22d10064",
"sha256:28fb5479c494b1bab244620685e2eb3c3f988d71fd5d64cc753195e8ed53df7c",
"sha256:2f9b3407c58347a452fc0736861593e105139b905cca7d097e413453a1d650b4",
"sha256:33f159443db0829d16f0a8d83d94df3109bb6dd801975fe86bacb9bf71628e97",
"sha256:3f2aca7f68580dc2508289c729bd49ee929a436208d2b2b6aab15745a70a57df",
"sha256:499c798053cdebcaa916eef8cd733e5584b5909f789de856b482cd7d069bdad8",
"sha256:4eec37370483331d13514c3f55f446fc5248d6373e7029a29ecb7b7494851e7a",
"sha256:552a815579aa1e995f39fd05dde6cd378e191b063f031f2acfe73ce9fb7f9e56",
"sha256:5873888fff1c7cf5b71efbe80e0e73153fe9212fafdf8e44adfe4c20ec9f82d7",
"sha256:61a3d5b97955422964be6b3baf05ff2ce7f26f52c85dd88db11d5e03e146a3a6",
"sha256:674e822aa665b9fd75130c6c5f5ed9564a38c6cea6a6432ce47eafb68ee578c5",
"sha256:7ce3175801d0ae5fdfa79b4f0cfed08807af4d075b402b7e294e6aa72af9aa2a",
"sha256:9743c91088d396c1a5a3c9978354b61b0382b4e3c440ce83cf77994a43e8c521",
"sha256:9f94aac67a2045ec719ffe6111df543bac7874cee01f41928f6969756e030564",
"sha256:a26f8ec704e5a7423c8824d425086705e381b4f1dfdef6e3a1edab7ba174ec49",
"sha256:abf7e0c3cf117c44d9285cc6128856106183938c68fd4944763003decdcfeb66",
"sha256:b09669bcda124e83708f34a94606e01b614fa71931d356c1f1a5297ba11f110a",
"sha256:cd07039aa5df222037005b08fbbfd69b3ab0b0bd7a07d7906de75ae52c4e3119",
"sha256:d23e0ea196702d918b60c8288561e722bf437d82cb7ef2edcd98cfa38905d506",
"sha256:d65cc1df038ef55a99e617431f0553cd77763869eebdf9042403e16089fe746c",
"sha256:d7da2e1d5f558c37d6e8c1246f1aec1e7349e4913d8fb3cb289a35de573fe2eb"
"sha256:15b948e1302682e3682f11f50208b726a246ab4e6c1b39f9264a8796bb416aa2",
"sha256:219a3116ecd015f8dca7b5d2c366c973509dfb9a8fc97ef044a36e3da66144a1",
"sha256:3b1fc683fb204c6b4403a1ef23f0b1fac8e4477091585e0c8c54cbdf7d7bb164",
"sha256:3beff56b453b6ef94ecb2996bea101a08f1f8a9771d3cbf4988a61e4d9973761",
"sha256:7687f6455ec3ed7649d1ae574136835a4272b65b3ddcf01ab8704ac65616c5ce",
"sha256:7ec45a70d40ede1ec7ad7f95b3c94c9cf4c186a32f6bacb1795b60abd2f9ef27",
"sha256:86c857510a9b7c3104cf4cde1568f4921762c8f9842e987bc03ed4f160925754",
"sha256:8a627507ef9b307b46a1fea9513d5c98680ba09591253082b4c48697ba05a4ae",
"sha256:8dfb69fbf9f3aeed18afffb15e319ca7f8da9642336348ddd6cab2713ddcf8f9",
"sha256:a34b577cdf6313bf24755f7a0e3f3c326d5c1f4fe7422d1d06498eb25ad0c600",
"sha256:a8ffcd53cb5dfc131850851cc09f1c44689c2812d0beb954d8138d4f5fc17f65",
"sha256:b90928f2d9eb2f33162405f32dde9f6dcead63a0971ca8a1b50eb4ca3e35ceb8",
"sha256:c56ffe22faa2e51054c5f7a3bc70a370939c2ed4de308c690e7949230c995913",
"sha256:f91c7ae919bbc3f96cd5e5b2e786b2b108343d1d7972ea130f7de27fdd547cf3"
],
"markers": "python_version >= '3.5'",
"version": "==0.812"
"index": "pypi",
"version": "==0.770"
},
"mypy-extensions": {
"hashes": [
@ -193,27 +187,26 @@
},
"pycodestyle": {
"hashes": [
"sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068",
"sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"
"sha256:74abc4e221d393ea5ce1f129ea6903209940c1ecd29e002e8c6933c2b21026e0",
"sha256:cbc619d09254895b0d12c2c691e237b2e91e9b2ecf5e84c26b35400f93dcfb83",
"sha256:cbfca99bd594a10f674d0cd97a3d802a1fdef635d4361e1a2658de47ed261e3a"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
"version": "==2.7.0"
"version": "==2.4.0"
},
"pyflakes": {
"hashes": [
"sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3",
"sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db"
"sha256:9a7662ec724d0120012f6e29d6248ae3727d821bba522a0e6b356eff19126a49",
"sha256:f661252913bc1dbe7fcfcbf0af0db3f42ab65aabd1a6ca68fe5d466bace94dae"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
"version": "==2.3.1"
"version": "==2.0.0"
},
"pylint": {
"hashes": [
"sha256:586d8fa9b1891f4b725f587ef267abe2a1bad89d6b184520c7f07a253dd6e217",
"sha256:f7e2072654a6b6afdf5e2fb38147d3e2d2d43c89f648637baab63e026481279b"
"sha256:082a6d461b54f90eea49ca90fff4ee8b6e45e8029e5dbd72f6107ef84f3779c0",
"sha256:a01cd675eccf6e25b3bdb42be184eb46aaf89187d612ba0fb5f93328ed6b0fd5"
],
"markers": "python_version ~= '3.6'",
"version": "==2.8.2"
"index": "pypi",
"version": "==2.8.0"
},
"pyparsing": {
"hashes": [
@ -245,11 +238,11 @@
},
"tox": {
"hashes": [
"sha256:307a81ddb82bd463971a273f33e9533a24ed22185f27db8ce3386bff27d324e3",
"sha256:b0b5818049a1c1997599d42012a637a33f24c62ab8187223fdd318fa8522637b"
"sha256:c60692d92fe759f46c610ac04c03cf0169432d1ff8e981e8ae63e068d0954fc3",
"sha256:f179cb4043d7dc1339425dd49ab1dd8c916246b0d9173143c1b0af7498a03ab0"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'",
"version": "==3.23.1"
"index": "pypi",
"version": "==3.18.0"
},
"typed-ast": {
"hashes": [

View File

@ -7,8 +7,7 @@ then by package (e.g. ``qemu/machine``, ``qemu/qmp``, etc).
``setup.py`` is used by ``pip`` to install this tooling to the current
environment. ``setup.cfg`` provides the packaging configuration used by
``setup.py`` in a setuptools specific format. You will generally invoke
it by doing one of the following:
``setup.py``. You will generally invoke it by doing one of the following:
1. ``pip3 install .`` will install these packages to your current
environment. If you are inside a virtual environment, they will
@ -17,12 +16,13 @@ it by doing one of the following:
2. ``pip3 install --user .`` will install these packages to your user's
local python packages. If you are inside of a virtual environment,
this will fail; you likely want the first invocation above.
this will fail; you want the first invocation above.
If you append the ``-e`` argument, pip will install in "editable" mode;
which installs a version of the package that installs a forwarder
pointing to these files, such that the package always reflects the
latest version in your git tree.
If you append the ``--editable`` or ``-e`` argument to either invocation
above, pip will install in "editable" mode. This installs the package as
a forwarder ("qemu.egg-link") that points to the source tree. In so
doing, the installed package always reflects the latest version in your
source tree.
Installing ".[devel]" instead of "." will additionally pull in required
packages for testing this package. They are not runtime requirements,
@ -30,16 +30,45 @@ and are not needed to simply use these libraries.
Running ``make develop`` will pull in all testing dependencies and
install QEMU in editable mode to the current environment.
(It is a shortcut for ``pip3 install -e .[devel]``.)
See `Installing packages using pip and virtual environments
<https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/>`_
for more information.
Using these packages without installing them
--------------------------------------------
These packages may be used without installing them first, by using one
of two tricks:
1. Set your PYTHONPATH environment variable to include this source
directory, e.g. ``~/src/qemu/python``. See
https://docs.python.org/3/using/cmdline.html#envvar-PYTHONPATH
2. Inside a Python script, use ``sys.path`` to forcibly include a search
path prior to importing the ``qemu`` namespace. See
https://docs.python.org/3/library/sys.html#sys.path
A strong downside to both approaches is that they generally interfere
with static analysis tools being able to locate and analyze the code
being imported.
Package installation also normally provides executable console scripts,
so that tools like ``qmp-shell`` are always available via $PATH. To
invoke them without installation, you can invoke e.g.:
``> PYTHONPATH=~/src/qemu/python python3 -m qemu.qmp.qmp_shell``
The mappings between console script name and python module path can be
found in ``setup.cfg``.
Files in this directory
-----------------------
- ``qemu/`` Python package source directory.
- ``qemu/`` Python 'qemu' namespace package source directory.
- ``tests/`` Python package tests directory.
- ``avocado.cfg`` Configuration for the Avocado test-runner.
Used by ``make check`` et al.
@ -50,7 +79,7 @@ Files in this directory
- ``PACKAGE.rst`` is used as the README file that is visible on PyPI.org.
- ``Pipfile`` is used by Pipenv to generate ``Pipfile.lock``.
- ``Pipfile.lock`` is a set of pinned package dependencies that this package
is tested under in our CI suite. It is used by ``make venv-check``.
is tested under in our CI suite. It is used by ``make check-pipenv``.
- ``README.rst`` you are here!
- ``VERSION`` contains the PEP-440 compliant version used to describe
this package; it is referenced by ``setup.cfg``.

View File

@ -4,10 +4,10 @@ QEMU development and testing library.
This library provides a few high-level classes for driving QEMU from a
test suite, not intended for production use.
- QEMUMachine: Configure and Boot a QEMU VM
- QEMUQtestMachine: VM class, with a qtest socket.
| QEMUQtestProtocol: send/receive qtest messages.
| QEMUMachine: Configure and Boot a QEMU VM
| +-- QEMUQtestMachine: VM class, with a qtest socket.
- QEMUQtestProtocol: Connect to, send/receive qtest messages.
"""
# Copyright (C) 2020-2021 John Snow for Red Hat Inc.

View File

@ -84,6 +84,7 @@ class QEMUMachine:
...
# vm is guaranteed to be shut down here
"""
# pylint: disable=too-many-instance-attributes, too-many-public-methods
def __init__(self,
binary: str,
@ -111,6 +112,8 @@ class QEMUMachine:
@param console_log: (optional) path to console log file
@note: Qemu process is not started until launch() is used.
'''
# pylint: disable=too-many-arguments
# Direct user configuration
self._binary = binary
@ -542,7 +545,8 @@ class QEMUMachine:
@param enabled: if False, qmp monitor options will be removed from
the base arguments of the resulting QEMU command
line. Default is True.
@note: call this function before launch().
.. note:: Call this function before launch().
"""
self._qmp_set = enabled

View File

View File

@ -116,6 +116,8 @@ class QEMUQtestMachine(QEMUMachine):
base_temp_dir: str = "/var/tmp",
socket_scm_helper: Optional[str] = None,
sock_dir: Optional[str] = None):
# pylint: disable=too-many-arguments
if name is None:
name = "qemu-%d" % os.getpid()
if sock_dir is None:

View File

@ -279,6 +279,7 @@ class QEMUMonitorProtocol:
None). The value passed will set the behavior of the
underneath QMP socket as described in [1].
Default value is set to 15.0.
@return QMP greeting dict
@raise OSError on socket connection errors
@raise QMPConnectError if the greeting is not received

0
python/qemu/qmp/py.typed Normal file
View File

View File

@ -38,8 +38,8 @@ from .qom_common import QOMCommand
try:
from .qom_fuse import QOMFuse
except ModuleNotFoundError as err:
if err.name != 'fuse':
except ModuleNotFoundError as _err:
if _err.name != 'fuse':
raise
else:
assert issubclass(QOMFuse, QOMCommand)

View File

@ -156,7 +156,7 @@ class QOMCommand:
"""
Run a fully-parsed subcommand, with error-handling for the CLI.
:return: The return code from `.run()`.
:return: The return code from `run()`.
"""
try:
cmd = cls(args)

View File

@ -36,7 +36,7 @@ def list_accel(qemu_bin: str) -> List[str]:
List accelerators enabled in the QEMU binary.
@param qemu_bin (str): path to the QEMU binary.
@raise Exception: if failed to run `qemu -accel help`
@raise Exception: if failed to run ``qemu -accel help``
@return a list of accelerator names.
"""
if not qemu_bin:

View File

View File

@ -19,6 +19,7 @@ classifiers =
Programming Language :: Python :: 3.8
Programming Language :: Python :: 3.9
Programming Language :: Python :: 3.10
Typing :: Typed
[options]
python_requires = >= 3.6
@ -27,8 +28,13 @@ packages =
qemu.machine
qemu.utils
[options.package_data]
* = py.typed
[options.extras_require]
# Run `pipenv lock --dev` when changing these requirements.
# For the devel group, When adding new dependencies or bumping the minimum
# version, use e.g. "pipenv install --dev pylint==3.0.0".
# Subsequently, edit 'Pipfile' to remove e.g. 'pylint = "==3.0.0'.
devel =
avocado-framework >= 87.0
flake8 >= 3.6.0
@ -56,8 +62,6 @@ console_scripts =
[flake8]
extend-ignore = E722 # Prefer pylint's bare-except checks to flake8's
exclude = __pycache__,
.venv,
.tox,
[mypy]
strict = True
@ -83,9 +87,7 @@ ignore_missing_imports = True
# --enable=similarities". If you want to run only the classes checker, but have
# no Warning level messages displayed, use "--disable=all --enable=classes
# --disable=W".
disable=too-many-arguments,
too-many-instance-attributes,
too-many-public-methods,
disable=
[pylint.basic]
# Good variable names which should always be accepted, separated by a comma.

View File

@ -1,2 +1,2 @@
#!/bin/sh -e
python3 -m flake8
python3 -m flake8 qemu/