From ad44b14533a27aa3845db71baa21dd00413a2429 Mon Sep 17 00:00:00 2001 From: Will Thompson Date: Wed, 5 Apr 2023 21:07:45 +0100 Subject: [PATCH 1/3] icon grid: Remove per-architecture blacklist The keys in arch-blacklist.json are the autotools $(host_cpu) variable. The only key in that file is "arm". But nowadays we only support 64-bit ARM, for which $(host_cpu) is "aarch64". So this filter now does nothing. It doesn't matter, anyway, because the app grid code in Endless OS 3.9 and later just hides empty folders. Remove the blacklist logic, which also removes some problematic terminology from our distro. --- data/Makefile.am | 5 ++--- data/settings/arch-blacklist.json | 5 ----- data/settings/write-grid-json.py | 15 +-------------- 3 files changed, 3 insertions(+), 22 deletions(-) delete mode 100644 data/settings/arch-blacklist.json diff --git a/data/Makefile.am b/data/Makefile.am index eb377a00..1676131b 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -6,9 +6,9 @@ settings_in_files = $(wildcard settings/icon-grid-*.json.in) settings_DATA = $(settings_in_files:.in=) dist_noinst_SCRIPTS = settings/write-grid-json.py -%.json: %.json.in settings/arch-blacklist.json settings/write-grid-json.py +%.json: %.json.in settings/write-grid-json.py $(AM_V_GEN)$(srcdir)/settings/write-grid-json.py -o $@ \ - $< $(srcdir)/settings/arch-blacklist.json $(host_cpu) + $< do_subst = sed \ -e 's|@PKG_DATA_DIR[@]|$(pkgdatadir)|g' \ @@ -21,7 +21,6 @@ eos-save-icon-grid: eos-save-icon-grid.in Makefile EXTRA_DIST = \ $(folders_DATA) \ $(settings_in_files) \ - settings/arch-blacklist.json \ eos-save-icon-grid.in \ $(NULL) diff --git a/data/settings/arch-blacklist.json b/data/settings/arch-blacklist.json deleted file mode 100644 index bd4310de..00000000 --- a/data/settings/arch-blacklist.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "arm" : [ - "eos-folder-games-to-hack.directory" - ] -} diff --git a/data/settings/write-grid-json.py b/data/settings/write-grid-json.py index 6241b5f8..03c10c19 100755 --- a/data/settings/write-grid-json.py +++ b/data/settings/write-grid-json.py @@ -10,16 +10,12 @@ aparser = ArgumentParser(description='Write icon grid json file') aparser.add_argument('-o', '--output', help='output file') aparser.add_argument('input', help='input template file') -aparser.add_argument('blacklist', help='blacklist file') -aparser.add_argument('cpu', help='CPU for blacklisting') args = aparser.parse_args() -# Load with template and blacklist. Use OrderedDict for the grid to +# Load template. Use OrderedDict for the grid to # maintain sorting of the keys. with open(args.input, 'r') as infile: grid = json.load(infile, object_pairs_hook=OrderedDict) -with open(args.blacklist, 'r') as blfile: - blacklist = json.load(blfile) # Open the a temporary version of the output file if specified, ensuring # that leading directories are created first. @@ -35,15 +31,6 @@ raise outfile = open(args.output + '.tmp', 'w') -# Strip out blacklisted apps -cpu_blacklist = blacklist.get(args.cpu, []) -for app in cpu_blacklist: - if app in grid: - del grid[app] - for sect, apps in grid.items(): - if app in apps: - grid[sect].remove(app) - # Check that all directories are in the top-level "desktop" pseudo-directory desktop = grid["desktop"] for directory in grid: From 92466c88809ee67c14ec2b7b525f7a4312a58250 Mon Sep 17 00:00:00 2001 From: Will Thompson Date: Wed, 5 Apr 2023 21:23:45 +0100 Subject: [PATCH 2/3] icon-grid: Modernize Python usage - All Python dicts are now order-preserving. - makedirs() has an exist_ok argument. - argparse.FileType has actually been around for a long time. --- data/settings/write-grid-json.py | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/data/settings/write-grid-json.py b/data/settings/write-grid-json.py index 03c10c19..22a8a845 100755 --- a/data/settings/write-grid-json.py +++ b/data/settings/write-grid-json.py @@ -1,21 +1,17 @@ #!/usr/bin/env python3 -from argparse import ArgumentParser -from collections import OrderedDict -import errno +from argparse import ArgumentParser, FileType import json import os import sys aparser = ArgumentParser(description='Write icon grid json file') aparser.add_argument('-o', '--output', help='output file') -aparser.add_argument('input', help='input template file') +aparser.add_argument('input', help='input template file', type=FileType("r")) args = aparser.parse_args() -# Load template. Use OrderedDict for the grid to -# maintain sorting of the keys. -with open(args.input, 'r') as infile: - grid = json.load(infile, object_pairs_hook=OrderedDict) +# Load template +grid = json.load(args.input) # Open the a temporary version of the output file if specified, ensuring # that leading directories are created first. @@ -24,11 +20,7 @@ else: outdir = os.path.dirname(args.output) if len(outdir) > 0: - try: - os.makedirs(outdir) - except OSError as err: - if err.errno != errno.EEXIST: - raise + os.makedirs(outdir, exist_ok=True) outfile = open(args.output + '.tmp', 'w') # Check that all directories are in the top-level "desktop" pseudo-directory From 604eb30084243c10396a7f4c8c085020236cce67 Mon Sep 17 00:00:00 2001 From: Will Thompson Date: Wed, 5 Apr 2023 21:45:48 +0100 Subject: [PATCH 3/3] icon-grid: Simplify installing JSON files Since removing the arch blocklist we don't actually make any changes to the contents of these files. So, rename them from *.json.in to *.json and rewrite write-grid-json.py as validate-grid-json.py, calling it as a test. --- .gitignore | 5 ++- data/Makefile.am | 10 +---- .../{icon-grid-C.json.in => icon-grid-C.json} | 0 ...icon-grid-ar.json.in => icon-grid-ar.json} | 0 ...icon-grid-bn.json.in => icon-grid-bn.json} | 0 ...icon-grid-es.json.in => icon-grid-es.json} | 0 ...rid-es_GT.json.in => icon-grid-es_GT.json} | 0 ...icon-grid-fr.json.in => icon-grid-fr.json} | 0 ...icon-grid-id.json.in => icon-grid-id.json} | 0 ...icon-grid-pt.json.in => icon-grid-pt.json} | 0 ...icon-grid-th.json.in => icon-grid-th.json} | 0 ...icon-grid-vi.json.in => icon-grid-vi.json} | 0 ...rid-zh_CN.json.in => icon-grid-zh_CN.json} | 0 data/settings/validate-grid-json.py | 40 ++++++++++++++++++ data/settings/write-grid-json.py | 41 ------------------- 15 files changed, 46 insertions(+), 50 deletions(-) rename data/settings/{icon-grid-C.json.in => icon-grid-C.json} (100%) rename data/settings/{icon-grid-ar.json.in => icon-grid-ar.json} (100%) rename data/settings/{icon-grid-bn.json.in => icon-grid-bn.json} (100%) rename data/settings/{icon-grid-es.json.in => icon-grid-es.json} (100%) rename data/settings/{icon-grid-es_GT.json.in => icon-grid-es_GT.json} (100%) rename data/settings/{icon-grid-fr.json.in => icon-grid-fr.json} (100%) rename data/settings/{icon-grid-id.json.in => icon-grid-id.json} (100%) rename data/settings/{icon-grid-pt.json.in => icon-grid-pt.json} (100%) rename data/settings/{icon-grid-th.json.in => icon-grid-th.json} (100%) rename data/settings/{icon-grid-vi.json.in => icon-grid-vi.json} (100%) rename data/settings/{icon-grid-zh_CN.json.in => icon-grid-zh_CN.json} (100%) create mode 100755 data/settings/validate-grid-json.py delete mode 100755 data/settings/write-grid-json.py diff --git a/.gitignore b/.gitignore index fcd3dc26..a6df58a7 100644 --- a/.gitignore +++ b/.gitignore @@ -25,7 +25,9 @@ stamp-h1 /content/*.gresource /content/*.gresource.xml /data/eos-save-icon-grid -/data/settings/icon-grid-*.json +/data/test-suite.log +/data/settings/validate-grid-json.py.log +/data/settings/validate-grid-json.py.trs /debian/eos-acknowledgements /debian/eos-shell-content /debian/eos-shell-content-dev @@ -53,4 +55,5 @@ stamp-h1 /po/stamp-po /po/*.gmo /py-compile +/test-driver /unzipped diff --git a/data/Makefile.am b/data/Makefile.am index 1676131b..aba644f5 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -2,13 +2,9 @@ foldersdir = $(datadir)/desktop-directories folders_DATA = $(wildcard folders/*.directory) settingsdir = $(pkgdatadir)/icon-grid-defaults -settings_in_files = $(wildcard settings/icon-grid-*.json.in) -settings_DATA = $(settings_in_files:.in=) -dist_noinst_SCRIPTS = settings/write-grid-json.py +settings_DATA = $(wildcard settings/icon-grid-*.json) -%.json: %.json.in settings/write-grid-json.py - $(AM_V_GEN)$(srcdir)/settings/write-grid-json.py -o $@ \ - $< +TESTS = settings/validate-grid-json.py do_subst = sed \ -e 's|@PKG_DATA_DIR[@]|$(pkgdatadir)|g' \ @@ -20,7 +16,6 @@ eos-save-icon-grid: eos-save-icon-grid.in Makefile EXTRA_DIST = \ $(folders_DATA) \ - $(settings_in_files) \ eos-save-icon-grid.in \ $(NULL) @@ -29,6 +24,5 @@ bin_SCRIPTS = \ $(NULL) CLEANFILES = \ - $(settings_DATA) \ eos-save-icon-grid \ $(NULL) diff --git a/data/settings/icon-grid-C.json.in b/data/settings/icon-grid-C.json similarity index 100% rename from data/settings/icon-grid-C.json.in rename to data/settings/icon-grid-C.json diff --git a/data/settings/icon-grid-ar.json.in b/data/settings/icon-grid-ar.json similarity index 100% rename from data/settings/icon-grid-ar.json.in rename to data/settings/icon-grid-ar.json diff --git a/data/settings/icon-grid-bn.json.in b/data/settings/icon-grid-bn.json similarity index 100% rename from data/settings/icon-grid-bn.json.in rename to data/settings/icon-grid-bn.json diff --git a/data/settings/icon-grid-es.json.in b/data/settings/icon-grid-es.json similarity index 100% rename from data/settings/icon-grid-es.json.in rename to data/settings/icon-grid-es.json diff --git a/data/settings/icon-grid-es_GT.json.in b/data/settings/icon-grid-es_GT.json similarity index 100% rename from data/settings/icon-grid-es_GT.json.in rename to data/settings/icon-grid-es_GT.json diff --git a/data/settings/icon-grid-fr.json.in b/data/settings/icon-grid-fr.json similarity index 100% rename from data/settings/icon-grid-fr.json.in rename to data/settings/icon-grid-fr.json diff --git a/data/settings/icon-grid-id.json.in b/data/settings/icon-grid-id.json similarity index 100% rename from data/settings/icon-grid-id.json.in rename to data/settings/icon-grid-id.json diff --git a/data/settings/icon-grid-pt.json.in b/data/settings/icon-grid-pt.json similarity index 100% rename from data/settings/icon-grid-pt.json.in rename to data/settings/icon-grid-pt.json diff --git a/data/settings/icon-grid-th.json.in b/data/settings/icon-grid-th.json similarity index 100% rename from data/settings/icon-grid-th.json.in rename to data/settings/icon-grid-th.json diff --git a/data/settings/icon-grid-vi.json.in b/data/settings/icon-grid-vi.json similarity index 100% rename from data/settings/icon-grid-vi.json.in rename to data/settings/icon-grid-vi.json diff --git a/data/settings/icon-grid-zh_CN.json.in b/data/settings/icon-grid-zh_CN.json similarity index 100% rename from data/settings/icon-grid-zh_CN.json.in rename to data/settings/icon-grid-zh_CN.json diff --git a/data/settings/validate-grid-json.py b/data/settings/validate-grid-json.py new file mode 100755 index 00000000..0aca7593 --- /dev/null +++ b/data/settings/validate-grid-json.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python3 + +from argparse import ArgumentParser, FileType +import json +import os +import sys +import glob + +def check(filename): + print(f"Checking {filename}") + + # Load template + with open(filename) as f: + grid = json.load(f) + + # Check that all directories are in the top-level "desktop" pseudo-directory + desktop = grid["desktop"] + for directory in grid: + if directory != "desktop" and directory not in desktop: + raise ValueError( + '"{}" defined but not in "desktop" directory'.format(directory) + ) + +def main(): + aparser = ArgumentParser(description='Validate icon grid JSON files') + aparser.add_argument('input', + help='input template file (default: all grid files in script directory)', + nargs="*") + args = aparser.parse_args() + + if not args.input: + args.input = glob.glob( + os.path.dirname(__file__) + "/icon-grid-*.json", + ) + + for filename in args.input: + check(filename) + +if __name__ == "__main__": + main() diff --git a/data/settings/write-grid-json.py b/data/settings/write-grid-json.py deleted file mode 100755 index 22a8a845..00000000 --- a/data/settings/write-grid-json.py +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env python3 - -from argparse import ArgumentParser, FileType -import json -import os -import sys - -aparser = ArgumentParser(description='Write icon grid json file') -aparser.add_argument('-o', '--output', help='output file') -aparser.add_argument('input', help='input template file', type=FileType("r")) -args = aparser.parse_args() - -# Load template -grid = json.load(args.input) - -# Open the a temporary version of the output file if specified, ensuring -# that leading directories are created first. -if args.output is None: - outfile = sys.stdout -else: - outdir = os.path.dirname(args.output) - if len(outdir) > 0: - os.makedirs(outdir, exist_ok=True) - outfile = open(args.output + '.tmp', 'w') - -# Check that all directories are in the top-level "desktop" pseudo-directory -desktop = grid["desktop"] -for directory in grid: - if directory != "desktop" and directory not in desktop: - raise ValueError( - '"{}" defined but not in "desktop" directory'.format(directory) - ) - -# Write out the new json, keeping the indentation, separators and -# trailing newline from the original. If successful, rename the -# temporary file to the final name. -json.dump(grid, outfile, indent=2, separators=(',', ' : ')) -outfile.write('\n') -if args.output is not None: - outfile.close() - os.rename(args.output + '.tmp', args.output)