From 89d9d0c45b770d9db2de07b4bb8c0d361f96c61e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20P=C3=B6hn?= Date: Mon, 4 Sep 2017 02:23:17 +0200 Subject: [PATCH] use OrderedDict for localization data in index-v1 --- fdroidserver/index.py | 16 ++++++++++++++++ tests/repo/index-v1.json | 8 ++++---- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/fdroidserver/index.py b/fdroidserver/index.py index c5ed82e1..0e23060c 100644 --- a/fdroidserver/index.py +++ b/fdroidserver/index.py @@ -169,6 +169,11 @@ def make_v1(apps, packages, repodir, repodict, requestsdict, fdroid_signing_key_ # Java prefers milliseconds # we also need to accound for time zone/daylight saving time return int(calendar.timegm(obj.timetuple()) * 1000) + if isinstance(obj, dict): + d = collections.OrderedDict() + for key in sorted(obj.keys()): + d[key] = obj[key] + return d raise TypeError(repr(obj) + " is not JSON serializable") output = collections.OrderedDict() @@ -208,6 +213,17 @@ def make_v1(apps, packages, repodir, repodict, requestsdict, fdroid_signing_key_ k = k[:1].lower() + k[1:] d[k] = v + # establish sort order in localized dicts + for app in output['apps']: + localized = app.get('localized') + if localized: + lordered = collections.OrderedDict() + for lkey, lvalue in sorted(localized.items()): + lordered[lkey] = collections.OrderedDict() + for ikey, iname in sorted(lvalue.items()): + lordered[lkey][ikey] = iname + app['localized'] = lordered + output_packages = collections.OrderedDict() output['packages'] = output_packages for package in packages: diff --git a/tests/repo/index-v1.json b/tests/repo/index-v1.json index f3b304ab..b419f6df 100644 --- a/tests/repo/index-v1.json +++ b/tests/repo/index-v1.json @@ -133,12 +133,12 @@ "lastUpdated": 1466640000000, "localized": { "en-US": { - "name": "title\n", - "summary": "short description\n", - "video": "video\n", "description": "full description\n", "featureGraphic": "featureGraphic.png", - "icon": "icon.png" + "icon": "icon.png", + "name": "title\n", + "summary": "short description\n", + "video": "video\n" } } }