[rtems-central commit] specverify: Introduce SpecVerifier class
Sebastian Huber
sebh at rtems.org
Fri Oct 23 10:55:13 UTC 2020
Module: rtems-central
Branch: master
Commit: 4319cd1400b6942f5b18f2df64a5302a9d7ded50
Changeset: http://git.rtems.org/rtems-central/commit/?id=4319cd1400b6942f5b18f2df64a5302a9d7ded50
Author: Sebastian Huber <sebastian.huber at embedded-brains.de>
Date: Fri Oct 23 11:01:51 2020 +0200
specverify: Introduce SpecVerifier class
---
rtemsspec/specverify.py | 54 ++++++++++++++++++++++++++++---------------------
1 file changed, 31 insertions(+), 23 deletions(-)
diff --git a/rtemsspec/specverify.py b/rtemsspec/specverify.py
index 3e6dd15..c200a06 100644
--- a/rtemsspec/specverify.py
+++ b/rtemsspec/specverify.py
@@ -449,6 +449,36 @@ def _gather_item_verifiers(item: Item, verifier_map: _VerifierMap) -> None:
_create_verifier(link.item, verifier_map)
+class SpecVerifier:
+ """ Verifies items according to the specification of the specification. """
+
+ # pylint: disable=too-few-public-methods
+ def __init__(self, item_cache: ItemCache, root_uid: str):
+ verifier_map = {} # type: _VerifierMap
+ _NameVerifier("name", verifier_map)
+ _UIDVerifier("uid", verifier_map)
+ _Verifier("bool", verifier_map)
+ _Verifier("float", verifier_map)
+ _Verifier("int", verifier_map)
+ _Verifier("none", verifier_map)
+ _Verifier("str", verifier_map)
+ try:
+ root_item = item_cache[root_uid]
+ except KeyError:
+ logging.error("root type item does not exist in item cache")
+ return
+ self._root_verifier = _create_verifier(root_item, verifier_map)
+ _gather_item_verifiers(root_item, verifier_map)
+ for name in sorted(verifier_map):
+ logging.info("type: %s", name)
+ verifier_map[name].resolve_type_refinements()
+ logging.info("start specification item verification")
+ for key in sorted(item_cache.all):
+ item = item_cache[key]
+ self._root_verifier.verify(_Path(item, f"{item.uid}:"), item.data)
+ logging.info("finished specification item verification")
+
+
def verify(config: dict, item_cache: ItemCache) -> None:
"""
Verifies specification items according to the configuration.
@@ -456,31 +486,9 @@ def verify(config: dict, item_cache: ItemCache) -> None:
:param config: A dictionary with configuration entries.
:param item_cache: The specification item cache.
"""
- verifier_map = {} # type: _VerifierMap
- _NameVerifier("name", verifier_map)
- _UIDVerifier("uid", verifier_map)
- _Verifier("bool", verifier_map)
- _Verifier("float", verifier_map)
- _Verifier("int", verifier_map)
- _Verifier("none", verifier_map)
- _Verifier("str", verifier_map)
try:
root_uid = config["root-type"]
except KeyError:
logging.error("configuration has no root type")
return
- try:
- root_item = item_cache[root_uid]
- except KeyError:
- logging.error("root type item does not exist in item cache")
- return
- root_verifier = _create_verifier(root_item, verifier_map)
- _gather_item_verifiers(root_item, verifier_map)
- for name in sorted(verifier_map):
- logging.info("type: %s", name)
- verifier_map[name].resolve_type_refinements()
- logging.info("start specification item verification")
- for key in sorted(item_cache.all):
- item = item_cache[key]
- root_verifier.verify(_Path(item, f"{item.uid}:"), item.data)
- logging.info("finished specification item verification")
+ SpecVerifier(item_cache, root_uid)
More information about the vc
mailing list