Skip to content

Commit c454ae3

Browse files
committed
Added support for "owner" requirement when declaring dependencies using library.json
1 parent cd59c82 commit c454ae3

File tree

6 files changed

+23
-10
lines changed

6 files changed

+23
-10
lines changed

HISTORY.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ PlatformIO Core 5
1111
5.0.1 (2020-??-??)
1212
~~~~~~~~~~~~~~~~~~
1313

14+
- Added support for "owner" requirement when declaring ``dependencies`` using `library.json <https://docs.platformio.org/page/librarymanager/config.html#dependencies>`__
1415
- 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>`_)
1516
- 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>`_)
1617
- 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>`_)

docs

platformio/package/manager/library.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,9 @@ def install_dependencies(self, pkg, silent=False):
8080

8181
def _install_dependency(self, dependency, silent=False):
8282
spec = PackageSpec(
83-
name=dependency.get("name"), requirements=dependency.get("version")
83+
owner=dependency.get("owner"),
84+
name=dependency.get("name"),
85+
requirements=dependency.get("version"),
8486
)
8587
search_filters = {
8688
key: value

platformio/package/manifest/parser.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,15 @@ def _parse_dependencies(raw):
388388
raw = [raw]
389389

390390
if isinstance(raw, dict):
391-
return [dict(name=name, version=version) for name, version in raw.items()]
391+
result = []
392+
for name, version in raw.items():
393+
if "/" in name:
394+
owner, name = name.split("/", 1)
395+
result.append(dict(owner=owner, name=name, version=version))
396+
else:
397+
result.append(dict(name=name, version=version))
398+
return result
399+
392400
if isinstance(raw, list):
393401
for i, dependency in enumerate(raw):
394402
if isinstance(dependency, dict):

platformio/package/manifest/schema.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ class RepositorySchema(StrictSchema):
106106

107107

108108
class DependencySchema(StrictSchema):
109+
owner = fields.Str(validate=validate.Length(min=1, max=100))
109110
name = fields.Str(required=True, validate=validate.Length(min=1, max=100))
110111
version = fields.Str(validate=validate.Length(min=1, max=100))
111112
authors = StrictListField(fields.Str(validate=validate.Length(min=1, max=50)))

tests/package/test_manifest.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ def test_library_json_parser():
4444
"dependencies": {
4545
"deps1": "1.2.0",
4646
"deps2": "https://github.com/username/package.git",
47-
"@owner/deps3": "^2.1.3"
47+
"owner/deps3": "^2.1.3"
4848
},
4949
"customField": "Custom Value"
5050
}
@@ -65,9 +65,9 @@ def test_library_json_parser():
6565
"homepage": "http://old.url.format",
6666
"build": {"flags": ["-DHELLO"]},
6767
"dependencies": [
68-
{"name": "@owner/deps3", "version": "^2.1.3"},
6968
{"name": "deps1", "version": "1.2.0"},
7069
{"name": "deps2", "version": "https://github.com/username/package.git"},
70+
{"owner": "owner", "name": "deps3", "version": "^2.1.3"},
7171
],
7272
"customField": "Custom Value",
7373
},
@@ -83,7 +83,7 @@ def test_library_json_parser():
8383
},
8484
"dependencies": [
8585
{"name": "deps1", "version": "1.0.0"},
86-
{"name": "@owner/deps2", "version": "1.0.0", "platforms": "*", "frameworks": "arduino, espidf"},
86+
{"owner": "owner", "name": "deps2", "version": "1.0.0", "platforms": "*", "frameworks": "arduino, espidf"},
8787
{"name": "deps3", "version": "1.0.0", "platforms": ["ststm32", "sifive"]}
8888
]
8989
}
@@ -98,13 +98,14 @@ def test_library_json_parser():
9898
"export": {"exclude": ["audio_samples"]},
9999
"platforms": ["atmelavr"],
100100
"dependencies": [
101+
{"name": "deps1", "version": "1.0.0"},
101102
{
102-
"name": "@owner/deps2",
103+
"owner": "owner",
104+
"name": "deps2",
103105
"version": "1.0.0",
104106
"platforms": ["*"],
105107
"frameworks": ["arduino", "espidf"],
106108
},
107-
{"name": "deps1", "version": "1.0.0"},
108109
{
109110
"name": "deps3",
110111
"version": "1.0.0",
@@ -115,16 +116,16 @@ def test_library_json_parser():
115116
)
116117

117118
raw_data = parser.LibraryJsonManifestParser(
118-
'{"dependencies": ["dep1", "dep2", "@owner/dep3"]}'
119+
'{"dependencies": ["dep1", "dep2", "owner/dep3@1.2.3"]}'
119120
).as_dict()
120121
raw_data["dependencies"] = sorted(raw_data["dependencies"], key=lambda a: a["name"])
121122
assert not jsondiff.diff(
122123
raw_data,
123124
{
124125
"dependencies": [
125-
{"name": "@owner/dep3"},
126126
{"name": "dep1"},
127127
{"name": "dep2"},
128+
{"name": "owner/dep3@1.2.3"},
128129
],
129130
},
130131
)

0 commit comments

Comments
 (0)