diff options
-rw-r--r-- | rtemsspec/items.py | 7 | ||||
-rw-r--r-- | rtemsspec/tests/spec-item-cache-3/invalid.yml | 1 | ||||
-rw-r--r-- | rtemsspec/tests/test_items_itemcache.py | 12 |
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) |