Browse Source

get actual file sha

pull/256/head
Marius 4 years ago
parent
commit
5219574c80
  1. 44
      themes.py

44
themes.py

@ -1,9 +1,23 @@
from os import listdir from os import listdir
from os.path import isdir, isfile, join from os.path import isdir, isfile, join
from json import dump,dumps, loads 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":{}} ADDONS = {"addons":{}}
addon_root = './CSS/addons' addon_root = './CSS/addons'
addon_folders = [name for name in listdir(addon_root) if isdir(join(addon_root, name))] 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({ ADDONS["addons"].update({
app: { app: {
addon: { 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({ ADDONS["addons"][app].update({
addon: { addon: {
dir: { 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 } for dir in extra_dirs
} }
}) })
return dumps(ADDONS) 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: if no_sub_folders:
THEMES = {} THEMES = {}
theme_shas = subprocess.check_output(["git", "ls-files", "-s", "./CSS/variables/*.css"])
SHAS = get_shas(theme_shas)
for theme in themes: for theme in themes:
THEMES.update({ THEMES.update({
"themes": { "themes": {
theme.split(".")[0].capitalize(): { 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 }for theme in themes
} }
}) })
return dumps(THEMES) return dumps(THEMES)
else: else:
ADDONS = loads(create_addons_json(sha)) ADDONS = loads(create_addons_json())
APPS = {"applications":{}} 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: for app in app_folders:
APPS.update({ APPS.update({
"applications":{ "applications":{
app: { 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 {} "addons": ADDONS["addons"][app] if app in ADDONS["addons"] else {}
} for app in app_folders } 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(ADDONS)
APPS.update(THEMES) APPS.update(THEMES)
return dumps(APPS) return dumps(APPS)
if __name__== "__main__": 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))] 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))] themes = [name for name in listdir('./CSS/variables') if isfile(join('./CSS/variables', name))]
DOMAIN = open("CNAME","rt",closefd=True).readline() 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: with open("themes.json", "w") as outfile:
dump(apps, outfile,indent=2) dump(apps, outfile,indent=2)

Loading…
Cancel
Save