[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 06/19] qapi/schema: adjust type narrowing for mypy's benefit
|
From: |
Markus Armbruster |
|
Subject: |
Re: [PATCH 06/19] qapi/schema: adjust type narrowing for mypy's benefit |
|
Date: |
Tue, 21 Nov 2023 15:09:14 +0100 |
|
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/28.2 (gnu/linux) |
John Snow <jsnow@redhat.com> writes:
> We already take care to perform some type narrowing for arg_type and
> ret_type, but not in a way where mypy can utilize the result. A simple
> change to use a temporary variable helps the medicine go down.
>
> Signed-off-by: John Snow <jsnow@redhat.com>
> ---
> scripts/qapi/schema.py | 17 +++++++++--------
> 1 file changed, 9 insertions(+), 8 deletions(-)
>
> diff --git a/scripts/qapi/schema.py b/scripts/qapi/schema.py
> index 4600a566005..a1094283828 100644
> --- a/scripts/qapi/schema.py
> +++ b/scripts/qapi/schema.py
> @@ -825,13 +825,14 @@ def __init__(self, name, info, doc, ifcond, features,
> def check(self, schema):
> super().check(schema)
> if self._arg_type_name:
> - self.arg_type = schema.resolve_type(
> + arg_type = schema.resolve_type(
> self._arg_type_name, self.info, "command's 'data'")
> - if not isinstance(self.arg_type, QAPISchemaObjectType):
> + if not isinstance(arg_type, QAPISchemaObjectType):
> raise QAPISemError(
> self.info,
> "command's 'data' cannot take %s"
> - % self.arg_type.describe())
> + % arg_type.describe())
> + self.arg_type = arg_type
> if self.arg_type.variants and not self.boxed:
> raise QAPISemError(
> self.info,
> @@ -848,8 +849,7 @@ def check(self, schema):
> if self.name not in self.info.pragma.command_returns_exceptions:
> typ = self.ret_type
> if isinstance(typ, QAPISchemaArrayType):
> - typ = self.ret_type.element_type
> - assert typ
> + typ = typ.element_type
> if not isinstance(typ, QAPISchemaObjectType):
> raise QAPISemError(
> self.info,
> @@ -885,13 +885,14 @@ def __init__(self, name, info, doc, ifcond, features,
> arg_type, boxed):
> def check(self, schema):
> super().check(schema)
> if self._arg_type_name:
> - self.arg_type = schema.resolve_type(
> + typ = schema.resolve_type(
> self._arg_type_name, self.info, "event's 'data'")
> - if not isinstance(self.arg_type, QAPISchemaObjectType):
> + if not isinstance(typ, QAPISchemaObjectType):
> raise QAPISemError(
> self.info,
> "event's 'data' cannot take %s"
> - % self.arg_type.describe())
> + % typ.describe())
> + self.arg_type = typ
> if self.arg_type.variants and not self.boxed:
> raise QAPISemError(
> self.info,
Harmless enough. I can't quite see the mypy problem, though. Care to
elaborate a bit?
[PATCH 10/19] qapi/schema: make QAPISchemaArrayType.element_type non-Optional, John Snow, 2023/11/15
[PATCH 05/19] qapi/schema: make c_type() and json_type() abstract methods, John Snow, 2023/11/15