summaryrefslogtreecommitdiff
path: root/rtemsspec
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2023-05-30 11:40:33 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2023-06-14 13:58:42 +0200
commit926dda5c9e12cf48947fba95bdd85ebff0099804 (patch)
treef7d0fbc50c43bc5cff88b7c308537e8aba73dc46 /rtemsspec
parent0985eaadc9401f7242029deb005089b1f827cfe3 (diff)
items: Derive ItemCache from dict
Diffstat (limited to 'rtemsspec')
-rw-r--r--rtemsspec/build.py4
-rw-r--r--rtemsspec/items.py26
-rwxr-xr-xrtemsspec/specverify.py2
-rw-r--r--rtemsspec/tests/test_items_item.py4
-rw-r--r--rtemsspec/tests/test_items_itemcache.py9
-rw-r--r--rtemsspec/tests/test_validation.py2
-rw-r--r--rtemsspec/validation.py2
7 files changed, 20 insertions, 29 deletions
diff --git a/rtemsspec/build.py b/rtemsspec/build.py
index 8570cbd9..595ff5fe 100644
--- a/rtemsspec/build.py
+++ b/rtemsspec/build.py
@@ -84,7 +84,7 @@ def _gather_source_files(item: Item, enabled: List[str],
def _gather_test_header(item_cache: ItemCache, enabled: List[str],
source_files: List[str]) -> None:
- for item in item_cache.all.values():
+ for item in item_cache.values():
tests = ["test-case", "requirement/functional/action"]
if item.type in tests and item["test-header"] and item.is_enabled(
enabled):
@@ -96,7 +96,7 @@ def gather_files(config: dict,
test_header: bool = True) -> List[str]:
""" Generates a list of files form the build specification. """
bsps: BSPMap = {}
- for item in item_cache.all.values():
+ for item in item_cache.values():
if item["type"] == "build" and item["build-type"] == "bsp":
arch_bsps = bsps.setdefault(item["arch"].strip(), {})
arch_bsps[item["bsp"].strip()] = item
diff --git a/rtemsspec/items.py b/rtemsspec/items.py
index da68d4f3..a3890f6f 100644
--- a/rtemsspec/items.py
+++ b/rtemsspec/items.py
@@ -755,7 +755,7 @@ def _resolve_proxy(proxy: Item, is_link_enabled: Callable[[Link],
proxy._links_to_parents = member._links_to_parents
-class ItemCache:
+class ItemCache(dict):
""" This class provides a cache of specification items. """
# pylint: disable=too-many-instance-attributes
@@ -764,17 +764,17 @@ class ItemCache:
post_process_load: Optional[Callable[[ItemMap], None]] = None,
is_item_enabled: Callable[[List[str], Item],
bool] = _is_item_enabled):
+ super().__init__()
self._cache_index: int = 0
self._cache_directory: str = os.path.abspath(
config.get("cache-directory", "cache"))
- self._items: ItemMap = {}
self._types: Set[str] = set()
self.items_by_type: Dict[str, List[Item]] = {}
self._updates = 0
for path in config["paths"]:
self.load_items(path)
if post_process_load:
- post_process_load(self._items)
+ post_process_load(self)
if config.get("initialize-links", True):
self._init_parents()
self._init_children()
@@ -785,15 +785,12 @@ class ItemCache:
self._root_type = None
self._enabled = config.get("enabled", [])
self._is_enabled = is_item_enabled
- for item in self._items.values():
+ for item in self.values():
self._set_type(item)
item["_enabled"] = is_item_enabled(self._enabled, item)
if config.get("resolve-proxies", False):
self.resolve_proxies()
- def __getitem__(self, uid: str) -> Item:
- return self._items[uid]
-
@property
def updates(self) -> bool:
"""
@@ -803,11 +800,6 @@ class ItemCache:
return self._updates > 0
@property
- def all(self) -> ItemMap:
- """ Returns the map of all specification items. """
- return self._items
-
- @property
def types(self) -> Set[str]:
""" Returns the types of the items. """
return self._types
@@ -827,7 +819,7 @@ class ItemCache:
"""
self._enabled = enabled
self._is_enabled = is_item_enabled
- for item in self._items.values():
+ for item in self.values():
item["_enabled"] = is_item_enabled(enabled, item)
def resolve_proxies(
@@ -861,7 +853,7 @@ class ItemCache:
def _add_item(self, uid: str, data: Any) -> Item:
item = Item(self, uid, data)
- self._items[uid] = item
+ self[uid] = item
return item
def _load_items_in_dir(self, base: str, path: str, cache_file: str,
@@ -930,12 +922,12 @@ class ItemCache:
self._save_data(file, data2)
def _init_parents(self) -> None:
- for item in self._items.values():
+ for item in self.values():
item.init_parents(self)
def _init_children(self) -> None:
- for uid in sorted(self._items):
- self._items[uid].init_children()
+ for item in sorted(self.values()):
+ item.init_children()
def _set_type(self, item: Item) -> None:
spec_type = self._root_type
diff --git a/rtemsspec/specverify.py b/rtemsspec/specverify.py
index 010a8d62..b5635a02 100755
--- a/rtemsspec/specverify.py
+++ b/rtemsspec/specverify.py
@@ -528,7 +528,7 @@ class SpecVerifier:
logging.error("root type item does not exist in item cache")
else:
logging.info("start specification item verification")
- for key in sorted(item_cache.all):
+ for key in sorted(item_cache):
item = item_cache[key]
self._root_verifier.verify(_Path(item, f"{item.uid}:"),
item.data)
diff --git a/rtemsspec/tests/test_items_item.py b/rtemsspec/tests/test_items_item.py
index a834097b..1f107e56 100644
--- a/rtemsspec/tests/test_items_item.py
+++ b/rtemsspec/tests/test_items_item.py
@@ -182,10 +182,10 @@ def test_parents():
child["_enabled"] = True
parent = Item(item_cache, "p", {"links": []})
parent["_enabled"] = True
- item_cache._items["p"] = parent
+ item_cache["p"] = parent
parent_2 = Item(EmptyItemCache(), "p2", {})
parent_2["_enabled"] = False
- item_cache._items["p2"] = parent_2
+ item_cache["p2"] = parent_2
child.init_parents(item_cache)
for link in child.links_to_parents():
link.item.add_link_to_child(Link.create(link, child))
diff --git a/rtemsspec/tests/test_items_itemcache.py b/rtemsspec/tests/test_items_itemcache.py
index ea0db0d4..2c24d669 100644
--- a/rtemsspec/tests/test_items_itemcache.py
+++ b/rtemsspec/tests/test_items_itemcache.py
@@ -49,7 +49,7 @@ def test_load(tmpdir):
assert item_cache.enabled == ["foobar"]
assert len(item_cache.types) == 1
assert list(item_cache.types)[0] == ""
- assert item_count == len(item_cache.all)
+ assert item_count == len(item_cache)
assert item_cache.updates
cache_dir = config["cache-directory"]
assert os.path.exists(os.path.join(cache_dir, "0", "spec", "spec.pickle"))
@@ -63,10 +63,9 @@ def test_load(tmpdir):
assert p["v"] == "p"
assert p.map("/p") == p
assert p.map("p") == p
- a = item_cache.all
- assert len(a) == 7
- assert a["/p"]["v"] == "p"
- assert a["/d/c"]["v"] == "c"
+ assert len(item_cache) == 7
+ assert item_cache["/p"]["v"] == "p"
+ assert item_cache["/d/c"]["v"] == "c"
item_cache.set_enabled([])
assert p.enabled
item_cache_2 = ItemCache(config)
diff --git a/rtemsspec/tests/test_validation.py b/rtemsspec/tests/test_validation.py
index 934fec3f..c4872d49 100644
--- a/rtemsspec/tests/test_validation.py
+++ b/rtemsspec/tests/test_validation.py
@@ -2414,7 +2414,7 @@ void Action2_Run( int *a, int b, int *c )
def _add_item(item_cache, uid, data, item_type):
item = Item(item_cache, uid, data)
item["_type"] = item_type
- item_cache.all[item.uid] = item
+ item_cache[item.uid] = item
return item
diff --git a/rtemsspec/validation.py b/rtemsspec/validation.py
index a500fa13..363ce568 100644
--- a/rtemsspec/validation.py
+++ b/rtemsspec/validation.py
@@ -1176,7 +1176,7 @@ def _gather(
item_cache: ItemCache) -> Tuple[Dict[str, _SourceFile], _CaseToSuite]:
source_files: Dict[str, _SourceFile] = {}
test_programs: List[_TestProgram] = []
- for item in item_cache.all.values():
+ for item in item_cache.values():
_GATHER.get(item.type, _gather_default)(item, source_files,
test_programs)