From 3e6b7062b6a8a544b491fbd9fd7f5e17eb41ff22 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Thu, 6 Jul 2017 11:06:47 +0200 Subject: [PATCH 1/2] update: remove ruamel requirement, and improve '--create-metadata' If ruamel.yaml is not available, this will fallback to using PyYAML. This also adds some blank fields to the newly created template to make it easy for human editors to fill in. closes #343 --- fdroidserver/update.py | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/fdroidserver/update.py b/fdroidserver/update.py index f554987b..1349fbcf 100644 --- a/fdroidserver/update.py +++ b/fdroidserver/update.py @@ -1761,17 +1761,32 @@ def main(): if apk['packageName'] not in apps: if options.create_metadata: with open(os.path.join('metadata', apk['packageName'] + '.yml'), 'w') as f: - app = metadata.App() + # this should use metadata.App() and + # metadata.write_yaml(), but since ruamel.yaml + # 0.13 is not widely distributed yet, and it's + # special tricks are not really needed here, this + # uses the plain YAML lib + app = dict() if 'name' in apk: - app.Name = apk['name'] - app.Summary = apk['name'] + app['Name'] = apk['name'] else: - logging.warn(apk['packageName'] + ' does not have a name! Using package name instead.') - app.Name = apk['packageName'] - app.Summary = apk['packageName'] - app.CurrentVersionCode = 2147483647 # Java's Integer.MAX_VALUE - app.Categories = [os.path.basename(os.path.dirname(os.getcwd()))] - metadata.write_yaml(f, app) + logging.warning(apk['packageName'] + ' does not have a name! Using package name instead.') + app['Name'] = apk['packageName'] + app['Categories'] = [os.path.basename(os.getcwd())] + # include some blanks as part of the template + app['AuthorName'] = '' + app['Summary'] = '' + app['WebSite'] = '' + app['IssueTracker'] = '' + app['SourceCode'] = '' + app['CurrentVersionCode'] = 2147483647 # Java's Integer.MAX_VALUE + try: + import ruamel.yaml + assert ruamel.yaml # silence pyflakes + metadata.write_yaml(f, metadata.App(app)) + except ImportError: + import yaml + yaml.dump(app, f, default_flow_style=False) logging.info("Generated skeleton metadata for " + apk['packageName']) newmetadata = True else: From abe422fd7a7cf39d4463e5e1271f36cae1af8a17 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Thu, 6 Jul 2017 11:24:55 +0200 Subject: [PATCH 2/2] handle App instance with no Builds when writing YAML --- fdroidserver/metadata.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/fdroidserver/metadata.py b/fdroidserver/metadata.py index d832fd0c..c794a541 100644 --- a/fdroidserver/metadata.py +++ b/fdroidserver/metadata.py @@ -1051,9 +1051,11 @@ def write_yaml(mf, app): # next iteration will need to insert a newline insert_newline = True else: - if (hasattr(app, field) and getattr(app, field)) or field is 'Builds': + if app.get(field) or field is 'Builds': + # .txt calls it 'builds' internally, everywhere else its 'Builds' if field is 'Builds': - cm.update({field: _builds_to_yaml(app)}) + if app.get('builds'): + cm.update({field: _builds_to_yaml(app)}) elif field is 'CurrentVersionCode': cm.update({field: _field_to_yaml(TYPE_INT, getattr(app, field))}) else: