From 6a0694494575491d24279e5bc441e6f624cc18a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20P=C3=B6hn?= Date: Wed, 8 Aug 2018 02:18:19 +0200 Subject: [PATCH] better exception and waring message when yaml metadata checks fail; build flags check optional --- fdroidserver/metadata.py | 31 ++++++++++++++++--------------- tests/metadata.TestCase | 2 ++ 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/fdroidserver/metadata.py b/fdroidserver/metadata.py index 56931fbe..a5466078 100644 --- a/fdroidserver/metadata.py +++ b/fdroidserver/metadata.py @@ -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 diff --git a/tests/metadata.TestCase b/tests/metadata.TestCase index c2cf871a..b1eb5164 100755 --- a/tests/metadata.TestCase +++ b/tests/metadata.TestCase @@ -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, {})