John Snow <js...@redhat.com> writes: > The types will be used in forthcoming patches to add typing. These types > describe the layout and structure of the objects passed to > _tree_to_qlit, but lack the power to describe annotations until the next > commit. > > Signed-off-by: John Snow <js...@redhat.com> > --- > scripts/qapi/introspect.py | 30 +++++++++++++++++++++++++++++- > 1 file changed, 29 insertions(+), 1 deletion(-) > > diff --git a/scripts/qapi/introspect.py b/scripts/qapi/introspect.py > index 45231d2abc3..8e019b4a26a 100644 > --- a/scripts/qapi/introspect.py > +++ b/scripts/qapi/introspect.py > @@ -10,7 +10,13 @@ > See the COPYING file in the top-level directory. > """ > > -from typing import Optional > +from typing import ( > + Any, > + Dict, > + List, > + Optional, > + Union, > +) > > from .common import ( > c_name, > @@ -26,6 +32,28 @@ > ) > > > +# This module constructs a tree data structure that is used to > +# generate the introspection information for QEMU. It behaves similarly > +# to a JSON value. > +# > +# A complexity over JSON is that our values may or may not be annotated. > +# > +# Un-annotated values may be: > +# Scalar: str, bool, None. > +# Non-scalar: List, Dict > +# _value = Union[str, bool, None, Dict[str, TreeValue], List[TreeValue]] > +# > +# With optional annotations, the type of all values is: > +# TreeValue = Union[_value, Annotated[_value]] > +# > +# Sadly, mypy does not support recursive types, so we must approximate this. > +_stub = Any > +_scalar = Union[str, bool, None] > +_nonscalar = Union[Dict[str, _stub], List[_stub]] > +_value = Union[_scalar, _nonscalar] > +# TreeValue = TODO, in a forthcoming commit. > + > + > def _make_tree(obj, ifcond, comment=None): > extra = { > 'if': ifcond,
We discussed the naming of these type aliases review of v4. v5 arrived before we reached a conclusion. That's okay. I'm still interested in finishing the discussion, of course.