[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v3] QMP: Allow dot separated dict path arguments
From: |
Luiz Capitulino |
Subject: |
Re: [Qemu-devel] [PATCH v3] QMP: Allow dot separated dict path arguments in qmp-shell |
Date: |
Thu, 27 Feb 2014 10:35:01 -0500 |
On Wed, 12 Feb 2014 11:05:13 +0800
Fam Zheng <address@hidden> wrote:
> 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 <address@hidden>
Applied to the qmp branch, thanks.
>
> ---
> v3: Fix error message wording. (Eric)
> 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 <address@hidden>
> ---
> 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..e0e848b 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('Cannot 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('Cannot use "%s" as both leaf and
> non-leaf key' % '.'.join(curpath))
> + else:
> + raise QMPShellError('Cannot set "%s" 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