diff --git a/themes.py b/themes.py index 996f9c9f..30edcafc 100644 --- a/themes.py +++ b/themes.py @@ -1,9 +1,23 @@ from os import listdir from os.path import isdir, isfile, join from json import dump,dumps, loads -import argparse +import subprocess -def create_addons_json(sha): +def get_shas(output): + """Returns a dict of CSS files and SHAs""" + output_lines = output.splitlines() + sha_dict = {} + for line in output_lines: + line = line.decode('utf-8').replace("\t","").split(" ") + sha = line[1] + css_file = [file for file in line[2].split("/") if "css" in file][0] + sha_dict.update({css_file: sha}) + return(sha_dict) + +def create_addons_json(): + addon_shas = subprocess.check_output(["git", "ls-files", "-s", "./CSS/addons/*.css"]) + SHAS = get_shas(addon_shas) + print(SHAS) ADDONS = {"addons":{}} addon_root = './CSS/addons' addon_folders = [name for name in listdir(addon_root) if isdir(join(addon_root, name))] @@ -20,7 +34,7 @@ def create_addons_json(sha): ADDONS["addons"].update({ app: { addon: { - "css": [f"https://{DOMAIN}/CSS/addons/{app}/{addon}/{file}?sha={sha}" for file in files if file.split(".")[1] == "css"] + "css": [f"https://{DOMAIN}/CSS/addons/{app}/{addon}/{file}?sha={SHAS.get(file)}" for file in files if file.split(".")[1] == "css"] } } }) @@ -33,53 +47,51 @@ def create_addons_json(sha): ADDONS["addons"][app].update({ addon: { dir: { - "css": [f"https://{DOMAIN}/CSS/addons/{app}/{addon}/{dir}/{extra_file}?sha={sha}" for extra_file in extra_dir_files if extra_file.split(".")[1] == "css"] + "css": [f"https://{DOMAIN}/CSS/addons/{app}/{addon}/{dir}/{extra_file}?sha={SHAS.get(extra_file)}" for extra_file in extra_dir_files if extra_file.split(".")[1] == "css"] } for dir in extra_dirs } }) return dumps(ADDONS) -def create_json(sha,app_folders:list=None,themes:list=None,no_sub_folders=False): +def create_json(app_folders:list=None,themes:list=None,no_sub_folders=False): if no_sub_folders: THEMES = {} + theme_shas = subprocess.check_output(["git", "ls-files", "-s", "./CSS/variables/*.css"]) + SHAS = get_shas(theme_shas) for theme in themes: THEMES.update({ "themes": { theme.split(".")[0].capitalize(): { - "url": f"https://{DOMAIN}/CSS/variables/{theme}?sha={sha}" + "url": f"https://{DOMAIN}/CSS/variables/{theme}?sha={SHAS.get(theme)}" }for theme in themes } }) return dumps(THEMES) else: - ADDONS = loads(create_addons_json(sha)) + ADDONS = loads(create_addons_json()) APPS = {"applications":{}} + app_shas = subprocess.check_output(["git", "ls-files", "-s", "./CSS/themes/*base.css"]) + SHAS = get_shas(app_shas) for app in app_folders: APPS.update({ "applications":{ app: { - "base_css": f"https://{DOMAIN}/CSS/themes/{app}/{app}-base.css?sha={sha}", + "base_css": f"https://{DOMAIN}/CSS/themes/{app}/{app}-base.css?sha={SHAS.get(f'{app}-base.css')}", "addons": ADDONS["addons"][app] if app in ADDONS["addons"] else {} } for app in app_folders } } ) - THEMES = loads(create_json(sha,themes=themes,no_sub_folders=True)) + THEMES = loads(create_json(themes=themes,no_sub_folders=True)) APPS.update(ADDONS) APPS.update(THEMES) return dumps(APPS) if __name__== "__main__": - - parser = argparse.ArgumentParser("Creates a JSON file with some information on all applications and themes") - parser.add_argument("--sha", required=True, help="This is the commit SHA we use for 'versioning' on CSS files") - args = parser.parse_args() - - sha = args.sha app_folders = [name for name in listdir('./CSS/themes') if isdir(join('./CSS/themes', name))] themes = [name for name in listdir('./CSS/variables') if isfile(join('./CSS/variables', name))] DOMAIN = open("CNAME","rt",closefd=True).readline() - apps = loads(create_json(sha,app_folders,themes)) + apps = loads(create_json(app_folders,themes)) with open("themes.json", "w") as outfile: dump(apps, outfile,indent=2)