set "accepted formats" for metadata in config.py

For a bit repo like f-droid.org, it makes sense to standardize on a single
format for metadata files.  This adds support for enforcing a single data
format, or a reduced set of data formats.  So f-droid.org would run like
this if it changed to YAML:

  accepted_formats = ['txt', 'yaml']

Then once everything was converted to YAML, it could look like this:

  accepted_formats = ['yaml']
This commit is contained in:
Hans-Christoph Steiner 2015-08-27 11:43:17 +02:00
parent 19ac44c189
commit 325db90918
4 changed files with 37 additions and 19 deletions

View file

@ -499,23 +499,11 @@ def read_metadata(xref=True):
# exception. So the original .txt format is parsed first, at least until
# newer formats stabilize.
for metadatapath in sorted(glob.glob(os.path.join('metadata', '*.txt'))):
appid, appinfo = parse_txt_metadata(apps, metadatapath)
check_metadata(appinfo)
apps[appid] = appinfo
for metadatapath in sorted(glob.glob(os.path.join('metadata', '*.json'))):
appid, appinfo = parse_json_metadata(apps, metadatapath)
check_metadata(appinfo)
apps[appid] = appinfo
for metadatapath in sorted(glob.glob(os.path.join('metadata', '*.xml'))):
appid, appinfo = parse_xml_metadata(apps, metadatapath)
check_metadata(appinfo)
apps[appid] = appinfo
for metadatapath in sorted(glob.glob(os.path.join('metadata', '*.yaml'))):
appid, appinfo = parse_yaml_metadata(apps, metadatapath)
for metadatapath in sorted(glob.glob(os.path.join('metadata', '*.txt'))
+ glob.glob(os.path.join('metadata', '*.json'))
+ glob.glob(os.path.join('metadata', '*.xml'))
+ glob.glob(os.path.join('metadata', '*.yaml'))):
appid, appinfo = parse_metadata(apps, metadatapath)
check_metadata(appinfo)
apps[appid] = appinfo
@ -731,6 +719,29 @@ def _decode_dict(data):
return rv
def parse_metadata(apps, metadatapath):
root, ext = os.path.splitext(metadatapath)
metadataformat = ext[1:]
accepted = common.config['accepted_formats']
if metadataformat not in accepted:
logging.critical('"' + metadatapath
+ '" is not in an accepted format, '
+ 'convert to: ' + ', '.join(accepted))
sys.exit(1)
if metadataformat == 'txt':
return parse_txt_metadata(apps, metadatapath)
elif metadataformat == 'json':
return parse_json_metadata(apps, metadatapath)
elif metadataformat == 'xml':
return parse_xml_metadata(apps, metadatapath)
elif metadataformat == 'yaml':
return parse_yaml_metadata(apps, metadatapath)
else:
logging.critical('Unknown metadata format: ' + metadatapath)
sys.exit(1)
def parse_json_metadata(apps, metadatapath):
appid, thisinfo = get_default_app_info_list(apps, metadatapath)