diff mbox

[2/5] scripts: qmp-shell: add support for [] expressions

Message ID 1429668155-1606-3-git-send-email-jsnow@redhat.com
State New
Headers show

Commit Message

John Snow April 22, 2015, 2:02 a.m. UTC
qmp-shell currently allows you to describe values as
JSON expressions:

key={"key":{"key2":"val"}}

But it does not currently support arrays, which are needed
for serializing and deserializing transactions:

key=[{"type":"drive-backup","data":{...}}]

Add support for arrays.

CAVEAT: The parser is still extremely rudimentary and does not
expect to find spaces in {} nor [] expressions. This patch does
not improve this functionality.

Signed-off-by: John Snow <jsnow@redhat.com>
---
 scripts/qmp/qmp-shell | 2 ++
 1 file changed, 2 insertions(+)

Comments

Eric Blake April 22, 2015, 2:28 p.m. UTC | #1
On 04/21/2015 08:02 PM, John Snow wrote:
> qmp-shell currently allows you to describe values as
> JSON expressions:
> 
> key={"key":{"key2":"val"}}
> 
> But it does not currently support arrays, which are needed
> for serializing and deserializing transactions:
> 
> key=[{"type":"drive-backup","data":{...}}]
> 
> Add support for arrays.
> 
> CAVEAT: The parser is still extremely rudimentary and does not
> expect to find spaces in {} nor [] expressions. This patch does
> not improve this functionality.
> 
> Signed-off-by: John Snow <jsnow@redhat.com>
> ---
>  scripts/qmp/qmp-shell | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/scripts/qmp/qmp-shell b/scripts/qmp/qmp-shell
> index a9632ec..5347f89 100755
> --- a/scripts/qmp/qmp-shell
> +++ b/scripts/qmp/qmp-shell
> @@ -102,6 +102,8 @@ class QMPShell(qmp.QEMUMonitorProtocol):
>                      value = False
>                  elif opt[1].startswith('{'):
>                      value = json.loads(opt[1])
> +                elif opt[1].startswith('['):
> +                    value = json.loads(opt[1])

Why not:

elif opt[1].startswith('{'} or opt[1].startswith('['):

for a one-line change instead of two-line addition?  And I'm no python
expert, but I think you can write that with fewer characters. Untested,
but does this work?

elif opt[1][0] in "{[":
John Snow April 22, 2015, 2:31 p.m. UTC | #2
On 04/22/2015 10:28 AM, Eric Blake wrote:
> On 04/21/2015 08:02 PM, John Snow wrote:
>> qmp-shell currently allows you to describe values as
>> JSON expressions:
>>
>> key={"key":{"key2":"val"}}
>>
>> But it does not currently support arrays, which are needed
>> for serializing and deserializing transactions:
>>
>> key=[{"type":"drive-backup","data":{...}}]
>>
>> Add support for arrays.
>>
>> CAVEAT: The parser is still extremely rudimentary and does not
>> expect to find spaces in {} nor [] expressions. This patch does
>> not improve this functionality.
>>
>> Signed-off-by: John Snow <jsnow@redhat.com>
>> ---
>>   scripts/qmp/qmp-shell | 2 ++
>>   1 file changed, 2 insertions(+)
>>
>> diff --git a/scripts/qmp/qmp-shell b/scripts/qmp/qmp-shell
>> index a9632ec..5347f89 100755
>> --- a/scripts/qmp/qmp-shell
>> +++ b/scripts/qmp/qmp-shell
>> @@ -102,6 +102,8 @@ class QMPShell(qmp.QEMUMonitorProtocol):
>>                       value = False
>>                   elif opt[1].startswith('{'):
>>                       value = json.loads(opt[1])
>> +                elif opt[1].startswith('['):
>> +                    value = json.loads(opt[1])
>
> Why not:
>
> elif opt[1].startswith('{'} or opt[1].startswith('['):
>

Didn't really consider this patch too long is why :)
If the rest of it looks worth checking in to you, I'll make the tidying 
edits.

> for a one-line change instead of two-line addition?  And I'm no python
> expert, but I think you can write that with fewer characters. Untested,
> but does this work?
>
> elif opt[1][0] in "{[":
>

It should.

Thanks,
--js
diff mbox

Patch

diff --git a/scripts/qmp/qmp-shell b/scripts/qmp/qmp-shell
index a9632ec..5347f89 100755
--- a/scripts/qmp/qmp-shell
+++ b/scripts/qmp/qmp-shell
@@ -102,6 +102,8 @@  class QMPShell(qmp.QEMUMonitorProtocol):
                     value = False
                 elif opt[1].startswith('{'):
                     value = json.loads(opt[1])
+                elif opt[1].startswith('['):
+                    value = json.loads(opt[1])
                 else:
                     value = opt[1]
             optpath = opt[0].split('.')