From: John Snow <jsnow@redhat.com> To: Markus Armbruster <armbru@redhat.com>, qemu-devel@nongnu.org Cc: Michael Roth <michael.roth@amd.com>, John Snow <jsnow@redhat.com>, Eduardo Habkost <ehabkost@redhat.com>, Cleber Rosa <crosa@redhat.com> Subject: [PATCH v4 18/19] qapi/expr.py: move related checks inside check_xxx functions Date: Thu, 25 Mar 2021 02:03:55 -0400 [thread overview] Message-ID: <20210325060356.4040114-19-jsnow@redhat.com> (raw) In-Reply-To: <20210325060356.4040114-1-jsnow@redhat.com> There's not a big obvious difference between the types of checks that happen in the main function versus the kind that happen in the functions. Now they're in one place for each of the main types. As part of the move, spell out the required and optional keywords so they're obvious at a glance. Use tuples instead of lists for immutable data, too. Signed-off-by: John Snow <jsnow@redhat.com> Reviewed-by: Cleber Rosa <crosa@redhat.com> --- scripts/qapi/expr.py | 55 ++++++++++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 22 deletions(-) diff --git a/scripts/qapi/expr.py b/scripts/qapi/expr.py index b11c11b965..aabbc255d2 100644 --- a/scripts/qapi/expr.py +++ b/scripts/qapi/expr.py @@ -398,6 +398,10 @@ def check_enum(expr: _JSONObject, info: QAPISourceInfo) -> None: :return: None, ``expr`` is normalized in-place as needed. """ + check_keys(expr, info, 'enum', + required=('enum', 'data'), + optional=('if', 'features', 'prefix')) + name = expr['enum'] members = expr['data'] prefix = expr.get('prefix') @@ -435,6 +439,11 @@ def check_struct(expr: _JSONObject, info: QAPISourceInfo) -> None: :return: None, ``expr`` is normalized in-place as needed. """ + check_keys(expr, info, 'struct', + required=('struct', 'data'), + optional=('base', 'if', 'features')) + normalize_members(expr['data']) + name = cast(str, expr['struct']) # Asserted in check_exprs members = expr['data'] @@ -451,6 +460,13 @@ def check_union(expr: _JSONObject, info: QAPISourceInfo) -> None: :return: None, ``expr`` is normalized in-place as needed. """ + check_keys(expr, info, 'union', + required=('union', 'data'), + optional=('base', 'discriminator', 'if', 'features')) + + normalize_members(expr.get('base')) + normalize_members(expr['data']) + name = cast(str, expr['union']) # Asserted in check_exprs base = expr.get('base') discriminator = expr.get('discriminator') @@ -487,6 +503,11 @@ def check_alternate(expr: _JSONObject, info: QAPISourceInfo) -> None: :return: None, ``expr`` is normalized in-place as needed. """ + check_keys(expr, info, 'alternate', + required=('alternate', 'data'), + optional=('if', 'features')) + normalize_members(expr['data']) + members = expr['data'] if not members: @@ -512,6 +533,13 @@ def check_command(expr: _JSONObject, info: QAPISourceInfo) -> None: :return: None, ``expr`` is normalized in-place as needed. """ + check_keys(expr, info, 'command', + required=('command',), + optional=('data', 'returns', 'boxed', 'if', 'features', + 'gen', 'success-response', 'allow-oob', + 'allow-preconfig', 'coroutine')) + normalize_members(expr.get('data')) + args = expr.get('data') rets = expr.get('returns') boxed = expr.get('boxed', False) @@ -531,6 +559,11 @@ def check_event(expr: _JSONObject, info: QAPISourceInfo) -> None: :return: None, ``expr`` is normalized in-place as needed. """ + check_keys(expr, info, 'event', + required=('event',), + optional=('data', 'boxed', 'if', 'features')) + normalize_members(expr.get('data')) + args = expr.get('data') boxed = expr.get('boxed', False) @@ -598,38 +631,16 @@ def check_exprs(exprs: List[_JSONObject]) -> List[_JSONObject]: "documentation comment required") if meta == 'enum': - check_keys(expr, info, meta, - ['enum', 'data'], ['if', 'features', 'prefix']) check_enum(expr, info) elif meta == 'union': - check_keys(expr, info, meta, - ['union', 'data'], - ['base', 'discriminator', 'if', 'features']) - normalize_members(expr.get('base')) - normalize_members(expr['data']) check_union(expr, info) elif meta == 'alternate': - check_keys(expr, info, meta, - ['alternate', 'data'], ['if', 'features']) - normalize_members(expr['data']) check_alternate(expr, info) elif meta == 'struct': - check_keys(expr, info, meta, - ['struct', 'data'], ['base', 'if', 'features']) - normalize_members(expr['data']) check_struct(expr, info) elif meta == 'command': - check_keys(expr, info, meta, - ['command'], - ['data', 'returns', 'boxed', 'if', 'features', - 'gen', 'success-response', 'allow-oob', - 'allow-preconfig', 'coroutine']) - normalize_members(expr.get('data')) check_command(expr, info) elif meta == 'event': - check_keys(expr, info, meta, - ['event'], ['data', 'boxed', 'if', 'features']) - normalize_members(expr.get('data')) check_event(expr, info) else: assert False, 'unexpected meta type' -- 2.30.2
next prev parent reply other threads:[~2021-03-25 6:07 UTC|newest] Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-03-25 6:03 [PATCH v4 00/19] qapi: static typing conversion, pt3 John Snow 2021-03-25 6:03 ` [PATCH v4 01/19] qapi/expr: Comment cleanup John Snow 2021-03-25 15:41 ` Markus Armbruster 2021-03-25 20:06 ` John Snow 2021-03-25 6:03 ` [PATCH v4 02/19] flake8: Enforce shorter line length for comments and docstrings John Snow 2021-03-25 15:21 ` Markus Armbruster 2021-03-25 20:20 ` John Snow 2021-03-26 6:26 ` Markus Armbruster 2021-03-26 16:30 ` John Snow 2021-03-26 16:44 ` Peter Maydell 2021-04-08 8:32 ` Markus Armbruster 2021-04-08 8:58 ` Daniel P. Berrangé 2021-04-09 9:33 ` Markus Armbruster 2021-04-09 17:08 ` John Snow 2021-04-08 8:35 ` Markus Armbruster 2021-04-16 12:44 ` Markus Armbruster 2021-04-16 20:25 ` John Snow 2021-04-17 10:52 ` Markus Armbruster 2021-04-20 18:06 ` John Snow 2021-03-25 6:03 ` [PATCH v4 03/19] qapi/expr.py: Remove 'info' argument from nested check_if_str John Snow 2021-03-25 6:03 ` [PATCH v4 04/19] qapi/expr.py: Check for dict instead of OrderedDict John Snow 2021-03-25 6:03 ` [PATCH v4 05/19] qapi/expr.py: constrain incoming expression types John Snow 2021-03-25 14:04 ` Markus Armbruster 2021-03-25 20:48 ` John Snow 2021-03-26 5:40 ` Markus Armbruster 2021-03-26 17:12 ` John Snow 2021-03-25 6:03 ` [PATCH v4 06/19] qapi/expr.py: Add assertion for union type 'check_dict' John Snow 2021-03-25 6:03 ` [PATCH v4 07/19] qapi/expr.py: move string check upwards in check_type John Snow 2021-03-25 6:03 ` [PATCH v4 08/19] qapi: add tests for invalid 'data' field type John Snow 2021-03-25 14:24 ` Markus Armbruster 2021-03-25 6:03 ` [PATCH v4 09/19] qapi/expr.py: Check type of 'data' member John Snow 2021-03-25 14:26 ` Markus Armbruster 2021-03-25 21:04 ` John Snow 2021-03-25 6:03 ` [PATCH v4 10/19] qapi/expr.py: Add casts in a few select cases John Snow 2021-03-25 14:33 ` Markus Armbruster 2021-03-25 23:32 ` John Snow 2021-03-25 6:03 ` [PATCH v4 11/19] qapi/expr.py: Modify check_keys to accept any Collection John Snow 2021-03-25 14:45 ` Markus Armbruster 2021-03-25 23:37 ` John Snow 2021-03-25 6:03 ` [PATCH v4 12/19] qapi/expr.py: add type hint annotations John Snow 2021-03-25 6:03 ` [PATCH v4 13/19] qapi/expr.py: Consolidate check_if_str calls in check_if John Snow 2021-03-25 15:15 ` Markus Armbruster 2021-03-26 0:07 ` John Snow 2021-03-25 6:03 ` [PATCH v4 14/19] qapi/expr.py: Remove single-letter variable John Snow 2021-03-25 6:03 ` [PATCH v4 15/19] qapi/expr.py: enable pylint checks John Snow 2021-03-25 6:03 ` [PATCH v4 16/19] qapi/expr.py: Add docstrings John Snow 2021-04-14 15:04 ` Markus Armbruster 2021-04-17 1:00 ` John Snow 2021-04-17 13:18 ` Markus Armbruster 2021-04-21 1:27 ` John Snow 2021-04-21 13:58 ` Markus Armbruster 2021-04-21 18:20 ` John Snow 2021-03-25 6:03 ` [PATCH v4 17/19] qapi/expr.py: Use tuples instead of lists for static data John Snow 2021-03-25 15:19 ` Markus Armbruster 2021-03-25 6:03 ` John Snow [this message] 2021-03-25 6:03 ` [PATCH v4 19/19] qapi/expr.py: Use an expression checker dispatch table John Snow 2021-03-25 15:46 ` [PATCH v4 00/19] qapi: static typing conversion, pt3 Markus Armbruster 2021-03-26 0:40 ` John Snow 2021-03-26 18:01 ` John Snow
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=20210325060356.4040114-19-jsnow@redhat.com \ --to=jsnow@redhat.com \ --cc=armbru@redhat.com \ --cc=crosa@redhat.com \ --cc=ehabkost@redhat.com \ --cc=michael.roth@amd.com \ --cc=qemu-devel@nongnu.org \ --subject='Re: [PATCH v4 18/19] qapi/expr.py: move related checks inside check_xxx functions' \ /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
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).