# --server option on dedicated secure build server hosts.
build_server_always = False
+# By default, fdroid will use YAML and the custom .txt metadata formats. It
+# is also possible to have metadata in JSON and XML. You can enable your
+# preferred formats by setting them in a list:
+# accepted_formats = ['json', 'txt', 'xml', 'yaml']
+
# Limit in number of characters that fields can take up
# Only the fields listed here are supported, defaults shown
char_limits = {
# 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
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)
self.maxDiff = None
- # these only need to be set to prevent code running on None. The
- # values are not used in metadata.py
+ # these need to be set to prevent code running on None, only
+ # 'accepted_formats' is actually used in metadata.py
config = dict()
config['sdk_path'] = '/opt/android-sdk'
config['ndk_paths'] = dict()
+ config['accepted_formats'] = ['json', 'txt', 'xml', 'yaml']
fdroidserver.common.config = config
apps = fdroidserver.metadata.read_metadata(xref=True)