* [Qemu-devel] [PATCH v2] QMP: Allow dot separated dict path arguments in qmp-shell
@ 2014-02-12 1:22 Fam Zheng
2014-02-12 2:10 ` Eric Blake
0 siblings, 1 reply; 2+ messages in thread
From: Fam Zheng @ 2014-02-12 1:22 UTC (permalink / raw)
To: qemu-devel; +Cc: Igor Mammedov, Stefan Hajnoczi, Luiz Capitulino
As another convinience to allow using commands that expect a dict as
argument, this patch adds support for foo.bar=value syntax, similar to
command line argument style:
(QEMU) blockdev-add options.driver=file options.id=drive1 options.filename=...
Signed-off-by: Fam Zheng <famz@redhat.com>
---
v2: Fix variable usage and improved error check and report.
Applies on top of Stefan's patch
[PATCH] QMP: allow JSON dict arguments in qmp-shell
Signed-off-by: Fam Zheng <famz@redhat.com>
---
scripts/qmp/qmp-shell | 20 ++++++++++++++++++--
1 file changed, 18 insertions(+), 2 deletions(-)
diff --git a/scripts/qmp/qmp-shell b/scripts/qmp/qmp-shell
index d374b35..62bdcda 100755
--- a/scripts/qmp/qmp-shell
+++ b/scripts/qmp/qmp-shell
@@ -112,13 +112,29 @@ class QMPShell(qmp.QEMUMonitorProtocol):
value = json.loads(opt[1])
else:
value = opt[1]
- qmpcmd['arguments'][opt[0]] = value
+ optpath = opt[0].split('.')
+ parent = qmpcmd['arguments']
+ curpath = []
+ for p in optpath[:-1]:
+ curpath.append(p)
+ d = parent.get(p, {})
+ if type(d) is not dict:
+ raise QMPShellError('Can not use "%s" as both leaf and non-leaf key' % '.'.join(curpath))
+ parent[p] = d
+ parent = d
+ if optpath[-1] in parent:
+ if type(parent[optpath[-1]]) is dict:
+ raise QMPShellError('Can not use "%s" as both leaf and non-leaf key' % '.'.join(curpath))
+ else:
+ raise QMPShellError('Can not set "%s" for multiple times' % opt[0])
+ parent[optpath[-1]] = value
return qmpcmd
def _execute_cmd(self, cmdline):
try:
qmpcmd = self.__build_cmd(cmdline)
- except:
+ except Exception, e:
+ print 'Error while parsing command line: %s' % e
print 'command format: <command-name> ',
print '[arg-name1=arg1] ... [arg-nameN=argN]'
return True
--
1.8.5.4
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [Qemu-devel] [PATCH v2] QMP: Allow dot separated dict path arguments in qmp-shell
2014-02-12 1:22 [Qemu-devel] [PATCH v2] QMP: Allow dot separated dict path arguments in qmp-shell Fam Zheng
@ 2014-02-12 2:10 ` Eric Blake
0 siblings, 0 replies; 2+ messages in thread
From: Eric Blake @ 2014-02-12 2:10 UTC (permalink / raw)
To: Fam Zheng, qemu-devel; +Cc: Igor Mammedov, Stefan Hajnoczi, Luiz Capitulino
[-- Attachment #1: Type: text/plain, Size: 1112 bytes --]
On 02/11/2014 06:22 PM, Fam Zheng wrote:
> As another convinience to allow using commands that expect a dict as
s/convinience/convenience/
> argument, this patch adds support for foo.bar=value syntax, similar to
> command line argument style:
>
> (QEMU) blockdev-add options.driver=file options.id=drive1 options.filename=...
>
> Signed-off-by: Fam Zheng <famz@redhat.com>
> + if type(d) is not dict:
> + raise QMPShellError('Can not use "%s" as both leaf and non-leaf key' % '.'.join(curpath))
s/Can not/Cannot/
> + parent[p] = d
> + parent = d
> + if optpath[-1] in parent:
> + if type(parent[optpath[-1]]) is dict:
> + raise QMPShellError('Can not use "%s" as both leaf and non-leaf key' % '.'.join(curpath))
> + else:
> + raise QMPShellError('Can not set "%s" for multiple times' % opt[0])
twice more. Also, s/for //
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2014-02-12 2:11 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-02-12 1:22 [Qemu-devel] [PATCH v2] QMP: Allow dot separated dict path arguments in qmp-shell Fam Zheng
2014-02-12 2:10 ` Eric Blake
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).