Added support for "owner" requirement when declaring `dependencies using library.json`

This commit is contained in:
Ivan Kravets
2020-09-09 13:10:42 +03:00
parent cd59c829e0
commit c454ae336d
6 changed files with 23 additions and 10 deletions

View File

@ -11,6 +11,7 @@ PlatformIO Core 5
5.0.1 (2020-??-??) 5.0.1 (2020-??-??)
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~
- Added support for "owner" requirement when declaring ``dependencies`` using `library.json <https://docs.platformio.org/page/librarymanager/config.html#dependencies>`__
- Fixed an issue when using a custom git/ssh package with `platform_packages <https://docs.platformio.org/page/projectconf/section_env_platform.html#platform-packages>`__ option (`issue #3624 <https://github.com/platformio/platformio-core/issues/3624>`_) - Fixed an issue when using a custom git/ssh package with `platform_packages <https://docs.platformio.org/page/projectconf/section_env_platform.html#platform-packages>`__ option (`issue #3624 <https://github.com/platformio/platformio-core/issues/3624>`_)
- Fixed an issue with "ImportError: cannot import name '_get_backend' from 'cryptography.hazmat.backends'" when using `Remote Development <https://docs.platformio.org/page/plus/pio-remote.html>`__ on RaspberryPi device (`issue #3652 <https://github.com/platformio/platformio-core/issues/3652>`_) - Fixed an issue with "ImportError: cannot import name '_get_backend' from 'cryptography.hazmat.backends'" when using `Remote Development <https://docs.platformio.org/page/plus/pio-remote.html>`__ on RaspberryPi device (`issue #3652 <https://github.com/platformio/platformio-core/issues/3652>`_)
- Fixed an issue when `pio package unpublish <https://docs.platformio.org/page/core/userguide/package/cmd_unpublish.html>`__ command crashes (`issue #3660 <https://github.com/platformio/platformio-core/issues/3660>`_) - Fixed an issue when `pio package unpublish <https://docs.platformio.org/page/core/userguide/package/cmd_unpublish.html>`__ command crashes (`issue #3660 <https://github.com/platformio/platformio-core/issues/3660>`_)

2
docs

Submodule docs updated: 30ff70a4ce...d1043ec065

View File

@ -80,7 +80,9 @@ class LibraryPackageManager(BasePackageManager): # pylint: disable=too-many-anc
def _install_dependency(self, dependency, silent=False): def _install_dependency(self, dependency, silent=False):
spec = PackageSpec( spec = PackageSpec(
name=dependency.get("name"), requirements=dependency.get("version") owner=dependency.get("owner"),
name=dependency.get("name"),
requirements=dependency.get("version"),
) )
search_filters = { search_filters = {
key: value key: value

View File

@ -388,7 +388,15 @@ class LibraryJsonManifestParser(BaseManifestParser):
raw = [raw] raw = [raw]
if isinstance(raw, dict): if isinstance(raw, dict):
return [dict(name=name, version=version) for name, version in raw.items()] result = []
for name, version in raw.items():
if "/" in name:
owner, name = name.split("/", 1)
result.append(dict(owner=owner, name=name, version=version))
else:
result.append(dict(name=name, version=version))
return result
if isinstance(raw, list): if isinstance(raw, list):
for i, dependency in enumerate(raw): for i, dependency in enumerate(raw):
if isinstance(dependency, dict): if isinstance(dependency, dict):

View File

@ -106,6 +106,7 @@ class RepositorySchema(StrictSchema):
class DependencySchema(StrictSchema): class DependencySchema(StrictSchema):
owner = fields.Str(validate=validate.Length(min=1, max=100))
name = fields.Str(required=True, validate=validate.Length(min=1, max=100)) name = fields.Str(required=True, validate=validate.Length(min=1, max=100))
version = fields.Str(validate=validate.Length(min=1, max=100)) version = fields.Str(validate=validate.Length(min=1, max=100))
authors = StrictListField(fields.Str(validate=validate.Length(min=1, max=50))) authors = StrictListField(fields.Str(validate=validate.Length(min=1, max=50)))

View File

@ -44,7 +44,7 @@ def test_library_json_parser():
"dependencies": { "dependencies": {
"deps1": "1.2.0", "deps1": "1.2.0",
"deps2": "https://github.com/username/package.git", "deps2": "https://github.com/username/package.git",
"@owner/deps3": "^2.1.3" "owner/deps3": "^2.1.3"
}, },
"customField": "Custom Value" "customField": "Custom Value"
} }
@ -65,9 +65,9 @@ def test_library_json_parser():
"homepage": "http://old.url.format", "homepage": "http://old.url.format",
"build": {"flags": ["-DHELLO"]}, "build": {"flags": ["-DHELLO"]},
"dependencies": [ "dependencies": [
{"name": "@owner/deps3", "version": "^2.1.3"},
{"name": "deps1", "version": "1.2.0"}, {"name": "deps1", "version": "1.2.0"},
{"name": "deps2", "version": "https://github.com/username/package.git"}, {"name": "deps2", "version": "https://github.com/username/package.git"},
{"owner": "owner", "name": "deps3", "version": "^2.1.3"},
], ],
"customField": "Custom Value", "customField": "Custom Value",
}, },
@ -83,7 +83,7 @@ def test_library_json_parser():
}, },
"dependencies": [ "dependencies": [
{"name": "deps1", "version": "1.0.0"}, {"name": "deps1", "version": "1.0.0"},
{"name": "@owner/deps2", "version": "1.0.0", "platforms": "*", "frameworks": "arduino, espidf"}, {"owner": "owner", "name": "deps2", "version": "1.0.0", "platforms": "*", "frameworks": "arduino, espidf"},
{"name": "deps3", "version": "1.0.0", "platforms": ["ststm32", "sifive"]} {"name": "deps3", "version": "1.0.0", "platforms": ["ststm32", "sifive"]}
] ]
} }
@ -98,13 +98,14 @@ def test_library_json_parser():
"export": {"exclude": ["audio_samples"]}, "export": {"exclude": ["audio_samples"]},
"platforms": ["atmelavr"], "platforms": ["atmelavr"],
"dependencies": [ "dependencies": [
{"name": "deps1", "version": "1.0.0"},
{ {
"name": "@owner/deps2", "owner": "owner",
"name": "deps2",
"version": "1.0.0", "version": "1.0.0",
"platforms": ["*"], "platforms": ["*"],
"frameworks": ["arduino", "espidf"], "frameworks": ["arduino", "espidf"],
}, },
{"name": "deps1", "version": "1.0.0"},
{ {
"name": "deps3", "name": "deps3",
"version": "1.0.0", "version": "1.0.0",
@ -115,16 +116,16 @@ def test_library_json_parser():
) )
raw_data = parser.LibraryJsonManifestParser( raw_data = parser.LibraryJsonManifestParser(
'{"dependencies": ["dep1", "dep2", "@owner/dep3"]}' '{"dependencies": ["dep1", "dep2", "owner/dep3@1.2.3"]}'
).as_dict() ).as_dict()
raw_data["dependencies"] = sorted(raw_data["dependencies"], key=lambda a: a["name"]) raw_data["dependencies"] = sorted(raw_data["dependencies"], key=lambda a: a["name"])
assert not jsondiff.diff( assert not jsondiff.diff(
raw_data, raw_data,
{ {
"dependencies": [ "dependencies": [
{"name": "@owner/dep3"},
{"name": "dep1"}, {"name": "dep1"},
{"name": "dep2"}, {"name": "dep2"},
{"name": "owner/dep3@1.2.3"},
], ],
}, },
) )