diff --git a/platformio/package/manifest/parser.py b/platformio/package/manifest/parser.py index 35a00386..87d81f03 100644 --- a/platformio/package/manifest/parser.py +++ b/platformio/package/manifest/parser.py @@ -363,13 +363,15 @@ class LibraryJsonManifestParser(BaseManifestParser): return [dict(name=name, version=version) for name, version in raw.items()] if isinstance(raw, list): for i, dependency in enumerate(raw): - assert isinstance(dependency, dict) - for k, v in dependency.items(): - if k not in ("platforms", "frameworks", "authors"): - continue - if "*" in v: - del raw[i][k] - raw[i][k] = util.items_to_list(v) + if isinstance(dependency, dict): + for k, v in dependency.items(): + if k not in ("platforms", "frameworks", "authors"): + continue + if "*" in v: + del raw[i][k] + raw[i][k] = util.items_to_list(v) + else: + raw[i] = {"name": dependency} return raw raise ManifestParserError( "Invalid dependencies format, should be list or dictionary" diff --git a/tests/package/test_manifest.py b/tests/package/test_manifest.py index 22f9691d..80de5e75 100644 --- a/tests/package/test_manifest.py +++ b/tests/package/test_manifest.py @@ -112,6 +112,21 @@ def test_library_json_parser(): }, ) + raw_data = parser.LibraryJsonManifestParser( + '{"dependencies": ["dep1", "dep2", "@owner/dep3"]}' + ).as_dict() + raw_data["dependencies"] = sorted(raw_data["dependencies"], key=lambda a: a["name"]) + assert not jsondiff.diff( + raw_data, + { + "dependencies": [ + {"name": "@owner/dep3"}, + {"name": "dep1"}, + {"name": "dep2"}, + ], + }, + ) + # broken dependencies with pytest.raises(parser.ManifestParserError): parser.LibraryJsonManifestParser({"dependencies": ["deps1", "deps2"]})