7fc29896d2
scripts/qmp-shell: convert usage comment to docstring
...
The nice usage comment should be a docstring instead of a comment, so
that it's visible from other python tooling.
Signed-off-by: John Snow <jsnow@redhat.com >
Message-id: 20210607200649.1840382-37-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com >
2021-06-18 16:10:07 -04:00
26d3ce9e5e
scripts/qmp-shell: Remove too-broad-exception
...
We are only anticipating QMPShellErrors here, for syntax we weren't able
to understand. Other errors, if any, should be allowed to percolate
upwards.
Signed-off-by: John Snow <jsnow@redhat.com >
Message-id: 20210607200649.1840382-36-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com >
2021-06-18 16:10:07 -04:00
c83055ef1d
scripts/qmp-shell: Fix empty-transaction invocation
...
calling "transaction( )" is pointless, but valid. Rework the parser to
allow this kind of invocation. This helps clean up exception handling
later by removing accidental breakages of the parser that aren't
explicitly forbidden.
Signed-off-by: John Snow <jsnow@redhat.com >
Message-id: 20210607200649.1840382-35-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com >
2021-06-18 16:10:07 -04:00
74688377fe
scripts/qmp-shell: remove TODO
...
We still want to revamp qmp-shell again, but there's much more to the
idea than the comment now intuits. Remove it.
Signed-off-by: John Snow <jsnow@redhat.com >
Message-id: 20210607200649.1840382-34-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com >
2021-06-18 16:10:07 -04:00
be19c6a712
scripts/qmp-shell: use logging to show warnings
...
A perfect candidate is non-fatal shell history messages.
Signed-off-by: John Snow <jsnow@redhat.com >
Message-id: 20210607200649.1840382-33-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com >
2021-06-18 16:10:07 -04:00
d1d14e5989
scripts/qmp-shell: Use context manager instead of atexit
...
We can invoke the shell history writing when we leave the QMPShell scope
instead of relying on atexit. Doing so may be preferable to avoid global
state being registered from within a class instead of from the
application logic directly.
Use QMP's context manager to hook this history saving at close time,
which gets invoked when we leave the context block.
Signed-off-by: John Snow <jsnow@redhat.com >
Message-id: 20210607200649.1840382-32-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com >
2021-06-18 16:10:07 -04:00
6e24a7edb8
scripts/qmp-shell: unprivatize 'pretty' property
...
Similar to verbose, there's no reason this needs to be hidden.
Signed-off-by: John Snow <jsnow@redhat.com >
Message-id: 20210607200649.1840382-30-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com >
2021-06-18 16:10:07 -04:00
b0b8ca17e5
scripts/qmp-shell: Accept SocketAddrT instead of string
...
Don't "extend" QEMUMonitorProtocol by changing the argument types. Move
the string parsing just outside of the class instead.
Signed-off-by: John Snow <jsnow@redhat.com >
Message-id: 20210607200649.1840382-29-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com >
2021-06-18 16:10:07 -04:00
1eab88723c
scripts/qmp-shell: add mypy types
...
As per my usual, this patch is annotations only. Any changes with side
effects are done elsewhere.
Note: pylint does not understand the subscripts for Collection in Python 3.6,
so use the stronger Sequence type as a workaround.
Signed-off-by: John Snow <jsnow@redhat.com >
Message-id: 20210607200649.1840382-28-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com >
2021-06-18 16:10:07 -04:00
4157429582
scripts/qmp-shell: initialize completer early
...
Add an empty completer as a more type-safe placeholder instead of
'None'.
Signed-off-by: John Snow <jsnow@redhat.com >
Message-id: 20210607200649.1840382-26-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com >
2021-06-18 16:10:07 -04:00
db12abc208
scripts/qmp-shell: refactor QMPCompleter
...
list is a generic type, but we expect to use strings directly. We could
subclass list[str], but pylint does not presently understand that
invocation.
Change this class to envelop a list instead of *being* a list, for
simpler mypy typing.
Signed-off-by: John Snow <jsnow@redhat.com >
Message-id: 20210607200649.1840382-25-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com >
2021-06-18 16:10:07 -04:00
6faf2384ec
scripts/qmp-shell: Fix "FuzzyJSON" parser
...
I'm not sure when this regressed (Or maybe if it was ever working right
to begin with?), but the Python AST requires you to change "Names" to
"Constants" in order to truly convert `false` to `False`.
Signed-off-by: John Snow <jsnow@redhat.com >
Message-id: 20210607200649.1840382-24-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com >
2021-06-18 16:10:07 -04:00
ad4eebee00
scripts/qmp-shell: move the REPL functionality into QMPShell
...
Instead of doing this in main, move it into the class itself. (This
makes it easier to put into the qemu.qmp package later by removing as
much as we can from the main() function.)
Signed-off-by: John Snow <jsnow@redhat.com >
Message-id: 20210607200649.1840382-23-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com >
2021-06-18 16:10:07 -04:00
1215a1fbef
scripts/qmp-shell: remove prompt argument from read_exec_command
...
It's only ever used by one caller, we can just absorb that logic.
Signed-off-by: John Snow <jsnow@redhat.com >
Message-id: 20210607200649.1840382-22-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com >
2021-06-18 16:10:07 -04:00
1caa505766
scripts/qmp-shell: move get_prompt() to prompt property
...
Small tidying; treat "prompt" like an immutable property instead of
function/method/routine.
Signed-off-by: John Snow <jsnow@redhat.com >
Message-id: 20210607200649.1840382-21-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com >
2021-06-18 16:10:07 -04:00
2ac3f3786e
scripts/qmp-shell: Make verbose a public attribute
...
No real reason to hide this behind an underscore; make it part of the
initializer and make it a regular RW attribute.
Signed-off-by: John Snow <jsnow@redhat.com >
Message-id: 20210607200649.1840382-20-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com >
2021-06-18 16:10:07 -04:00
ad459132c0
scripts/qmp-shell: Add pretty attribute to HMP shell
...
It's less useful, but it makes the initialization methods LSP
consistent, which quiets a mypy complaint.
Signed-off-by: John Snow <jsnow@redhat.com >
Message-id: 20210607200649.1840382-19-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com >
2021-06-18 16:10:07 -04:00
17329be2fd
scripts/qmp-shell: use argparse
...
Use argparse instead of an open-coded CLI parser, for consistency with
everything else.
Signed-off-by: John Snow <jsnow@redhat.com >
Message-id: 20210607200649.1840382-18-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com >
2021-06-18 16:10:07 -04:00
90bd8eb8dc
scripts/qmp-shell: use isinstance() instead of type()
...
A bit more idiomatic, and quiets some linter warnings.
Signed-off-by: John Snow <jsnow@redhat.com >
Message-id: 20210607200649.1840382-17-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com >
2021-06-18 16:10:07 -04:00
73f699c903
scripts/qmp-shell: remove if-raise-else patterns
...
Shushes pylint. I don't always mind these patterns personally, but I'm
not as sure that I want to remove the warning from pylint's repertoire
entirely. Oh well.
Signed-off-by: John Snow <jsnow@redhat.com >
Message-id: 20210607200649.1840382-16-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com >
2021-06-18 16:10:06 -04:00
d962ec85ed
scripts/qmp-shell: fix shell history exception handling
...
We want to remove exceptions that are too broad here; we only want to
catch IOErrors that get raised as a direct result of the open call.
Signed-off-by: John Snow <jsnow@redhat.com >
Message-id: 20210607200649.1840382-15-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com >
2021-06-18 16:10:06 -04:00
628b92dd67
scripts/qmp-shell: rename one and two-letter variables
...
A bit of churn and housekeeping for pylint, flake8 et al.
Signed-off-by: John Snow <jsnow@redhat.com >
Message-id: 20210607200649.1840382-14-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com >
2021-06-18 16:10:06 -04:00
2813dee053
scripts/qmp-shell: make QMPCompleter returns explicit
...
This function returns None when it doesn't find a match; do that
explicitly.
Signed-off-by: John Snow <jsnow@redhat.com >
Message-id: 20210607200649.1840382-13-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com >
2021-06-18 16:10:06 -04:00
50f6f1c308
scripts/qmp-shell: ignore visit_Name name
...
Not something I control, sorry, pylint.
Signed-off-by: John Snow <jsnow@redhat.com >
Message-id: 20210607200649.1840382-12-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com >
2021-06-18 16:10:06 -04:00
c6be2bf86e
scripts/qmp-shell: use triple-double-quote docstring style
...
(2014 me had never written python before.)
Signed-off-by: John Snow <jsnow@redhat.com >
Message-id: 20210607200649.1840382-11-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com >
2021-06-18 16:10:06 -04:00
31226369ab
scripts/qmp-shell: declare verbose in __init__
...
Linters get angry when we don't define state at init time.
Signed-off-by: John Snow <jsnow@redhat.com >
Message-id: 20210607200649.1840382-10-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com >
2021-06-18 16:10:06 -04:00
5cb0233861
scripts/qmp-shell: Use python3-style super()
...
Signed-off-by: John Snow <jsnow@redhat.com >
Message-id: 20210607200649.1840382-9-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com >
2021-06-18 16:10:06 -04:00
c4a1447fc1
scripts/qmp-shell: use @classmethod where appropriate
...
Methods with no self-use should belong to the class.
Signed-off-by: John Snow <jsnow@redhat.com >
Message-id: 20210607200649.1840382-8-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com >
2021-06-18 16:10:06 -04:00
9669c8289c
scripts/qmp-shell: remove shadowed variable from _print()
...
Don't use 'qmp' here, which shadows the qmp module.
Signed-off-by: John Snow <jsnow@redhat.com >
Message-id: 20210607200649.1840382-7-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com >
2021-06-18 16:10:06 -04:00
f2daa2d489
scripts/qmp-shell: fix connect method signature
...
It needs to match the parent's signature -- the negotiate parameter must
be optional.
Signed-off-by: John Snow <jsnow@redhat.com >
Message-id: 20210607200649.1840382-6-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com >
2021-06-18 16:10:06 -04:00
de14ba24f3
scripts/qmp-shell: fix exception handling
...
Fixes: 50d189c
Signed-off-by: John Snow <jsnow@redhat.com >
Message-id: 20210607200649.1840382-5-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com >
2021-06-18 16:10:06 -04:00
70e5674018
scripts/qmp-shell: fix show_banner signature
...
The signatures need to match.
Signed-off-by: John Snow <jsnow@redhat.com >
Message-id: 20210607200649.1840382-4-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com >
2021-06-18 16:10:06 -04:00
169b43b367
scripts/qmp-shell: Apply flake8 rules
...
A lot of fiddling around to get us below 80 columns.
Signed-off-by: John Snow <jsnow@redhat.com >
Message-id: 20210607200649.1840382-3-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com >
2021-06-18 16:10:06 -04:00
badf462985
scripts/qmp-shell: apply isort rules
...
Signed-off-by: John Snow <jsnow@redhat.com >
Message-id: 20210607200649.1840382-2-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com >
2021-06-18 16:10:06 -04:00
587adaca55
python/qmp: add parse_address classmethod
...
This takes the place of qmp-shell's __get_address function. It also
allows other utilities to share the same parser and syntax for
specifying QMP locations.
Signed-off-by: John Snow <jsnow@redhat.com >
Message-id: 20210603003719.1321369-4-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com >
2021-06-18 16:10:06 -04:00
fca9d72323
qmp-shell: Sort by key when pretty-printing
...
If the user selects pretty-printing (-p) the contents of any
dictionaries in the output are sorted by key.
Signed-off-by: David Edmondson <david.edmondson@oracle.com >
Message-Id: <20201013141414.18398-1-david.edmondson@oracle.com >
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com >
Signed-off-by: Markus Armbruster <armbru@redhat.com >
2020-10-27 11:11:06 +01:00
2d110c1149
python: remove more instances of sys.version_info
...
We guarantee 3.5+ everywhere; remove more dead checks. In general, try
to avoid using version checks and instead prefer to attempt behavior
when possible.
Signed-off-by: John Snow <jsnow@redhat.com >
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com >
Message-Id: <20200514035230.25756-1-jsnow@redhat.com >
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com >
2020-05-31 18:25:07 +02:00
423edd9a31
drop "from __future__ import print_function"
...
This is only needed for Python 2, which we do not support anymore.
Cc: Philippe Mathieu-Daudé <philmd@redhat.com >
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com >
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com >
Acked-by: Alex Bennée <alex.bennee@linaro.org >
Acked-by: Markus Armbruster <armbru@redhat.com >
Message-Id: <20200204160604.19883-1-pbonzini@redhat.com >
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com >
2020-02-07 15:15:16 +01:00
3d004a371e
scripts: Explicit usage of Python 3 (scripts with __main__)
...
Use the program search path to find the Python 3 interpreter.
Patch created mechanically by running:
$ sed -i "s,^#\!/usr/bin/\(env\ \)\?python$,#\!/usr/bin/env python3," \
$(git grep -l 'if __name__.*__main__')
Reported-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com >
Suggested-by: Daniel P. Berrangé <berrange@redhat.com >
Suggested-by: Stefan Hajnoczi <stefanha@redhat.com >
Reviewed-by: Juan Quintela <quintela@redhat.com >
Acked-by: Stefan Hajnoczi <stefanha@redhat.com >
Acked-by: Paolo Bonzini <pbonzini@redhat.com >
Message-Id: <20200130163232.10446-6-philmd@redhat.com >
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com >
2020-02-07 15:12:48 +01:00
08aa87f5e7
qmp: make qmp-shell work with python3
...
python3 doesn't have raw_input(), so qmp-shell breaks.
Use input() instead and override it with raw_input()
if running on python2.
Signed-off-by: Igor Mammedov <imammedo@redhat.com >
Message-Id: <20190620154035.30989-1-imammedo@redhat.com >
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com >
2019-07-01 19:02:10 -03:00
b35203b227
qmp-shell: fix nested json regression
...
Commit fcfab7541
("qmp-shell: learn to send commands with quoted
arguments") introduces the usage of Python 'shlex' to handle quoted
arguments, but it accidentally broke generation of nested JSON
structs.
shlex drops quotes, which breaks parsing of the nested struct.
cmd='blockdev-create job-id="job0 foo" options={"driver":"qcow2","size":16384,"file":{"driver":"file","filename":"foo.qcow2"}}'
shlex.split(cmd)
['blockdev-create',
'job-id=job0 foo',
'options={driver:qcow2,size:16384,file:{driver:file,filename:foo.qcow2}}']
Replace with a regexp to split while respecting quoted strings and preserving quotes:
re.findall(r'''(?:[^\s"']|"(?:\\.|[^"])*"|'(?:\\.|[^'])*')+''', cmd)
['blockdev-create',
'job-id="job0 foo"',
'options={"driver":"qcow2","size":16384,"file":{"driver":"file","filename":"foo.qcow2"}}']
Fixes: fcfab7541
("qmp-shell: learn to send commands with quoted arguments")
Reported-by: Kashyap Chamarthy <kchamart@redhat.com >
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com >
Message-Id: <20190205134926.8312-1-marcandre.lureau@redhat.com >
Tested-by: Kashyap Chamarthy <kchamart@redhat.com >
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com >
2019-03-11 10:22:31 -03:00
8f8fd9edba
Introduce a Python module structure
...
This is a simple move of Python code that wraps common QEMU
functionality, and are used by a number of different tests
and scripts.
By treating that code as a real Python module, we can more easily:
* reuse code
* have a proper place for the module's own unittests
* apply a more consistent style
* generate documentation
Signed-off-by: Cleber Rosa <crosa@redhat.com >
Reviewed-by: Caio Carrara <ccarrara@redhat.com >
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com >
Message-Id: <20190206162901.19082-2-crosa@redhat.com >
Signed-off-by: Cleber Rosa <crosa@redhat.com >
2019-02-22 14:07:01 -05:00
fcfab75410
qmp-shell: learn to send commands with quoted arguments
...
Use shlex to split the CLI command, respecting quoted arguments, and
also comments. This allows to call for ex:
(QEMU) human-monitor-command command-line="screendump /dev/null"
{"execute": "human-monitor-command", "arguments": {"command-line": "screendump /dev/null"}}
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com >
Message-Id: <20180326150916.9602-3-marcandre.lureau@redhat.com >
Reviewed-by: Eduardo Habkost <ehabkost@redhat.com >
Signed-off-by: Markus Armbruster <armbru@redhat.com >
2018-08-15 07:24:22 +02:00
bf20b675cc
Partially revert "python: futurize -f libfuturize.fixes.fix_absolute_import"
...
Since commit 068cf7a44c
, qmp-shell
is broken:
$ ./scripts/qmp/qmp-shell
Traceback (most recent call last):
File "./scripts/qmp/qmp-shell", line 70, in <module>
from . import qmp
ValueError: Attempted relative import in non-package
Relative imports don't work on scripts that are executed
directly, so revert the change on the scripts inside scripts/qmp.
Fixes: 068cf7a44c
Reported-by: John Snow <jsnow@redhat.com >
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com >
Message-Id: <20180621175451.7948-1-ehabkost@redhat.com >
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com >
2018-06-22 15:45:42 -03:00
d7a4228ebb
python: futurize -f lib2to3.fixes.fix_has_key
...
Change "dict.has_key(key)" to "key in dict"
This is necessary for Python 3 compatibility.
Done using:
$ py=$( (g grep -l -E '^#!.*python';find -name '*.py' -printf '%P\n';) | \
sort -u | grep -v README.sh4)
$ futurize -w -f lib2to3.fixes.fix_has_key $py
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com >
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org >
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com >
Message-Id: <20180608122952.2009-5-ehabkost@redhat.com >
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com >
2018-06-08 14:39:24 -03:00
068cf7a44c
python: futurize -f libfuturize.fixes.fix_absolute_import
...
Make implicit relative imports explicit and add "from __future__ import
absolute_import" at the top of each relevant module.
This is necessary for Python 3 compatibility.
Done using:
$ py=$( (g grep -l -E '^#!.*python';find -name '*.py' -printf '%P\n';) | \
sort -u | grep -v README.sh4)
$ futurize -w -f libfuturize.fixes.fix_absolute_import $py
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com >
Message-Id: <20180608122952.2009-3-ehabkost@redhat.com >
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com >
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com >
2018-06-08 14:39:24 -03:00
f03868bd56
python: futurize -f libfuturize.fixes.fix_print_with_import
...
Change all Python code to use print as a function.
This is necessary for Python 3 compatibility.
Done using:
$ py=$( (g grep -l -E '^#!.*python';find -name '*.py' -printf '%P\n';) | \
sort -u | grep -v README.sh4)
$ futurize -w -f libfuturize.fixes.fix_print_with_import $py
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com >
Acked-by: Fam Zheng <famz@redhat.com >
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com >
Message-Id: <20180608122952.2009-2-ehabkost@redhat.com >
[ehabkost: fixup tests/docker/docker.py]
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com >
2018-06-08 14:39:24 -03:00
3dd29b4133
qmp.py: Use object-based class for QEMUMonitorProtocol
...
There is no need to define QEMUMonitorProtocol as old-style class.
Signed-off-by: Lukáš Doktor <ldoktor@redhat.com >
Reviewed-by: Eduardo Habkost <ehabkost@redhat.com >
Message-Id: <20170818142613.32394-8-ldoktor@redhat.com >
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com >
2017-09-15 20:12:00 -03:00
dcd3b25d65
qmp-shell: improve help
...
Describe the arguments & fix the tool name.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com >
Message-Id: <20170504125432.21653-5-marcandre.lureau@redhat.com >
Reviewed-by: Eric Blake <eblake@redhat.com >
Signed-off-by: Markus Armbruster <armbru@redhat.com >
2017-05-09 09:14:41 +02:00
b13d2ff3de
qmp-shell: don't show version greeting if unavailable
...
qemu-ga doesn't have greeting.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com >
Message-Id: <20170504125432.21653-4-marcandre.lureau@redhat.com >
Reviewed-by: Eric Blake <eblake@redhat.com >
Signed-off-by: Markus Armbruster <armbru@redhat.com >
2017-05-09 09:14:41 +02:00