From: "Marc-André Lureau" <marcandre.lureau@redhat.com>
To: qemu-devel@nongnu.org
Cc: armbru@redhat.com,
"Marc-André Lureau" <marcandre.lureau@redhat.com>,
"Michael Roth" <mdroth@linux.vnet.ibm.com>
Subject: [Qemu-devel] [PATCH for-4.0 v7 07/27] qapi: improve reporting of unknown or missing keys
Date: Sat, 8 Dec 2018 15:15:46 +0400 [thread overview]
Message-ID: <20181208111606.8505-8-marcandre.lureau@redhat.com> (raw)
In-Reply-To: <20181208111606.8505-1-marcandre.lureau@redhat.com>
Report the set of missing or unknown keys. And give a hint about the
accepted keys.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
scripts/qapi/common.py | 23 +++++++++++++++--------
tests/qapi-schema/alternate-base.err | 1 +
tests/qapi-schema/double-type.err | 1 +
tests/qapi-schema/unknown-expr-key.err | 3 ++-
tests/qapi-schema/unknown-expr-key.json | 2 +-
5 files changed, 20 insertions(+), 10 deletions(-)
diff --git a/scripts/qapi/common.py b/scripts/qapi/common.py
index 18f5872808..f205805751 100644
--- a/scripts/qapi/common.py
+++ b/scripts/qapi/common.py
@@ -874,14 +874,21 @@ def check_struct(expr, info):
def check_known_keys(info, source, keys, required, optional):
- for key in keys:
- if key not in required and key not in optional:
- raise QAPISemError(info, "Unknown key '%s' in %s" % (key, source))
-
- for key in required:
- if key not in keys:
- raise QAPISemError(info, "Key '%s' is missing from %s"
- % (key, source))
+
+ def pprint(elems):
+ return ', '.join("'" + e + "'" for e in sorted(elems))
+
+ missing = set(required) - set(keys)
+ if missing:
+ raise QAPISemError(info, "Key%s %s %s missing from %s"
+ % ('s' if len(missing) > 1 else '', pprint(missing),
+ 'are' if len(missing) > 1 else 'is', source))
+ allowed = set(required + optional)
+ unknown = set(keys) - allowed
+ if unknown:
+ raise QAPISemError(info, "Unknown key%s %s in %s\nValid keys are %s."
+ % ('s' if len(unknown) > 1 else '', pprint(unknown),
+ source, pprint(allowed)))
def check_keys(expr_elem, meta, required, optional=[]):
diff --git a/tests/qapi-schema/alternate-base.err b/tests/qapi-schema/alternate-base.err
index 30d8a34373..ebe05bc898 100644
--- a/tests/qapi-schema/alternate-base.err
+++ b/tests/qapi-schema/alternate-base.err
@@ -1 +1,2 @@
tests/qapi-schema/alternate-base.json:4: Unknown key 'base' in alternate 'Alt'
+Valid keys are 'alternate', 'data', 'if'.
diff --git a/tests/qapi-schema/double-type.err b/tests/qapi-schema/double-type.err
index f9613c6d6b..799193dba1 100644
--- a/tests/qapi-schema/double-type.err
+++ b/tests/qapi-schema/double-type.err
@@ -1 +1,2 @@
tests/qapi-schema/double-type.json:2: Unknown key 'command' in struct 'bar'
+Valid keys are 'base', 'data', 'if', 'struct'.
diff --git a/tests/qapi-schema/unknown-expr-key.err b/tests/qapi-schema/unknown-expr-key.err
index 12f5ed5b43..6ff8bb99c5 100644
--- a/tests/qapi-schema/unknown-expr-key.err
+++ b/tests/qapi-schema/unknown-expr-key.err
@@ -1 +1,2 @@
-tests/qapi-schema/unknown-expr-key.json:2: Unknown key 'bogus' in struct 'bar'
+tests/qapi-schema/unknown-expr-key.json:2: Unknown keys 'bogus', 'phony' in struct 'bar'
+Valid keys are 'base', 'data', 'if', 'struct'.
diff --git a/tests/qapi-schema/unknown-expr-key.json b/tests/qapi-schema/unknown-expr-key.json
index 3b2be00cc4..13292d75ed 100644
--- a/tests/qapi-schema/unknown-expr-key.json
+++ b/tests/qapi-schema/unknown-expr-key.json
@@ -1,2 +1,2 @@
# we reject an expression with unknown top-level keys
-{ 'struct': 'bar', 'data': { 'string': 'str'}, 'bogus': { } }
+{ 'struct': 'bar', 'data': { 'string': 'str'}, 'bogus': { }, 'phony': { } }
--
2.20.0.rc1
next prev parent reply other threads:[~2018-12-08 11:17 UTC|newest]
Thread overview: 69+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-12-08 11:15 [Qemu-devel] [PATCH for-4.0 v7 00/27] Hi, Marc-André Lureau
2018-12-08 11:15 ` [Qemu-devel] [PATCH for-4.0 v7 01/27] qapi: make sure osdep.h is included in type headers Marc-André Lureau
2018-12-10 9:52 ` Markus Armbruster
2018-12-10 11:13 ` Marc-André Lureau
2018-12-10 13:28 ` Markus Armbruster
2018-12-11 15:47 ` Marc-André Lureau
2018-12-12 6:47 ` Markus Armbruster
2018-12-11 16:05 ` Daniel P. Berrangé
2018-12-12 6:48 ` Markus Armbruster
2018-12-08 11:15 ` [Qemu-devel] [PATCH for-4.0 v7 02/27] qapi: do not define enumeration value explicitly Marc-André Lureau
2018-12-12 8:52 ` Markus Armbruster
2018-12-12 9:05 ` Marc-André Lureau
2018-12-08 11:15 ` [Qemu-devel] [PATCH for-4.0 v7 03/27] qapi: rename QAPISchemaEnumType.values to .members Marc-André Lureau
2018-12-08 11:15 ` [Qemu-devel] [PATCH for-4.0 v7 04/27] qapi: change enum visitor and gen_enum* to take QAPISchemaMember Marc-André Lureau
2018-12-08 11:15 ` [Qemu-devel] [PATCH for-4.0 v7 05/27] tests: print enum type members more like object type members Marc-André Lureau
2018-12-08 11:15 ` [Qemu-devel] [PATCH for-4.0 v7 06/27] qapi: factor out checking for keys Marc-André Lureau
2018-12-10 9:57 ` Markus Armbruster
2018-12-08 11:15 ` Marc-André Lureau [this message]
2018-12-10 10:03 ` [Qemu-devel] [PATCH for-4.0 v7 07/27] qapi: improve reporting of unknown or missing keys Markus Armbruster
2018-12-10 11:11 ` Marc-André Lureau
2018-12-08 11:15 ` [Qemu-devel] [PATCH for-4.0 v7 08/27] qapi: add a dictionary form with 'name' key for enum members Marc-André Lureau
2018-12-10 15:44 ` Markus Armbruster
2018-12-10 16:05 ` Markus Armbruster
2018-12-08 11:15 ` [Qemu-devel] [PATCH for-4.0 v7 09/27] qapi: add 'if' to " Marc-André Lureau
2018-12-08 11:15 ` [Qemu-devel] [PATCH for-4.0 v7 10/27] qapi-events: add 'if' condition to implicit event enum Marc-André Lureau
2018-12-08 11:15 ` [Qemu-devel] [PATCH for-4.0 v7 11/27] qapi: pass long form enum to make_enum_members Marc-André Lureau
2018-12-10 17:04 ` Markus Armbruster
2018-12-08 11:15 ` [Qemu-devel] [PATCH for-4.0 v7 12/27] qapi: rename allow_dict to allow_implicit Marc-André Lureau
2018-12-08 11:15 ` [Qemu-devel] [PATCH for-4.0 v7 13/27] qapi: add a dictionary form for TYPE Marc-André Lureau
2018-12-10 17:24 ` Markus Armbruster
2018-12-11 12:11 ` Marc-André Lureau
2018-12-11 15:35 ` Markus Armbruster
2018-12-11 15:18 ` Markus Armbruster
2018-12-08 11:15 ` [Qemu-devel] [PATCH for-4.0 v7 14/27] qapi: add 'if' to implicit struct members Marc-André Lureau
2018-12-08 11:15 ` [Qemu-devel] [PATCH for-4.0 v7 15/27] qapi: add an error in case a discriminator is conditional Marc-André Lureau
2018-12-10 17:31 ` Markus Armbruster
2018-12-11 15:23 ` Markus Armbruster
2018-12-08 11:15 ` [Qemu-devel] [PATCH for-4.0 v7 16/27] qapi: add 'if' to union members Marc-André Lureau
2018-12-10 17:33 ` Markus Armbruster
2018-12-08 11:15 ` [Qemu-devel] [PATCH for-4.0 v7 17/27] qapi: simplify make_enum_members() Marc-André Lureau
2018-12-11 12:05 ` Markus Armbruster
2018-12-11 12:08 ` Marc-André Lureau
2018-12-08 11:15 ` [Qemu-devel] [PATCH for-4.0 v7 18/27] tests/qapi: add command with condition on union argument Marc-André Lureau
2018-12-11 12:09 ` Markus Armbruster
2018-12-11 12:13 ` Marc-André Lureau
2018-12-08 11:15 ` [Qemu-devel] [PATCH for-4.0 v7 19/27] qapi: add 'if' to alternate members Marc-André Lureau
2018-12-11 12:21 ` Markus Armbruster
2018-12-08 11:15 ` [Qemu-devel] [PATCH for-4.0 v7 20/27] tests/qapi: add command with condition on alternate argument Marc-André Lureau
2018-12-11 12:20 ` Markus Armbruster
2018-12-08 11:16 ` [Qemu-devel] [PATCH for-4.0 v7 21/27] qapi: add #if conditions to generated code members Marc-André Lureau
2018-12-11 13:17 ` Markus Armbruster
2018-12-08 11:16 ` [Qemu-devel] [PATCH for-4.0 v7 22/27] qapi: add 'If:' condition to enum values documentation Marc-André Lureau
2018-12-11 16:00 ` Markus Armbruster
2018-12-11 16:07 ` Marc-André Lureau
2018-12-13 13:59 ` Markus Armbruster
2018-12-08 11:16 ` [Qemu-devel] [PATCH for-4.0 v7 23/27] qapi: add 'If:' condition to struct members documentation Marc-André Lureau
2018-12-08 11:16 ` [Qemu-devel] [PATCH for-4.0 v7 24/27] qapi: add condition to variants documentation Marc-André Lureau
2018-12-08 11:16 ` [Qemu-devel] [PATCH for-4.0 v7 25/27] qapi: break long lines at 'data' member Marc-André Lureau
2018-12-11 16:07 ` Markus Armbruster
2018-12-11 16:08 ` Marc-André Lureau
2018-12-08 11:16 ` [Qemu-devel] [PATCH for-4.0 v7 26/27] qapi: add more conditions to SPICE Marc-André Lureau
2018-12-11 17:11 ` Markus Armbruster
2018-12-08 11:16 ` [Qemu-devel] [PATCH for-4.0 v7 27/27] qapi: add conditions to REPLICATION type/commands on the schema Marc-André Lureau
2018-12-11 17:15 ` Markus Armbruster
2018-12-11 17:17 ` Marc-André Lureau
2018-12-08 11:19 ` [Qemu-devel] [PATCH for-4.0 v7 00/27] Hi, Marc-André Lureau
2018-12-12 17:18 ` Markus Armbruster
2018-12-12 18:13 ` Marc-André Lureau
2018-12-13 5:11 ` Markus Armbruster
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20181208111606.8505-8-marcandre.lureau@redhat.com \
--to=marcandre.lureau@redhat.com \
--cc=armbru@redhat.com \
--cc=mdroth@linux.vnet.ibm.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).