From 345028099d893f8a66726cfd13627d8cc1bcc724 Mon Sep 17 00:00:00 2001 From: AUTOMATIC <16777216c@gmail.com> Date: Sat, 3 Sep 2022 12:08:45 +0300 Subject: split codebase into multiple files; to anyone this affects negatively: sorry --- modules/scripts.py | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 modules/scripts.py (limited to 'modules/scripts.py') diff --git a/modules/scripts.py b/modules/scripts.py new file mode 100644 index 00000000..20f489ce --- /dev/null +++ b/modules/scripts.py @@ -0,0 +1,53 @@ +import os +import sys +import traceback + +import gradio as gr + +class Script: + filename = None + + def title(self): + raise NotImplementedError() + + +scripts = [] + + +def load_scripts(basedir, globs): + for filename in os.listdir(basedir): + path = os.path.join(basedir, filename) + + if not os.path.isfile(path): + continue + + with open(path, "r", encoding="utf8") as file: + text = file.read() + + from types import ModuleType + compiled = compile(text, path, 'exec') + module = ModuleType(filename) + module.__dict__.update(globs) + exec(compiled, module.__dict__) + + for key, item in module.__dict__.items(): + if type(item) == type and issubclass(item, Script): + item.filename = path + + scripts.append(item) + + +def wrap_call(func, filename, funcname, *args, default=None, **kwargs): + try: + res = func() + return res + except Exception: + print(f"Error calling: {filename/funcname}", file=sys.stderr) + print(traceback.format_exc(), file=sys.stderr) + + return default + +def setup_ui(): + titles = [wrap_call(script.title, script.filename, "title") for script in scripts] + + gr.Dropdown(options=[""] + titles, value="", type="index") -- cgit v1.2.3