Message ID | 20240315152301.3621858-13-armbru@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | qapi: statically type schema.py | expand |
On Fri, Mar 15, 2024, 11:24 AM Markus Armbruster <armbru@redhat.com> wrote: > QAPISchema.lookup_type('FOO') returns a QAPISchemaType when type 'FOO' > exists, else None. It won't return None for built-in types like > 'int'. > > Since mypy can't see that, it'll complain that we assign the > Optional[QAPISchemaType] returned by .lookup_type() to QAPISchemaType > variables. > > Add assertions to help it over the hump. > > Signed-off-by: Markus Armbruster <armbru@redhat.com> > --- > scripts/qapi/introspect.py | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/scripts/qapi/introspect.py b/scripts/qapi/introspect.py > index 67c7d89aae..4679b1bc2c 100644 > --- a/scripts/qapi/introspect.py > +++ b/scripts/qapi/introspect.py > @@ -227,10 +227,14 @@ def _use_type(self, typ: QAPISchemaType) -> str: > > # Map the various integer types to plain int > if typ.json_type() == 'int': > - typ = self._schema.lookup_type('int') > + type_int = self._schema.lookup_type('int') > + assert type_int > + typ = type_int > elif (isinstance(typ, QAPISchemaArrayType) and > typ.element_type.json_type() == 'int'): > - typ = self._schema.lookup_type('intList') > + type_intList = self._schema.lookup_type('intList') > + assert type_intList > + typ = type_intList > # Add type to work queue if new > if typ not in self._used_types: > self._used_types.append(typ) > -- > 2.44.0 > Yeah, if you like this more, go ahead. I know it works because I did it this way at one point! Matter of taste and preference etc. Reviewed-by: John Snow <jsnow@redhat.com> >
diff --git a/scripts/qapi/introspect.py b/scripts/qapi/introspect.py index 67c7d89aae..4679b1bc2c 100644 --- a/scripts/qapi/introspect.py +++ b/scripts/qapi/introspect.py @@ -227,10 +227,14 @@ def _use_type(self, typ: QAPISchemaType) -> str: # Map the various integer types to plain int if typ.json_type() == 'int': - typ = self._schema.lookup_type('int') + type_int = self._schema.lookup_type('int') + assert type_int + typ = type_int elif (isinstance(typ, QAPISchemaArrayType) and typ.element_type.json_type() == 'int'): - typ = self._schema.lookup_type('intList') + type_intList = self._schema.lookup_type('intList') + assert type_intList + typ = type_intList # Add type to work queue if new if typ not in self._used_types: self._used_types.append(typ)
QAPISchema.lookup_type('FOO') returns a QAPISchemaType when type 'FOO' exists, else None. It won't return None for built-in types like 'int'. Since mypy can't see that, it'll complain that we assign the Optional[QAPISchemaType] returned by .lookup_type() to QAPISchemaType variables. Add assertions to help it over the hump. Signed-off-by: Markus Armbruster <armbru@redhat.com> --- scripts/qapi/introspect.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)