diff --git a/modules/config_states.py b/modules/config_states.py index 6f1ab53fc..b766aef11 100644 --- a/modules/config_states.py +++ b/modules/config_states.py @@ -8,14 +8,12 @@ import time import tqdm from datetime import datetime -from collections import OrderedDict import git from modules import shared, extensions, errors from modules.paths_internal import script_path, config_states_dir - -all_config_states = OrderedDict() +all_config_states = {} def list_config_states(): @@ -28,10 +26,14 @@ def list_config_states(): for filename in os.listdir(config_states_dir): if filename.endswith(".json"): path = os.path.join(config_states_dir, filename) - with open(path, "r", encoding="utf-8") as f: - j = json.load(f) - j["filepath"] = path - config_states.append(j) + try: + with open(path, "r", encoding="utf-8") as f: + j = json.load(f) + assert "created_at" in j, '"created_at" does not exist' + j["filepath"] = path + config_states.append(j) + except Exception as e: + print(f'[ERROR]: Config states {path}, {e}') config_states = sorted(config_states, key=lambda cs: cs["created_at"], reverse=True) diff --git a/modules/ui_extensions.py b/modules/ui_extensions.py index 15a8b0bf4..e01382676 100644 --- a/modules/ui_extensions.py +++ b/modules/ui_extensions.py @@ -65,7 +65,7 @@ def save_config_state(name): filename = os.path.join(config_states_dir, f"{timestamp}_{name}.json") print(f"Saving backup of webui/extension state to {filename}.") with open(filename, "w", encoding="utf-8") as f: - json.dump(current_config_state, f) + json.dump(current_config_state, f, indent=4) config_states.list_config_states() new_value = next(iter(config_states.all_config_states.keys()), "Current") new_choices = ["Current"] + list(config_states.all_config_states.keys()) @@ -200,119 +200,129 @@ def update_config_states_table(state_name): created_date = time.asctime(time.gmtime(config_state["created_at"])) filepath = config_state.get("filepath", "") - code = f"""""" - - webui_remote = config_state["webui"]["remote"] or "" - webui_branch = config_state["webui"]["branch"] - webui_commit_hash = config_state["webui"]["commit_hash"] or "" - webui_commit_date = config_state["webui"]["commit_date"] - if webui_commit_date: - webui_commit_date = time.asctime(time.gmtime(webui_commit_date)) - else: - webui_commit_date = "" - - remote = f"""{html.escape(webui_remote or '')}""" - commit_link = make_commit_link(webui_commit_hash, webui_remote) - date_link = make_commit_link(webui_commit_hash, webui_remote, webui_commit_date) - - current_webui = config_states.get_webui_config() - - style_remote = "" - style_branch = "" - style_commit = "" - if current_webui["remote"] != webui_remote: - style_remote = STYLE_PRIMARY - if current_webui["branch"] != webui_branch: - style_branch = STYLE_PRIMARY - if current_webui["commit_hash"] != webui_commit_hash: - style_commit = STYLE_PRIMARY - - code += f"""

Config Backup: {config_name}

-
Filepath: {filepath}
-
Created at: {created_date}
""" - - code += f"""

WebUI State

- - - - - - - - - - - - - - - - - -
URLBranchCommitDate
{remote}{webui_branch}{commit_link}{date_link}
- """ - - code += """

Extension State

- - - - - - - - - - - - """ - - ext_map = {ext.name: ext for ext in extensions.extensions} - - for ext_name, ext_conf in config_state["extensions"].items(): - ext_remote = ext_conf["remote"] or "" - ext_branch = ext_conf["branch"] or "" - ext_enabled = ext_conf["enabled"] - ext_commit_hash = ext_conf["commit_hash"] or "" - ext_commit_date = ext_conf["commit_date"] - if ext_commit_date: - ext_commit_date = time.asctime(time.gmtime(ext_commit_date)) + try: + webui_remote = config_state["webui"]["remote"] or "" + webui_branch = config_state["webui"]["branch"] + webui_commit_hash = config_state["webui"]["commit_hash"] or "" + webui_commit_date = config_state["webui"]["commit_date"] + if webui_commit_date: + webui_commit_date = time.asctime(time.gmtime(webui_commit_date)) else: - ext_commit_date = "" + webui_commit_date = "" - remote = f"""{html.escape(ext_remote or '')}""" - commit_link = make_commit_link(ext_commit_hash, ext_remote) - date_link = make_commit_link(ext_commit_hash, ext_remote, ext_commit_date) + remote = f"""{html.escape(webui_remote or '')}""" + commit_link = make_commit_link(webui_commit_hash, webui_remote) + date_link = make_commit_link(webui_commit_hash, webui_remote, webui_commit_date) + + current_webui = config_states.get_webui_config() - style_enabled = "" style_remote = "" style_branch = "" style_commit = "" - if ext_name in ext_map: - current_ext = ext_map[ext_name] - current_ext.read_info_from_repo() - if current_ext.enabled != ext_enabled: - style_enabled = STYLE_PRIMARY - if current_ext.remote != ext_remote: - style_remote = STYLE_PRIMARY - if current_ext.branch != ext_branch: - style_branch = STYLE_PRIMARY - if current_ext.commit_hash != ext_commit_hash: - style_commit = STYLE_PRIMARY + if current_webui["remote"] != webui_remote: + style_remote = STYLE_PRIMARY + if current_webui["branch"] != webui_branch: + style_branch = STYLE_PRIMARY + if current_webui["commit_hash"] != webui_commit_hash: + style_commit = STYLE_PRIMARY - code += f""" - - - - - - - - """ + code = f""" +

Config Backup: {config_name}

+
Filepath: {filepath}
+
Created at: {created_date}
+

WebUI State

+
ExtensionURLBranchCommitDate
{html.escape(ext_name)}{remote}{ext_branch}{commit_link}{date_link}
+ + + + + + + + + + + + + + + + +
URLBranchCommitDate
+ {remote} + + {webui_branch} + + {commit_link} + + {date_link} +
+

Extension State

+ + + + + + + + + + + +""" - code += """ - -
ExtensionURLBranchCommitDate
- """ + ext_map = {ext.name: ext for ext in extensions.extensions} + + for ext_name, ext_conf in config_state["extensions"].items(): + ext_remote = ext_conf["remote"] or "" + ext_branch = ext_conf["branch"] or "" + ext_enabled = ext_conf["enabled"] + ext_commit_hash = ext_conf["commit_hash"] or "" + ext_commit_date = ext_conf["commit_date"] + if ext_commit_date: + ext_commit_date = time.asctime(time.gmtime(ext_commit_date)) + else: + ext_commit_date = "" + + remote = f"""{html.escape(ext_remote or '')}""" + commit_link = make_commit_link(ext_commit_hash, ext_remote) + date_link = make_commit_link(ext_commit_hash, ext_remote, ext_commit_date) + + style_enabled = "" + style_remote = "" + style_branch = "" + style_commit = "" + if ext_name in ext_map: + current_ext = ext_map[ext_name] + current_ext.read_info_from_repo() + if current_ext.enabled != ext_enabled: + style_enabled = STYLE_PRIMARY + if current_ext.remote != ext_remote: + style_remote = STYLE_PRIMARY + if current_ext.branch != ext_branch: + style_branch = STYLE_PRIMARY + if current_ext.commit_hash != ext_commit_hash: + style_commit = STYLE_PRIMARY + + code += f""" + {html.escape(ext_name)} + {remote} + {ext_branch} + {commit_link} + {date_link} + +""" + + code += """ +""" + + except Exception as e: + print(f"[ERROR]: Config states {filepath}, {e}") + code = f""" +

Config Backup: {config_name}

+
Filepath: {filepath}
+
Created at: {created_date}
+

This file is corrupted

""" return code