[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] qmp-shell: Fix example with objects as values
From: |
Eduardo Habkost |
Subject: |
Re: [Qemu-devel] [PATCH] qmp-shell: Fix example with objects as values |
Date: |
Mon, 14 Jan 2019 15:43:44 -0200 |
User-agent: |
Mutt/1.10.1 (2018-07-13) |
On Fri, Jan 11, 2019 at 09:37:47AM -0500, Cleber Rosa wrote:
>
>
> On 1/8/19 7:33 AM, Anthony PERARD wrote:
> > The example shown that is suppose to let a user passes an object/array as
> > argument doesn't work. The quotes get removed by shlex.split() and then
> > both JSON parser complains. Fix the example by adding quotes and add
> > examples with boolean and array.
> >
> > Signed-off-by: Anthony PERARD <address@hidden>
> > ---
> > scripts/qmp/qmp-shell | 6 +++++-
> > 1 file changed, 5 insertions(+), 1 deletion(-)
> >
> > diff --git a/scripts/qmp/qmp-shell b/scripts/qmp/qmp-shell
> > index 770140772d..9937e3c888 100755
> > --- a/scripts/qmp/qmp-shell
> > +++ b/scripts/qmp/qmp-shell
> > @@ -33,7 +33,11 @@
> > # key=value pairs also support Python or JSON object literal subset
> > notations,
> > # without spaces. Dictionaries/objects {} are supported as are arrays [].
The "without spaces" part is outdated. Now we do support spaces as long as the
argument is quoted.
> > #
> > -# example-command arg-name1={'key':'value','obj'={'prop':"value"}}
>
> Yes, I can replicate that with a command such as:
>
> (QEMU) object-add qom-type="rng-random" id="rng1" props={"filename":
> "/dev/hwrng"}
>
> That results in:
>
> Error while parsing command line: Expected a key=value pair, got
> '/dev/hwrng}'
> command format: <command-name> [arg-name1=arg1] ... [arg-nameN=argN]
The example has no spaces, and you seem to have a whitespace
before "/dev/rng" above.
The problem here is that this worked before started using shlex.
qmp-shell from QEMU 3.0 worked:
(QEMU) object-add qom-type=rng-random id="rng1"
props={"filename":"/dev/hwrng"}
{"return": {}}
Now we get this:
(QEMU) object-add qom-type=rng-random id="rng1"
props={"filename":"/dev/hwrng"}
{"error": {"class": "GenericError", "desc": "Invalid parameter type for
'props', expected: dict"}}
This means we lost the ability to write JSON without any extra
quotes to gain the ability to have arguments with spaces. How
hard it would be to fix that?
>
> > +# JSON:
> > +# example-command arg-name1='{"key":"value","obj":{"prop":"value"}}'
> > +# example-command arg-name1='{"key":"value","obj":[1,true,"three"]}'
>
> The usage fix is to have the dictionary quoted, indeed:
>
> (QEMU) object-add qom-type="rng-random" id="rng4" props="{'filename':
> '/dev/hwrng'}"
> {"return": {}}
>
> > +# free style:
> > +# example-command arg-name1="{'key':'value',\"obj\":[1,True,\"three\"]}"
> I just find the "free style" confusing... IMO how to be more creative
> about escaping is optional, and adds noise to the most common use case.
The example seems to be a simple demonstration of how escaping
works, but maybe we shouldn't encourage people to try weird
tricks with escaping. Especially if we want to eventually make
unquoted JSON data work again.
--
Eduardo