summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2020-08-12 08:04:50 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2020-09-18 13:27:36 +0200
commit877756ff037bc2df61aa6ee98362fc7c8ae0f44f (patch)
tree61259a16b9e9aa6ee0a238e12116c827b43ec2d6
parentitems: Add normalize_key_path() (diff)
downloadrtems-central-877756ff037bc2df61aa6ee98362fc7c8ae0f44f.tar.bz2
items: Return key path in ItemMapper.map()
-rw-r--r--rtemsspec/items.py9
-rw-r--r--rtemsspec/tests/test_items_itemcache.py10
-rw-r--r--rtemsspec/validation.py6
3 files changed, 14 insertions, 11 deletions
diff --git a/rtemsspec/items.py b/rtemsspec/items.py
index 09ba2a19..fa64f009 100644
--- a/rtemsspec/items.py
+++ b/rtemsspec/items.py
@@ -351,7 +351,7 @@ class ItemMapper(Mapping[str, object]):
yield
self.pop_prefix()
- def map(self, identifier: str) -> Tuple[Item, Any]:
+ def map(self, identifier: str) -> Tuple[Item, str, Any]:
"""
Maps an identifier to the corresponding item and attribute value.
"""
@@ -367,13 +367,14 @@ class ItemMapper(Mapping[str, object]):
else:
item = self._item.map(uid)
prefix = ""
- value = item.get_by_key_path(key_path, prefix, self.get_value)
+ key_path = normalize_key_path(key_path, prefix)
+ value = item.get_by_normalized_key_path(key_path, self.get_value)
for func in pipes:
value = getattr(self, func)(value)
- return item, value
+ return item, key_path, value
def __getitem__(self, identifier):
- return self.map(identifier)[1]
+ return self.map(identifier)[2]
def __iter__(self):
raise StopIteration
diff --git a/rtemsspec/tests/test_items_itemcache.py b/rtemsspec/tests/test_items_itemcache.py
index 62aab04e..23237603 100644
--- a/rtemsspec/tests/test_items_itemcache.py
+++ b/rtemsspec/tests/test_items_itemcache.py
@@ -102,8 +102,9 @@ def test_item_mapper(tmpdir):
with mapper.prefix("v"):
assert mapper[".:."] == "p"
assert mapper[".:../x/y"] == "z"
- item_2, value_2 = mapper.map(".:.")
- assert item == item_2
+ item_2, key_path_2, value_2 = mapper.map(".:.")
+ assert item_2 == item
+ assert key_path_2 == "/v"
assert value_2 == "p"
assert mapper.substitute("$$${.:.}") == "$p"
assert mapper.substitute_with_prefix("$$${.:.}", "v") == "$p"
@@ -118,8 +119,9 @@ def test_item_mapper(tmpdir):
assert mapper["d/c:a/x-to-b|u|v"] == "vue"
assert mapper["d/c:a/f[1]"] == 2
assert mapper["d/c:a/../a/f[3]/g[0]|dup"] == 8
- item_3, value_3 = mapper.map("/p:/v")
- assert item == item_3
+ item_3, key_path_3, value_3 = mapper.map("/p:/v")
+ assert item_3 == item
+ assert key_path_3 == "/v"
assert value_3 == "p"
with pytest.raises(StopIteration):
for something in mapper:
diff --git a/rtemsspec/validation.py b/rtemsspec/validation.py
index 4154588e..5cfff893 100644
--- a/rtemsspec/validation.py
+++ b/rtemsspec/validation.py
@@ -60,16 +60,16 @@ class _Mapper(ItemMapper):
""" Resets the test step counter. """
self._step = 0
- def map(self, identifier: str) -> Tuple[Item, Any]:
+ def map(self, identifier: str) -> Tuple[Item, str, Any]:
if identifier == "step":
step = self._step
self._step = step + 1
- return self._item, str(step)
+ return self._item, "step", str(step)
match = _STEPS.search(identifier)
if match:
inc = int(match.group(1))
self._step += inc
- return self._item, f"Accounts for {inc} test plan steps"
+ return self._item, "step", f"Accounts for {inc} test plan steps"
return super().map(identifier)