Add manifest parsers for platform.json and package.json

This commit is contained in:
Ivan Kravets
2019-10-01 22:03:23 +03:00
parent fec19849b5
commit dee2d2c538
4 changed files with 176 additions and 8 deletions
+8
View File
@@ -79,6 +79,14 @@ class ManifestModel(DataModel):
export = DataField(type=ExportModel)
examples = DataField(type=DictOfType(ExampleModel))
# platform.json specific
title = DataField(max_length=100)
# package.json specific
system = DataField(
type=ListOfType(DataField(max_length=50, regex=r"^[a-z\d\-_]+$"))
)
class StrictManifestModel(ManifestModel, StrictDataModel):
pass
+41
View File
@@ -401,3 +401,44 @@ class LibraryPropertiesManifestParser(BaseManifestParser):
"include": include,
"exclude": ["extras", "docs", "tests", "test", "*.doxyfile", "*.pdf"],
}
class PlatformJsonManifestParser(BaseManifestParser):
def parse(self, contents):
data = json.loads(contents)
if "frameworks" in data:
data["frameworks"] = self._parse_frameworks(data["frameworks"])
return data
@staticmethod
def _parse_frameworks(raw):
if not isinstance(raw, dict):
return None
return [name.lower() for name in raw.keys()]
class PackageJsonManifestParser(BaseManifestParser):
def parse(self, contents):
data = json.loads(contents)
data = self._parse_system(data)
data = self._parse_homepage(data)
return data
@staticmethod
def _parse_system(data):
if "system" not in data:
return data
if data["system"] in ("*", ["*"]):
del data["system"]
return data
if not isinstance(data["system"], list):
data["system"] = [data["system"]]
data["system"] = [s.strip().lower() for s in data["system"]]
return data
@staticmethod
def _parse_homepage(data):
if "url" in data:
data["homepage"] = data["url"]
del data["url"]
return data