Forráskód Böngészése

qapi: Eliminate OrderedDict

We use OrderedDict to ensure dictionary order is insertion order.
Plain dict does that since Python 3.6, but it wasn't guaranteed until
3.7.  Since we have 3.7 now, replace OrderedDict by dict.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-ID: <20250227080757.3978333-3-armbru@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Markus Armbruster 5 hónapja
szülő
commit
5fbc8126ac
3 módosított fájl, 8 hozzáadás és 19 törlés
  1. 2 3
      scripts/qapi/parser.py
  2. 5 6
      scripts/qapi/schema.py
  3. 1 10
      tests/qapi-schema/test-qapi.py

+ 2 - 3
scripts/qapi/parser.py

@@ -14,7 +14,6 @@
 # This work is licensed under the terms of the GNU GPL, version 2.
 # This work is licensed under the terms of the GNU GPL, version 2.
 # See the COPYING file in the top-level directory.
 # See the COPYING file in the top-level directory.
 
 
-from collections import OrderedDict
 import os
 import os
 import re
 import re
 from typing import (
 from typing import (
@@ -154,7 +153,7 @@ def _parse(self) -> None:
                                        "value of 'include' must be a string")
                                        "value of 'include' must be a string")
                 incl_fname = os.path.join(os.path.dirname(self._fname),
                 incl_fname = os.path.join(os.path.dirname(self._fname),
                                           include)
                                           include)
-                self._add_expr(OrderedDict({'include': incl_fname}), info)
+                self._add_expr({'include': incl_fname}, info)
                 exprs_include = self._include(include, info, incl_fname,
                 exprs_include = self._include(include, info, incl_fname,
                                               self._included)
                                               self._included)
                 if exprs_include:
                 if exprs_include:
@@ -355,7 +354,7 @@ def accept(self, skip_comment: bool = True) -> None:
                 raise QAPIParseError(self, "stray '%s'" % match.group(0))
                 raise QAPIParseError(self, "stray '%s'" % match.group(0))
 
 
     def get_members(self) -> Dict[str, object]:
     def get_members(self) -> Dict[str, object]:
-        expr: Dict[str, object] = OrderedDict()
+        expr: Dict[str, object] = {}
         if self.tok == '}':
         if self.tok == '}':
             self.accept()
             self.accept()
             return expr
             return expr

+ 5 - 6
scripts/qapi/schema.py

@@ -19,7 +19,6 @@
 from __future__ import annotations
 from __future__ import annotations
 
 
 from abc import ABC, abstractmethod
 from abc import ABC, abstractmethod
-from collections import OrderedDict
 import os
 import os
 import re
 import re
 from typing import (
 from typing import (
@@ -557,7 +556,7 @@ def check(self, schema: QAPISchema) -> None:
         super().check(schema)
         super().check(schema)
         assert self._checked and not self._check_complete
         assert self._checked and not self._check_complete
 
 
-        seen = OrderedDict()
+        seen = {}
         if self._base_name:
         if self._base_name:
             self.base = schema.resolve_type(self._base_name, self.info,
             self.base = schema.resolve_type(self._base_name, self.info,
                                             "'base'")
                                             "'base'")
@@ -1141,10 +1140,10 @@ def __init__(self, fname: str):
         self.docs = parser.docs
         self.docs = parser.docs
         self._entity_list: List[QAPISchemaEntity] = []
         self._entity_list: List[QAPISchemaEntity] = []
         self._entity_dict: Dict[str, QAPISchemaDefinition] = {}
         self._entity_dict: Dict[str, QAPISchemaDefinition] = {}
-        self._module_dict: Dict[str, QAPISchemaModule] = OrderedDict()
+        self._module_dict: Dict[str, QAPISchemaModule] = {}
         # NB, values in the dict will identify the first encountered
         # NB, values in the dict will identify the first encountered
         # usage of a named feature only
         # usage of a named feature only
-        self._feature_dict: Dict[str, QAPISchemaFeature] = OrderedDict()
+        self._feature_dict: Dict[str, QAPISchemaFeature] = {}
 
 
         # All schemas get the names defined in the QapiSpecialFeature enum.
         # All schemas get the names defined in the QapiSpecialFeature enum.
         # Rely on dict iteration order matching insertion order so that
         # Rely on dict iteration order matching insertion order so that
@@ -1454,7 +1453,7 @@ def _def_command(self, expr: QAPIExpression) -> None:
         ifcond = QAPISchemaIfCond(expr.get('if'))
         ifcond = QAPISchemaIfCond(expr.get('if'))
         info = expr.info
         info = expr.info
         features = self._make_features(expr.get('features'), info)
         features = self._make_features(expr.get('features'), info)
-        if isinstance(data, OrderedDict):
+        if isinstance(data, dict):
             data = self._make_implicit_object_type(
             data = self._make_implicit_object_type(
                 name, info, ifcond,
                 name, info, ifcond,
                 'arg', self._make_members(data, info))
                 'arg', self._make_members(data, info))
@@ -1473,7 +1472,7 @@ def _def_event(self, expr: QAPIExpression) -> None:
         ifcond = QAPISchemaIfCond(expr.get('if'))
         ifcond = QAPISchemaIfCond(expr.get('if'))
         info = expr.info
         info = expr.info
         features = self._make_features(expr.get('features'), info)
         features = self._make_features(expr.get('features'), info)
-        if isinstance(data, OrderedDict):
+        if isinstance(data, dict):
             data = self._make_implicit_object_type(
             data = self._make_implicit_object_type(
                 name, info, ifcond,
                 name, info, ifcond,
                 'arg', self._make_members(data, info))
                 'arg', self._make_members(data, info))

+ 1 - 10
tests/qapi-schema/test-qapi.py

@@ -96,17 +96,8 @@ def _print_variants(variants):
 
 
     @staticmethod
     @staticmethod
     def _print_if(ifcond, indent=4):
     def _print_if(ifcond, indent=4):
-        # TODO Drop this hack after replacing OrderedDict by plain
-        # dict (requires Python 3.7)
-        def _massage(subcond):
-            if isinstance(subcond, str):
-                return subcond
-            if isinstance(subcond, list):
-                return [_massage(val) for val in subcond]
-            return {key: _massage(val) for key, val in subcond.items()}
-
         if ifcond.is_present():
         if ifcond.is_present():
-            print('%sif %s' % (' ' * indent, _massage(ifcond.ifcond)))
+            print('%sif %s' % (' ' * indent, ifcond.ifcond))
 
 
     @classmethod
     @classmethod
     def _print_features(cls, features, indent=4):
     def _print_features(cls, features, indent=4):