From 926dda5c9e12cf48947fba95bdd85ebff0099804 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Tue, 30 May 2023 11:40:33 +0200 Subject: items: Derive ItemCache from dict --- rtemsspec/build.py | 4 ++-- rtemsspec/items.py | 26 +++++++++----------------- rtemsspec/specverify.py | 2 +- rtemsspec/tests/test_items_item.py | 4 ++-- rtemsspec/tests/test_items_itemcache.py | 9 ++++----- rtemsspec/tests/test_validation.py | 2 +- rtemsspec/validation.py | 2 +- specview.py | 4 ++-- 8 files changed, 22 insertions(+), 31 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: """ @@ -802,11 +799,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. """ @@ -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) diff --git a/specview.py b/specview.py index 23367984..9cef096c 100755 --- a/specview.py +++ b/specview.py @@ -284,7 +284,7 @@ def _gather_design_components(item: Item, components: List[Item]) -> bool: def _design(item_cache: ItemCache) -> None: - for item in item_cache.all.values(): + for item in item_cache.values(): if not item.enabled: continue components: List[Item] = [] @@ -476,7 +476,7 @@ def main() -> None: _action_list(item_cache[uid]) elif args.filter == "orphan": _validate(root) - for item in item_cache.all.values(): + for item in item_cache.values(): if item["type"] in ["build", "spec"]: continue if item.enabled and "_validated" not in item: -- cgit v1.2.3