2 changed files with 91 additions and 1 deletions
@ -0,0 +1,85 @@ |
|||
from os import listdir |
|||
from os.path import isdir, isfile, join |
|||
from json import dump,dumps, loads |
|||
import argparse |
|||
|
|||
def create_addons_json(sha): |
|||
ADDONS = {"addons":{}} |
|||
addon_root = './CSS/addons' |
|||
addon_folders = [name for name in listdir(addon_root) if isdir(join(addon_root, name))] |
|||
for app in addon_folders: |
|||
app_addons = [addon for addon in listdir(f"{addon_root}/{app}")] |
|||
ADDONS["addons"].update({ |
|||
app: { |
|||
addon: {} for addon in app_addons |
|||
} |
|||
}) |
|||
for addon in app_addons: |
|||
files = [file for file in listdir( |
|||
f"{addon_root}/{app}/{addon}") if isfile(join(f"{addon_root}/{app}/{addon}", file))] |
|||
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"] |
|||
} |
|||
} |
|||
}) |
|||
extra_dirs = [dir for dir in listdir( |
|||
f"{addon_root}/{app}/{addon}") if isdir(join(f"{addon_root}/{app}/{addon}", dir))] |
|||
if extra_dirs: |
|||
for dir in extra_dirs: |
|||
extra_dir_files = [file for file in listdir( |
|||
f"{addon_root}/{app}/{addon}/{dir}") if isfile(join(f"{addon_root}/{app}/{addon}/{dir}", file))] |
|||
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"] |
|||
} for dir in extra_dirs |
|||
} |
|||
}) |
|||
return dumps(ADDONS) |
|||
|
|||
def create_json(sha,app_folders:list=None,themes:list=None,no_sub_folders=False): |
|||
if no_sub_folders: |
|||
THEMES = {} |
|||
for theme in themes: |
|||
THEMES.update({ |
|||
"themes": { |
|||
theme.split(".")[0].capitalize(): { |
|||
"url": f"https://{DOMAIN}/CSS/variables/{theme}?sha={sha}" |
|||
}for theme in themes |
|||
} |
|||
}) |
|||
return dumps(THEMES) |
|||
else: |
|||
ADDONS = loads(create_addons_json(sha)) |
|||
APPS = {"applications":{}} |
|||
for app in app_folders: |
|||
APPS.update({ |
|||
"applications":{ |
|||
app: { |
|||
"base_css": f"https://{DOMAIN}/CSS/themes/{app}/{app}-base.css?sha={sha}", |
|||
"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)) |
|||
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)) |
|||
|
|||
with open("themes.json", "w") as outfile: |
|||
dump(apps, outfile,indent=2) |
Loading…
Reference in new issue