better exception and waring message when yaml metadata checks fail; build flags check optional

This commit is contained in:
Michael Pöhn 2018-08-08 02:18:19 +02:00
parent 0d005ab83a
commit 6a06944945
2 changed files with 18 additions and 15 deletions

View File

@ -1078,21 +1078,22 @@ def parse_yaml_metadata(mf, app):
if yamldata:
for field in yamldata:
if field not in yaml_app_fields:
warn_or_exception(_('Unrecognised app field: {fieldname}')
.format(fieldname=field))
if not yamldata.get('Builds', None):
warn_or_exception(_('Missing app field: {fieldname}')
.format(fieldname='Builds'))
for build in yamldata.get('Builds', []):
# put all build flag keywords into a set to avoid
# excessive looping action
build_flag_set = set()
for build_flag in build.keys():
build_flag_set.add(build_flag)
for build_flag in build_flag_set:
if build_flag not in build_flags:
warn_or_exception(_('Unrecognised build flag: {build_flag}')
.format(build_flag=build_flag))
warn_or_exception(_("Unrecognised app field '{fieldname}' "
"in '{path}'").format(fieldname=field,
path=mf.name))
if yamldata.get('Builds', None):
for build in yamldata.get('Builds', []):
# put all build flag keywords into a set to avoid
# excessive looping action
build_flag_set = set()
for build_flag in build.keys():
build_flag_set.add(build_flag)
for build_flag in build_flag_set:
if build_flag not in build_flags:
warn_or_exception(
_("Unrecognised build flag '{build_flag}' "
"in '{path}'").format(build_flag=build_flag,
path=mf.name))
app.update(yamldata)
return app

View File

@ -149,6 +149,7 @@ class MetadataTest(unittest.TestCase):
RepoType: git
Builds: []
bad: value"""))
mf.name = 'mock_filename.yaml'
with mock.patch('fdroidserver.metadata.warnings_action', 'error'):
with self.assertRaises(MetaDataException):
fdroidserver.metadata.parse_yaml_metadata(mf, {})
@ -159,6 +160,7 @@ class MetadataTest(unittest.TestCase):
RepoType: git
Builds:
- bad: value"""))
mf.name = 'mock_filename.yaml'
with mock.patch('fdroidserver.metadata.warnings_action', 'error'):
with self.assertRaises(MetaDataException):
fdroidserver.metadata.parse_yaml_metadata(mf, {})