[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v3 4/7] qapi/expr: add typing workaround for AbstractSet
From: |
Markus Armbruster |
Subject: |
Re: [PATCH v3 4/7] qapi/expr: add typing workaround for AbstractSet |
Date: |
Fri, 10 Feb 2023 16:44:17 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/28.2 (gnu/linux) |
John Snow <jsnow@redhat.com> writes:
> mypy can only narrow the type of `Mapping[str, ...].keys() & Set[str]`
> to `AbstractSet[str]` and not a `Set[str]`. As a result, if the type of
> an expression is changed to a Mapping[], mypy is unsure if the .pop() is
> safe.
>
> A forthcoming commit does exactly that, so wrap the expression in a
> set() constructor to force the intermediate expression to be resolved as
> a mutable type.
>
> Signed-off-by: John Snow <jsnow@redhat.com>
> ---
> scripts/qapi/expr.py | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/scripts/qapi/expr.py b/scripts/qapi/expr.py
> index b56353bdf84..af802367eff 100644
> --- a/scripts/qapi/expr.py
> +++ b/scripts/qapi/expr.py
> @@ -622,8 +622,8 @@ def check_expr(expr_elem: _JSONObject) -> None:
> if 'include' in expr:
> return
>
> - metas = expr.keys() & {'enum', 'struct', 'union', 'alternate',
> - 'command', 'event'}
> + metas = set(expr.keys() & {
> + 'enum', 'struct', 'union', 'alternate', 'command', 'event'})
> if len(metas) != 1:
> raise QAPISemError(
> info,
"expression must have exactly one key"
" 'enum', 'struct', 'union', 'alternate',"
" 'command', 'event'")
meta = metas.pop()
I'm mildly surprised that the result of operator & is considered
immutable. How could it *not* be a freshly created set? Oh well.
Passing a set to set() is a no-op, so
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Regardless, the code feels a bit too clever to me. It actually did
already when I wrote it, but I the less clever ways I could think of
were also much more verbose.
The code checks that exactly one of a set of keys is present, and which
one it is. Any ideas?
- [PATCH v3 0/7] qapi: static typing conversion, pt5c, John Snow, 2023/02/09
- [PATCH v3 2/7] qapi: update pylint configuration, John Snow, 2023/02/09
- [PATCH v3 1/7] qapi: Update flake8 config, John Snow, 2023/02/09
- [PATCH v3 5/7] qapi/parser: add QAPIExpression type, John Snow, 2023/02/09
- [PATCH v3 7/7] qapi: remove JSON value FIXME, John Snow, 2023/02/09
- [PATCH v3 4/7] qapi/expr: add typing workaround for AbstractSet, John Snow, 2023/02/09
- Re: [PATCH v3 4/7] qapi/expr: add typing workaround for AbstractSet,
Markus Armbruster <=
- [PATCH v3 6/7] qapi: remove _JSONObject, John Snow, 2023/02/09
- [PATCH v3 3/7] qapi/expr: Split check_expr out from check_exprs, John Snow, 2023/02/09