[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 15/16] qapi/expr.py: move related checks inside check_xxx func
From: |
John Snow |
Subject: |
[PATCH v2 15/16] qapi/expr.py: move related checks inside check_xxx functions |
Date: |
Mon, 26 Oct 2020 17:36:36 -0400 |
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.
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 9253560cd9ce..3b62e801a42c 100644
--- a/scripts/qapi/expr.py
+++ b/scripts/qapi/expr.py
@@ -347,6 +347,10 @@ def check_enum(expr: Expression, info: QAPISourceInfo) ->
None:
:param expr: `Expression` to validate.
:param info: QAPI source file information.
"""
+ check_keys(expr, info, 'enum',
+ required=('enum', 'data'),
+ optional=('if', 'features', 'prefix'))
+
name = expr['enum']
members = expr['data']
prefix = expr.get('prefix')
@@ -377,6 +381,11 @@ def check_struct(expr: Expression, info: QAPISourceInfo)
-> None:
:param expr: `Expression` to validate.
:param info: QAPI source file information.
"""
+ 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']
@@ -391,6 +400,13 @@ def check_union(expr: Expression, info: QAPISourceInfo) ->
None:
:param expr: `Expression` to validate.
:param info: QAPI source file information.
"""
+ 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')
@@ -423,6 +439,11 @@ def check_alternate(expr: Expression, info:
QAPISourceInfo) -> None:
:param expr: Expression to validate.
:param info: QAPI source file information.
"""
+ check_keys(expr, info, 'alternate',
+ required=('alternate', 'data'),
+ optional=('if', 'features'))
+ normalize_members(expr['data'])
+
members = expr['data']
if not members:
@@ -446,6 +467,13 @@ def check_command(expr: Expression, info: QAPISourceInfo)
-> None:
:param expr: `Expression` to validate.
:param info: QAPI source file information.
"""
+ 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)
@@ -467,6 +495,11 @@ def check_event(expr: Expression, info: QAPISourceInfo) ->
None:
:if: ``Optional[Ifcond]`` (see: `check_if`)
:features: ``Optional[Features]`` (see: `check_features`)
"""
+ 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)
@@ -534,38 +567,16 @@ def check_exprs(exprs: List[_JSObject]) ->
List[_JSObject]:
"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.26.2
- [PATCH v2 00/16] qapi: static typing conversion, pt3, John Snow, 2020/10/26
- [PATCH v2 02/16] qapi/expr.py: Check for dict instead of OrderedDict, John Snow, 2020/10/26
- [PATCH v2 03/16] qapi/expr.py: constrain incoming expression types, John Snow, 2020/10/26
- [PATCH v2 04/16] qapi/expr.py: Add assertion for union type 'check_dict', John Snow, 2020/10/26
- [PATCH v2 05/16] qapi/expr.py: move string check upwards in check_type, John Snow, 2020/10/26
- [PATCH v2 06/16] qapi/expr.py: Check type of 'data' member, John Snow, 2020/10/26
- [PATCH v2 01/16] qapi/expr.py: Remove 'info' argument from nested check_if_str, John Snow, 2020/10/26
- [PATCH v2 07/16] qapi/expr.py: Add casts in a few select cases, John Snow, 2020/10/26
- [PATCH v2 08/16] qapi/expr.py: add type hint annotations, John Snow, 2020/10/26
- [PATCH v2 09/16] qapi/expr.py: rewrite check_if, John Snow, 2020/10/26
- [PATCH v2 15/16] qapi/expr.py: move related checks inside check_xxx functions,
John Snow <=
- [PATCH v2 10/16] qapi/expr.py: Remove single-letter variable, John Snow, 2020/10/26
- [PATCH v2 11/16] qapi/expr.py: enable pylint checks, John Snow, 2020/10/26
- [PATCH v2 12/16] qapi/expr.py: Add docstrings, John Snow, 2020/10/26
- [PATCH v2 13/16] qapi/expr.py: Modify check_keys to accept any Iterable, John Snow, 2020/10/26
- [PATCH v2 14/16] qapi/expr.py: Use tuples instead of lists for static data, John Snow, 2020/10/26
- [PATCH v2 16/16] qapi/expr.py: Use an expression checker dispatch table, John Snow, 2020/10/26