Change "examples" field in package manifest to ListOf(ExampleModel)

This commit is contained in:
Ivan Kravets
2019-10-02 11:04:29 +03:00
parent dee2d2c538
commit a2213a1aa4
2 changed files with 21 additions and 19 deletions

View File

@@ -14,13 +14,7 @@
import semantic_version import semantic_version
from platformio.datamodel import ( from platformio.datamodel import DataField, DataModel, ListOfType, StrictDataModel
DataField,
DataModel,
DictOfType,
ListOfType,
StrictDataModel,
)
def validate_semver_field(_, value): def validate_semver_field(_, value):
@@ -48,6 +42,7 @@ class ExportModel(DataModel):
class ExampleModel(DataModel): class ExampleModel(DataModel):
name = DataField(max_length=100, regex=r"^[a-zA-Z\d\-\_ ]+$", required=True)
base = DataField(required=True) base = DataField(required=True)
files = DataField(type=ListOfType(DataField())) files = DataField(type=ListOfType(DataField()))
@@ -77,7 +72,7 @@ class ManifestModel(DataModel):
repository = DataField(type=RepositoryModel) repository = DataField(type=RepositoryModel)
export = DataField(type=ExportModel) export = DataField(type=ExportModel)
examples = DataField(type=DictOfType(ExampleModel)) examples = DataField(type=ListOfType(ExampleModel))
# platform.json specific # platform.json specific
title = DataField(max_length=100) title = DataField(max_length=100)

View File

@@ -194,16 +194,18 @@ def test_library_json_model():
"frameworks": "arduino", "frameworks": "arduino",
"platforms": "*", "platforms": "*",
"license": "MIT", "license": "MIT",
"examples": { "examples": [
"JsonConfigFile": { {
"name": "JsonConfigFile",
"base": "examples/JsonConfigFile", "base": "examples/JsonConfigFile",
"files": ["JsonConfigFile.ino"] "files": ["JsonConfigFile.ino"]
}, },
"JsonHttpClient": { {
"name": "JsonHttpClient",
"base": "examples/JsonHttpClient", "base": "examples/JsonHttpClient",
"files": ["JsonHttpClient.ino"] "files": ["JsonHttpClient.ino"]
} }
} ]
} }
""" """
mp = parser.ManifestParserFactory.new( mp = parser.ManifestParserFactory.new(
@@ -211,7 +213,8 @@ def test_library_json_model():
) )
model = StrictManifestModel(**mp.as_dict()) model = StrictManifestModel(**mp.as_dict())
assert model.repository.url == "https://github.com/bblanchon/ArduinoJson.git" assert model.repository.url == "https://github.com/bblanchon/ArduinoJson.git"
assert model.examples["JsonHttpClient"].files == ["JsonHttpClient.ino"] assert model.examples[1].base == "examples/JsonHttpClient"
assert model.examples[1].files == ["JsonHttpClient.ino"]
assert model == StrictManifestModel( assert model == StrictManifestModel(
**{ **{
"name": "ArduinoJson", "name": "ArduinoJson",
@@ -239,16 +242,18 @@ def test_library_json_model():
"frameworks": ["arduino"], "frameworks": ["arduino"],
"platforms": ["*"], "platforms": ["*"],
"license": "MIT", "license": "MIT",
"examples": { "examples": [
"JsonConfigFile": { {
"name": "JsonConfigFile",
"base": "examples/JsonConfigFile", "base": "examples/JsonConfigFile",
"files": ["JsonConfigFile.ino"], "files": ["JsonConfigFile.ino"],
}, },
"JsonHttpClient": { {
"name": "JsonHttpClient",
"base": "examples/JsonHttpClient", "base": "examples/JsonHttpClient",
"files": ["JsonHttpClient.ino"], "files": ["JsonHttpClient.ino"],
}, },
}, ],
} }
) )
@@ -357,8 +362,10 @@ def test_platform_json_model():
mp = parser.ManifestParserFactory.new( mp = parser.ManifestParserFactory.new(
contents, parser.ManifestFileType.PLATFORM_JSON contents, parser.ManifestFileType.PLATFORM_JSON
) )
data = mp.as_dict()
data["frameworks"] = sorted(data["frameworks"])
model = ManifestModel(**mp.as_dict()) model = ManifestModel(**mp.as_dict())
assert sorted(model.frameworks) == sorted(["arduino", "simba"]) assert model.frameworks == ["arduino", "simba"]
assert model == ManifestModel( assert model == ManifestModel(
**{ **{
"name": "atmelavr", "name": "atmelavr",
@@ -377,7 +384,7 @@ def test_platform_json_model():
"type": "git", "type": "git",
"branch": None, "branch": None,
}, },
"frameworks": ["simba", "arduino"], "frameworks": ["arduino", "simba"],
"version": "1.15.0", "version": "1.15.0",
} }
) )