import copy import json from pathlib import Path audiences = json.load(Path("audiences.json").open(encoding="utf-8")) def sort_version(kv): key: str = kv[0] order = ["developer beta", "AppleSeed beta", "public beta"] return order.index([i for i in order if key.endswith(i)][0]) def sort_os(kv): key: str = kv[0] if key.endswith("release"): return -99 elif key.endswith("alternate"): return -98 elif key.endswith("generic"): return -97 try: return int(key) except ValueError: return 0 for os in audiences: if os == "Unknown": continue os_data = audiences[os] for version in os_data: version_data = os_data[version] if isinstance(version_data, dict): os_data[version] = dict(sorted(version_data.items(), key=sort_version)) os_data = dict(sorted(os_data.items(), key=sort_os)) audiences[os] = os_data json.dump(audiences, Path("audiences.json").open("w", newline="\n", encoding="utf-8"), indent=4) audiences_flat = copy.deepcopy(audiences) for os in audiences_flat: for version in dict(audiences_flat[os]): if isinstance(audiences_flat[os][version], dict): audiences_flat[os] |= audiences_flat[os][version] audiences_flat[os].pop(version) json.dump(audiences_flat, Path("audiences-flat.json").open("w", newline="\n", encoding="utf-8"), indent=4) OVERRIDES = { "category_names": { "iOS": "iOS/iPadOS", }, "notes": { "ce9c2203-903b-4fb3-9f03-040dc2202694": "(not publicly accessible)", "c724cb61-e974-42d3-a911-ffd4dce11eda": "(used for iOS security updates) ([ref](https://9to5mac.com/2021/06/07/apple-will-let-users-stay-on-ios-14-and-receive-security-updates-even-after-ios-15-is-released/))", "ebd90ea1-6216-4a7c-920e-666faccb2d50": "(returns 404)", "f659e06d-86a2-4bab-bcbb-61b7c60969ce": "(returns 404)", "9e2ceb05-96a4-4218-a942-74cdd002ea13": "(internal, not publicly accessible)", "9953ae7e-ec38-48d6-9d3c-5c1a15a536dc": "(name unconfirmed)", "3a4d907d-83bd-4b2d-9f7b-98763071da91": "(name unconfirmed)", }, } out = "# AssetAudiences\n\n" for category in audiences_flat: out += f"## {OVERRIDES['category_names'].get(category, category)}\n\n" for audience, uuid in audiences_flat[category].items(): out += f"`{uuid}` {audience}" if uuid in OVERRIDES["notes"]: out += f" {OVERRIDES['notes'][uuid]}" out += "\n\n" out += "Credit to @Siguza for some of these.\n" with Path("audiences.md").open("w", newline="\n", encoding="utf-8") as f: f.write(out)