[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v4 26/46] qapi/commands.py: add type hint annotations
From: |
John Snow |
Subject: |
[PATCH v4 26/46] qapi/commands.py: add type hint annotations |
Date: |
Wed, 30 Sep 2020 00:31:30 -0400 |
Annotations do not change runtime behavior.
This commit *only* adds annotations.
Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Cleber Rosa <crosa@redhat.com>
---
scripts/qapi/commands.py | 71 ++++++++++++++++++++++++++++++----------
1 file changed, 54 insertions(+), 17 deletions(-)
diff --git a/scripts/qapi/commands.py b/scripts/qapi/commands.py
index 586774a23c7..24f347a3f12 100644
--- a/scripts/qapi/commands.py
+++ b/scripts/qapi/commands.py
@@ -13,16 +13,34 @@
See the COPYING file in the top-level directory.
"""
+from typing import (
+ Dict,
+ List,
+ Optional,
+ Set,
+)
+
from .common import c_name, mcgen
from .gen import (
+ QAPIGenC,
QAPIGenCCode,
QAPISchemaModularCVisitor,
build_params,
ifcontext,
)
+from .schema import (
+ QAPISchema,
+ QAPISchemaFeature,
+ QAPISchemaObjectType,
+ QAPISchemaType,
+)
+from .source import QAPISourceInfo
-def gen_command_decl(name, arg_type, boxed, ret_type):
+def gen_command_decl(name: str,
+ arg_type: Optional[QAPISchemaObjectType],
+ boxed: bool,
+ ret_type: Optional[QAPISchemaType]) -> str:
return mcgen('''
%(c_type)s qmp_%(c_name)s(%(params)s);
''',
@@ -31,7 +49,10 @@ def gen_command_decl(name, arg_type, boxed, ret_type):
params=build_params(arg_type, boxed, 'Error **errp'))
-def gen_call(name, arg_type, boxed, ret_type):
+def gen_call(name: str,
+ arg_type: Optional[QAPISchemaObjectType],
+ boxed: bool,
+ ret_type: Optional[QAPISchemaType]) -> str:
ret = ''
argstr = ''
@@ -67,7 +88,7 @@ def gen_call(name, arg_type, boxed, ret_type):
return ret
-def gen_marshal_output(ret_type):
+def gen_marshal_output(ret_type: QAPISchemaType) -> str:
return mcgen('''
static void qmp_marshal_output_%(c_name)s(%(c_type)s ret_in,
@@ -88,19 +109,22 @@ def gen_marshal_output(ret_type):
c_type=ret_type.c_type(), c_name=ret_type.c_name())
-def build_marshal_proto(name):
+def build_marshal_proto(name: str) -> str:
return ('void qmp_marshal_%s(QDict *args, QObject **ret, Error **errp)'
% c_name(name))
-def gen_marshal_decl(name):
+def gen_marshal_decl(name: str) -> str:
return mcgen('''
%(proto)s;
''',
proto=build_marshal_proto(name))
-def gen_marshal(name, arg_type, boxed, ret_type):
+def gen_marshal(name: str,
+ arg_type: Optional[QAPISchemaObjectType],
+ boxed: bool,
+ ret_type: Optional[QAPISchemaType]) -> str:
have_args = boxed or (arg_type and not arg_type.is_empty())
ret = mcgen('''
@@ -182,7 +206,10 @@ def gen_marshal(name, arg_type, boxed, ret_type):
return ret
-def gen_register_command(name, success_response, allow_oob, allow_preconfig):
+def gen_register_command(name: str,
+ success_response: bool,
+ allow_oob: bool,
+ allow_preconfig: bool) -> str:
options = []
if not success_response:
@@ -204,7 +231,7 @@ def gen_register_command(name, success_response, allow_oob,
allow_preconfig):
return ret
-def gen_registry(registry, prefix):
+def gen_registry(registry: str, prefix: str) -> str:
ret = mcgen('''
void %(c_prefix)sqmp_init_marshal(QmpCommandList *cmds)
@@ -221,15 +248,14 @@ def gen_registry(registry, prefix):
class QAPISchemaGenCommandVisitor(QAPISchemaModularCVisitor):
-
- def __init__(self, prefix):
+ def __init__(self, prefix: str):
super().__init__(
prefix, 'qapi-commands',
' * Schema-defined QAPI/QMP commands', None, __doc__)
self._regy = QAPIGenCCode(None)
- self._visited_ret_types = {}
+ self._visited_ret_types: Dict[QAPIGenC, Set[QAPISchemaType]] = {}
- def _begin_user_module(self, name):
+ def _begin_user_module(self, name: str) -> None:
self._visited_ret_types[self._genc] = set()
commands = self._module_basename('qapi-commands', name)
types = self._module_basename('qapi-types', name)
@@ -253,7 +279,7 @@ def _begin_user_module(self, name):
''',
types=types))
- def visit_end(self):
+ def visit_end(self) -> None:
self._add_system_module('init', ' * QAPI Commands initialization')
self._genh.add(mcgen('''
#include "qapi/qmp/dispatch.h"
@@ -269,9 +295,18 @@ def visit_end(self):
prefix=self._prefix))
self._genc.add(gen_registry(self._regy.get_content(), self._prefix))
- def visit_command(self, name, info, ifcond, features,
- arg_type, ret_type, gen, success_response, boxed,
- allow_oob, allow_preconfig):
+ def visit_command(self,
+ name: str,
+ info: QAPISourceInfo,
+ ifcond: List[str],
+ features: List[QAPISchemaFeature],
+ arg_type: Optional[QAPISchemaObjectType],
+ ret_type: Optional[QAPISchemaType],
+ gen: bool,
+ success_response: bool,
+ boxed: bool,
+ allow_oob: bool,
+ allow_preconfig: bool) -> None:
if not gen:
return
# FIXME: If T is a user-defined type, the user is responsible
@@ -292,7 +327,9 @@ def visit_command(self, name, info, ifcond, features,
allow_oob, allow_preconfig))
-def gen_commands(schema, output_dir, prefix):
+def gen_commands(schema: QAPISchema,
+ output_dir: str,
+ prefix: str) -> None:
vis = QAPISchemaGenCommandVisitor(prefix)
schema.visit(vis)
vis.write(output_dir)
--
2.26.2
- [PATCH v4 19/46] qapi/common.py: add type hint annotations, (continued)
- [PATCH v4 19/46] qapi/common.py: add type hint annotations, John Snow, 2020/09/30
- [PATCH v4 18/46] qapi/common.py: check with pylint, John Snow, 2020/09/30
- [PATCH v4 20/46] qapi/common.py: Convert comments into docstrings, and elaborate, John Snow, 2020/09/30
- [PATCH v4 25/46] qapi/commands.py: Don't re-bind to variable of different type, John Snow, 2020/09/30
- [PATCH v4 28/46] qapi/source.py: add type hint annotations, John Snow, 2020/09/30
- [PATCH v4 31/46] qapi/gen.py: add type hint annotations, John Snow, 2020/09/30
- [PATCH v4 21/46] qapi/common.py: move build_params into gen.py, John Snow, 2020/09/30
- [PATCH v4 23/46] qapi/events.py: add type hint annotations, John Snow, 2020/09/30
- [PATCH v4 22/46] qapi: establish mypy type-checking baseline, John Snow, 2020/09/30
- [PATCH v4 24/46] qapi/events.py: Move comments into docstrings, John Snow, 2020/09/30
- [PATCH v4 26/46] qapi/commands.py: add type hint annotations,
John Snow <=
- [PATCH v4 27/46] qapi/commands.py: enable checking with mypy, John Snow, 2020/09/30
- [PATCH v4 29/46] qapi/source.py: delint with pylint, John Snow, 2020/09/30
- [PATCH v4 30/46] qapi/gen.py: Fix edge-case of _is_user_module, John Snow, 2020/09/30
- [PATCH v4 34/46] qapi/gen.py: update write() to be more idiomatic, John Snow, 2020/09/30
- [PATCH v4 32/46] qapi/gen.py: Enable checking with mypy, John Snow, 2020/09/30
- [PATCH v4 33/46] qapi/gen.py: Remove unused parameter, John Snow, 2020/09/30
- [PATCH v4 35/46] qapi/gen.py: delint with pylint, John Snow, 2020/09/30
- [PATCH v4 36/46] qapi/introspect.py: assert obj is a dict when features are given, John Snow, 2020/09/30