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" } } }