Parse package dependencies declared as a list of strings

This commit is contained in:
Ivan Kravets
2020-02-18 21:55:01 +02:00
parent e15f227c48
commit 1c87f83463
2 changed files with 24 additions and 7 deletions

View File

@ -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"

View File

@ -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"]})