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):
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)
files = DataField(type=ListOfType(DataField()))

View File

@ -208,12 +208,20 @@ class BaseManifestParser(object):
if not matched_files:
continue
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),
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):

View File

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