All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] qmp-shell: Fix example with objects as values
@ 2019-01-08 12:33 Anthony PERARD
  2019-01-11 14:37 ` Cleber Rosa
  0 siblings, 1 reply; 3+ messages in thread
From: Anthony PERARD @ 2019-01-08 12:33 UTC (permalink / raw)
  To: qemu-devel
  Cc: Anthony PERARD, Eduardo Habkost, Cleber Rosa, Markus Armbruster

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 <anthony.perard@citrix.com>
---
 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 [].
 #
-#    example-command arg-name1={'key':'value','obj'={'prop':"value"}}
+#  JSON:
+#    example-command arg-name1='{"key":"value","obj":{"prop":"value"}}'
+#    example-command arg-name1='{"key":"value","obj":[1,true,"three"]}'
+#  free style:
+#    example-command arg-name1="{'key':'value',\"obj\":[1,True,\"three\"]}"
 #
 # Both JSON and Python formatting should work, including both styles of
 # string literal quotes. Both paradigms of literal values should work,
-- 
Anthony PERARD

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [Qemu-devel] [PATCH] qmp-shell: Fix example with objects as values
  2019-01-08 12:33 [Qemu-devel] [PATCH] qmp-shell: Fix example with objects as values Anthony PERARD
@ 2019-01-11 14:37 ` Cleber Rosa
  2019-01-14 17:43   ` Eduardo Habkost
  0 siblings, 1 reply; 3+ messages in thread
From: Cleber Rosa @ 2019-01-11 14:37 UTC (permalink / raw)
  To: Anthony PERARD, qemu-devel; +Cc: Markus Armbruster, Eduardo Habkost



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 <anthony.perard@citrix.com>
> ---
>  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 [].
>  #
> -#    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]

> +#  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.

Thanks,
- Cleber.

>  #
>  # Both JSON and Python formatting should work, including both styles of
>  # string literal quotes. Both paradigms of literal values should work,
> 

-- 
Cleber Rosa
[ Sr Software Engineer - Virtualization Team - Red Hat ]
[ Avocado Test Framework - avocado-framework.github.io ]
[  7ABB 96EB 8B46 B94D 5E0F  E9BB 657E 8D33 A5F2 09F3  ]

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Qemu-devel] [PATCH] qmp-shell: Fix example with objects as values
  2019-01-11 14:37 ` Cleber Rosa
@ 2019-01-14 17:43   ` Eduardo Habkost
  0 siblings, 0 replies; 3+ messages in thread
From: Eduardo Habkost @ 2019-01-14 17:43 UTC (permalink / raw)
  To: Cleber Rosa
  Cc: Anthony PERARD, qemu-devel, Markus Armbruster, Marc-André Lureau

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 <anthony.perard@citrix.com>
> > ---
> >  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

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2019-01-14 17:44 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-01-08 12:33 [Qemu-devel] [PATCH] qmp-shell: Fix example with objects as values Anthony PERARD
2019-01-11 14:37 ` Cleber Rosa
2019-01-14 17:43   ` Eduardo Habkost

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.