ManifestParser: normalize example names

This commit is contained in:
Ivan Kravets
2019-10-03 12:47:41 +03:00
parent 85a814c21a
commit 8febdc19ea
3 changed files with 29 additions and 11 deletions

View File

@ -42,7 +42,7 @@ class ExportModel(DataModel):
class ExampleModel(DataModel): class ExampleModel(DataModel):
name = DataField(max_length=100, regex=r"^[a-zA-Z\d\-\_/\. ]+$", required=True) 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()))

View File

@ -208,12 +208,20 @@ class BaseManifestParser(object):
if not matched_files: if not matched_files:
continue continue
result[root] = dict( result[root] = dict(
name=os.path.relpath(root, examples_dir), name="Examples"
if root == examples_dir
else os.path.relpath(root, examples_dir),
base=os.path.relpath(root, package_dir), base=os.path.relpath(root, package_dir),
files=matched_files, files=matched_files,
) )
return list(result.values()) or None result = list(result.values())
# normalize example names
for item in result:
item["name"] = re.sub(r"[^a-z\d\d\-\_/]+", "_", item["name"], flags=re.I)
return result or None
class LibraryJsonManifestParser(BaseManifestParser): class LibraryJsonManifestParser(BaseManifestParser):

View File

@ -438,8 +438,9 @@ def test_examples_from_dir(tmpdir_factory):
pio_dir.mkdir("src").join("main.cpp").write("") pio_dir.mkdir("src").join("main.cpp").write("")
# wiring examples # wiring examples
examples_dir.mkdir("SomeSketchIno").join("SomeSketchIno.ino").write("") arduino_dir = examples_dir.mkdir("1. General")
examples_dir.mkdir("SomeSketchPde").join("SomeSketchPde.pde").write("") arduino_dir.mkdir("SomeSketchIno").join("SomeSketchIno.ino").write("")
arduino_dir.mkdir("SomeSketchPde").join("SomeSketchPde.pde").write("")
# custom examples # custom examples
demo_dir = examples_dir.mkdir("demo") demo_dir = examples_dir.mkdir("demo")
@ -455,6 +456,10 @@ def test_examples_from_dir(tmpdir_factory):
pio_dir.mkdir("include").join("world.h").write("") pio_dir.mkdir("include").join("world.h").write("")
pio_dir.mkdir("src").join("world.c").write("") pio_dir.mkdir("src").join("world.c").write("")
# example files in root
examples_dir.join("root.c").write("")
examples_dir.join("root.h").write("")
# invalid example # invalid example
examples_dir.mkdir("invalid-example").join("hello.json") examples_dir.mkdir("invalid-example").join("hello.json")
@ -462,7 +467,7 @@ def test_examples_from_dir(tmpdir_factory):
data = parser.ManifestParserFactory.new_from_dir(str(package_dir)).as_dict() data = parser.ManifestParserFactory.new_from_dir(str(package_dir)).as_dict()
assert isinstance(data["examples"], list) assert isinstance(data["examples"], list)
assert len(data["examples"]) == 5 assert len(data["examples"]) == 6
def _sort_examples(items): def _sort_examples(items):
for i, item in enumerate(items): for i, item in enumerate(items):
@ -471,7 +476,7 @@ def test_examples_from_dir(tmpdir_factory):
data["examples"] = _sort_examples(data["examples"]) data["examples"] = _sort_examples(data["examples"])
model = ManifestModel(**data) model = ManifestModel(**data)
assert model.examples[0].name == "PlatformIO/hello" assert model.examples[3].name == "PlatformIO/hello"
assert model == ManifestModel( assert model == ManifestModel(
**{ **{
"version": "1.0.0", "version": "1.0.0",
@ -484,13 +489,13 @@ def test_examples_from_dir(tmpdir_factory):
"files": ["platformio.ini", "include/main.h", "src/main.cpp"], "files": ["platformio.ini", "include/main.h", "src/main.cpp"],
}, },
{ {
"name": "SomeSketchIno", "name": "1_General/SomeSketchIno",
"base": "examples/SomeSketchIno", "base": "examples/1. General/SomeSketchIno",
"files": ["SomeSketchIno.ino"], "files": ["SomeSketchIno.ino"],
}, },
{ {
"name": "SomeSketchPde", "name": "1_General/SomeSketchPde",
"base": "examples/SomeSketchPde", "base": "examples/1. General/SomeSketchPde",
"files": ["SomeSketchPde.pde"], "files": ["SomeSketchPde.pde"],
}, },
{ {
@ -509,6 +514,11 @@ def test_examples_from_dir(tmpdir_factory):
"extra.py", "extra.py",
], ],
}, },
{
"name": "Examples",
"base": "examples",
"files": ["root.c", "root.h"],
},
] ]
), ),
} }