From: Daniel Martí Date: Mon, 7 Dec 2015 19:31:23 +0000 (+0100) Subject: Open metadata files in only one place X-Git-Tag: 0.6.0~52 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;ds=sidebyside;h=013315bf1084c3a9d38b815e06323d36875c210e;p=fdroidserver.git Open metadata files in only one place Also get rid of the useless get_default_app_info func. --- diff --git a/fdroidserver/import.py b/fdroidserver/import.py index 0f9e7c7e..e1d69c3c 100644 --- a/fdroidserver/import.py +++ b/fdroidserver/import.py @@ -174,8 +174,7 @@ def main(): config = common.read_config(options) apps = metadata.read_metadata() - app = metadata.get_default_app_info() - app.id = None + app = metadata.App() app.UpdateCheckMode = "Tags" root_dir = None diff --git a/fdroidserver/metadata.py b/fdroidserver/metadata.py index 18f91310..163ebf01 100644 --- a/fdroidserver/metadata.py +++ b/fdroidserver/metadata.py @@ -952,34 +952,34 @@ def parse_metadata(metadatapath): raise MetaDataException('"%s" is not an accepted format, convert to: %s' % ( metadatapath, ', '.join(accepted))) - app = None - if ext == 'txt': - app = parse_txt_metadata(metadatapath) - elif ext == 'json': - app = parse_json_metadata(metadatapath) - elif ext == 'xml': - app = parse_xml_metadata(metadatapath) - elif ext == 'yaml': - app = parse_yaml_metadata(metadatapath) - else: - raise MetaDataException('Unknown metadata format: %s' % metadatapath) + app = App() + app.metadatapath = metadatapath + app.id, _ = common.get_extension(os.path.basename(metadatapath)) + + with open(metadatapath, 'r') as mf: + if ext == 'txt': + parse_txt_metadata(mf, app) + elif ext == 'json': + parse_json_metadata(mf, app) + elif ext == 'xml': + parse_xml_metadata(mf, app) + elif ext == 'yaml': + parse_yaml_metadata(mf, app) + else: + raise MetaDataException('Unknown metadata format: %s' % metadatapath) post_metadata_parse(app) return app -def parse_json_metadata(metadatapath): - - app = get_default_app_info(metadatapath) +def parse_json_metadata(mf, app): # fdroid metadata is only strings and booleans, no floats or ints. And # json returns unicode, and fdroidserver still uses plain python strings # TODO create schema using https://pypi.python.org/pypi/jsonschema - jsoninfo = None - with open(metadatapath, 'r') as f: - jsoninfo = json.load(f, object_hook=_decode_dict, - parse_int=lambda s: s, - parse_float=lambda s: s) + jsoninfo = json.load(mf, object_hook=_decode_dict, + parse_int=lambda s: s, + parse_float=lambda s: s) app.update_fields(jsoninfo) for f in ['Description', 'Maintainer Notes']: v = app.get_field(f) @@ -987,11 +987,9 @@ def parse_json_metadata(metadatapath): return app -def parse_xml_metadata(metadatapath): - - app = get_default_app_info(metadatapath) +def parse_xml_metadata(mf, app): - tree = ElementTree.ElementTree(file=metadatapath) + tree = ElementTree.ElementTree(file=mf) root = tree.getroot() if root.tag != 'resources': @@ -1021,13 +1019,9 @@ def parse_xml_metadata(metadatapath): return app -def parse_yaml_metadata(metadatapath): +def parse_yaml_metadata(mf, app): - app = get_default_app_info(metadatapath) - - yamlinfo = None - with open(metadatapath, 'r') as f: - yamlinfo = yaml.load(f, Loader=YamlLoader) + yamlinfo = yaml.load(mf, Loader=YamlLoader) app.update_fields(yamlinfo) return app @@ -1036,7 +1030,7 @@ build_line_sep = re.compile(r'(?