From: John Snow <jsnow@redhat.com>
To: qemu-devel@nongnu.org, Markus Armbruster <armbru@redhat.com>
Cc: John Snow <jsnow@redhat.com>,
Eduardo Habkost <ehabkost@redhat.com>,
Cleber Rosa <crosa@redhat.com>
Subject: [PATCH v2 13/16] qapi/expr.py: Modify check_keys to accept any Iterable
Date: Mon, 26 Oct 2020 17:36:34 -0400 [thread overview]
Message-ID: <20201026213637.47087-14-jsnow@redhat.com> (raw)
In-Reply-To: <20201026213637.47087-1-jsnow@redhat.com>
This is a very minor adjustment.
a + b is list-specific behavior, but we can accept a wider variety of
types in a more pythonic fashion if we avoid that behavior.
Typing it this way allows callers to use things like dict.keys() and
other iterables that are not their own discrete lists.
Including it just as a statement of practice if nothing else: It's nice
to use the least-specific type possible as function input and use the
most-specific type for returns.
Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Cleber Rosa <crosa@redhat.com>
---
scripts/qapi/expr.py | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/scripts/qapi/expr.py b/scripts/qapi/expr.py
index 8ad82ca98864..883aa1781599 100644
--- a/scripts/qapi/expr.py
+++ b/scripts/qapi/expr.py
@@ -133,8 +133,8 @@ def check_defn_name_str(name: str, info: QAPISourceInfo, meta: str) -> None:
def check_keys(value: _JSObject,
info: QAPISourceInfo,
source: str,
- required: List[str],
- optional: List[str]) -> None:
+ required: Iterable[str] = (),
+ optional: Iterable[str] = ()) -> None:
"""
Ensures an object has a specific set of keys. [Const]
@@ -155,7 +155,7 @@ def pprint(elems: Iterable[str]) -> str:
"%s misses key%s %s"
% (source, 's' if len(missing) > 1 else '',
pprint(missing)))
- allowed = set(required + optional)
+ allowed = set(required) | set(optional)
unknown = set(value) - allowed
if unknown:
raise QAPISemError(
--
2.26.2
next prev parent reply other threads:[~2020-10-26 21:55 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-26 21:36 [PATCH v2 00/16] qapi: static typing conversion, pt3 John Snow
2020-10-26 21:36 ` [PATCH v2 01/16] qapi/expr.py: Remove 'info' argument from nested check_if_str John Snow
2020-10-26 21:36 ` [PATCH v2 02/16] qapi/expr.py: Check for dict instead of OrderedDict John Snow
2020-11-17 16:30 ` Markus Armbruster
2020-11-17 18:08 ` Eduardo Habkost
2020-11-17 19:48 ` John Snow
2020-10-26 21:36 ` [PATCH v2 03/16] qapi/expr.py: constrain incoming expression types John Snow
2020-11-18 14:58 ` Markus Armbruster
2020-10-26 21:36 ` [PATCH v2 04/16] qapi/expr.py: Add assertion for union type 'check_dict' John Snow
2020-11-18 15:30 ` Markus Armbruster
2020-10-26 21:36 ` [PATCH v2 05/16] qapi/expr.py: move string check upwards in check_type John Snow
2020-10-26 21:36 ` [PATCH v2 06/16] qapi/expr.py: Check type of 'data' member John Snow
2020-11-18 15:36 ` Markus Armbruster
2020-10-26 21:36 ` [PATCH v2 07/16] qapi/expr.py: Add casts in a few select cases John Snow
2020-11-18 15:41 ` Markus Armbruster
2020-10-26 21:36 ` [PATCH v2 08/16] qapi/expr.py: add type hint annotations John Snow
2020-10-26 21:36 ` [PATCH v2 09/16] qapi/expr.py: rewrite check_if John Snow
2020-10-26 21:36 ` [PATCH v2 10/16] qapi/expr.py: Remove single-letter variable John Snow
2020-10-26 21:36 ` [PATCH v2 11/16] qapi/expr.py: enable pylint checks John Snow
2020-10-26 21:36 ` [PATCH v2 12/16] qapi/expr.py: Add docstrings John Snow
2020-10-26 21:36 ` John Snow [this message]
2020-10-26 21:36 ` [PATCH v2 14/16] qapi/expr.py: Use tuples instead of lists for static data John Snow
2020-10-26 21:36 ` [PATCH v2 15/16] qapi/expr.py: move related checks inside check_xxx functions John Snow
2020-10-26 21:36 ` [PATCH v2 16/16] qapi/expr.py: Use an expression checker dispatch table John Snow
2020-11-04 0:41 ` [PATCH v2 00/16] qapi: static typing conversion, pt3 John Snow
2020-11-04 14:53 ` Marc-André Lureau
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=20201026213637.47087-14-jsnow@redhat.com \
--to=jsnow@redhat.com \
--cc=armbru@redhat.com \
--cc=crosa@redhat.com \
--cc=ehabkost@redhat.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).