summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2020-11-20 14:03:06 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2020-11-20 14:04:08 +0100
commit805ebf0e54a3f730e0d61fff7bb18037198b2ed3 (patch)
tree3b970f708f310fff5856389f9f493d51806acabe
parentspec: Restore RTEMS_COMPILER_UNUSED_ATTRIBUTE (diff)
downloadrtems-central-805ebf0e54a3f730e0d61fff7bb18037198b2ed3.tar.bz2
items: Improve YAML parser error messages
-rw-r--r--rtemsspec/items.py7
-rw-r--r--rtemsspec/tests/spec-item-cache-3/invalid.yml1
-rw-r--r--rtemsspec/tests/test_items_itemcache.py12
3 files changed, 19 insertions, 1 deletions
diff --git a/rtemsspec/items.py b/rtemsspec/items.py
index 6e87245a..5b7a95af 100644
--- a/rtemsspec/items.py
+++ b/rtemsspec/items.py
@@ -497,7 +497,12 @@ def _gather_spec_refinements(item: Item) -> Optional[_SpecType]:
def _load_item(path: str, uid: str) -> Any:
with open(path, "r") as src:
- data = yaml.safe_load(src.read())
+ try:
+ data = yaml.safe_load(src.read())
+ except yaml.parser.ParserError as err:
+ msg = ("YAML parser error while loading specification item file "
+ f"'{path}': {str(err)}")
+ raise IOError(msg) from err
data["_file"] = os.path.abspath(path)
data["_uid"] = uid
return data
diff --git a/rtemsspec/tests/spec-item-cache-3/invalid.yml b/rtemsspec/tests/spec-item-cache-3/invalid.yml
new file mode 100644
index 00000000..397db75f
--- /dev/null
+++ b/rtemsspec/tests/spec-item-cache-3/invalid.yml
@@ -0,0 +1 @@
+:
diff --git a/rtemsspec/tests/test_items_itemcache.py b/rtemsspec/tests/test_items_itemcache.py
index cb0969e0..05affc24 100644
--- a/rtemsspec/tests/test_items_itemcache.py
+++ b/rtemsspec/tests/test_items_itemcache.py
@@ -84,6 +84,18 @@ def test_load_link_error(tmpdir):
ItemCache(config)
+def test_load_parser_error(tmpdir):
+ config = create_item_cache_config_and_copy_spec(tmpdir,
+ "spec-item-cache-3")
+ match = r"""YAML parser error while loading specification item file '.*invalid.yml': while parsing a block mapping
+expected <block end>, but found ':'
+ in "<unicode string>", line 1, column 1:
+ :
+ \^"""
+ with pytest.raises(IOError, match=match):
+ ItemCache(config)
+
+
class Mapper(ItemMapper):
def __init__(self, item):
super().__init__(item)