Daniel P. Berrangé <berra...@redhat.com> writes: > This replaces use of the constants from the QapiSpecialFeatures > enum, with constants from the auto-generate QapiFeatures enum > in qapi-features.h > > The 'deprecated' and 'unstable' features still have a little bit of > special handling, being force defined to be the 1st + 2nd features > in the enum, regardless of whether they're used in the schema. This > retains compatibility with common code that references the features > via the QapiSpecialFeatures constants. > > Signed-off-by: Daniel P. Berrangé <berra...@redhat.com>
Daniel, feel free to ignore this at least for now. I'm trying to learn some typing lore from John. v3 made mypy unhappy. I asked John for advice, and also posted a solution involving ValuesView I hacked up myself. Daniel took it for v4. John suggested to use List. I now wonder whether could use Iterable. I'll show the three solutions inline. John, thoughts? [...] > diff --git a/scripts/qapi/features.py b/scripts/qapi/features.py > new file mode 100644 > index 0000000000..be3e5d03ff > --- /dev/null > +++ b/scripts/qapi/features.py > @@ -0,0 +1,51 @@ > +""" > +QAPI features generator > + > +Copyright 2024 Red Hat > + > +This work is licensed under the terms of the GNU GPL, version 2. > +# See the COPYING file in the top-level directory. > +""" > + > +from typing import Dict, ValuesView > + > +from .common import c_enum_const, c_name > +from .gen import QAPISchemaMonolithicCVisitor > +from .schema import ( > + QAPISchema, > + QAPISchemaFeature, > +) > + > + > +class QAPISchemaGenFeatureVisitor(QAPISchemaMonolithicCVisitor): > + > + def __init__(self, prefix: str): > + super().__init__( > + prefix, 'qapi-features', > + ' * Schema-defined QAPI features', > + __doc__) > + > + self.features: ValuesView[QAPISchemaFeature] This is the ValuesView solution. The List solution: self.features: List[QAPISchemaFeature] = [] The Iterable solution: self.features: Iterable[QAPISchemaFeature] [...] > diff --git a/scripts/qapi/schema.py b/scripts/qapi/schema.py > index e97c978d38..7f70969c09 100644 > --- a/scripts/qapi/schema.py > +++ b/scripts/qapi/schema.py [...] > @@ -1147,6 +1161,9 @@ def __init__(self, fname: str): > self._def_exprs(exprs) > self.check() > > + def features(self) -> ValuesView[QAPISchemaFeature]: > + return self._feature_dict.values() This is the ValuesView solution. The List solution: def features(self) -> List[QAPISchemaFeature]: return list(self._feature_dict.values()) The Iterable solution: def features(self) -> Iterable[QAPISchemaFeature]: return self._feature_dict.values() > + > def _def_entity(self, ent: QAPISchemaEntity) -> None: > self._entity_list.append(ent) > [...]