def app(): parser = argparse.ArgumentParser(description="Alas web service") parser.add_argument("-k", "--key", type=str, help="Password of alas. No password by default") parser.add_argument( "--cdn", action="store_true", help= "Use jsdelivr cdn for pywebio static files (css, js). Self host cdn by default.", ) parser.add_argument("--electron", action="store_true", help="Runs by electron client.") parser.add_argument( "--reload", action="store_true", help="Able to use auto update and builtin updater", ) args, _ = parser.parse_known_args() # Apply config AlasGUI.set_theme(theme=Setting.webui_config.Theme) lang.LANG = Setting.webui_config.Language key = args.key or Setting.webui_config.Password cdn = args.cdn or (Setting.webui_config.CDN == "true") or False Setting.reload = args.reload or Setting.webui_config.bool("EnableReload") Setting.electron = args.electron logger.hr("Webui configs") logger.attr("Theme", Setting.webui_config.Theme) logger.attr("Language", lang.LANG) logger.attr("Password", True if key else False) logger.attr("CDN", cdn) logger.attr("Electron", args.electron) logger.attr("Reload", Setting.reload) def index(): if key != "" and not login(key): logger.warning(f"{info.user_ip} login failed.") time.sleep(1.5) run_js("location.reload();") return AlasGUI().run() app = asgi_app( applications=[index, translate], cdn=cdn, static_dir=None, debug=True, on_startup=[ startup, lambda: ProcessManager.restart_processes(ev=updater.event), ], on_shutdown=[clearup], ) return app
def app(): parser = argparse.ArgumentParser(description="Alas web service") parser.add_argument( "-k", "--key", type=str, help="Password of alas. No password by default" ) parser.add_argument( "--cdn", action="store_true", help="Use jsdelivr cdn for pywebio static files (css, js). Self host cdn by default.", ) parser.add_argument( "--electron", action="store_true", help="Runs by electron client." ) parser.add_argument( "--run", nargs="+", type=str, help="Run alas by config names on startup", ) args, _ = parser.parse_known_args() # Apply config AlasGUI.set_theme(theme=State.deploy_config.Theme) lang.LANG = State.deploy_config.Language key = args.key or State.deploy_config.Password cdn = args.cdn if args.cdn else State.deploy_config.CDN State.electron = args.electron instances: List[str] = args.run logger.hr("Webui configs") logger.attr("Theme", State.deploy_config.Theme) logger.attr("Language", lang.LANG) logger.attr("Password", True if key else False) logger.attr("CDN", cdn) logger.attr("Electron", args.electron) def index(): if key is not None and not login(key): logger.warning(f"{info.user_ip} login failed.") time.sleep(1.5) run_js("location.reload();") return AlasGUI().run() app = asgi_app( applications=[index], cdn=cdn, static_dir=None, debug=True, on_startup=[ startup, lambda: ProcessManager.restart_processes(instances=instances, ev=updater.event), ], on_shutdown=[clearup], ) return app
def app(): parser = argparse.ArgumentParser(description='Alas web service') parser.add_argument('-k', '--key', type=str, help='Password of alas. No password by default') parser.add_argument( "--cdn", action="store_true", help= "Use jsdelivr cdn for pywebio static files (css, js). Self host cdn by default." ) parser.add_argument('--electron', action="store_true", help='Runs by electron client.') parser.add_argument('--reload', action="store_true", help='Able to use auto update and builtin updater') args, _ = parser.parse_known_args() # Apply config AlasGUI.set_theme(theme=Setting.webui_config.Theme) lang.LANG = Setting.webui_config.Language key = args.key or Setting.webui_config.Password cdn = args.cdn or (Setting.webui_config.CDN == 'true') or False Setting.reload = args.reload or Setting.webui_config.bool('EnableReload') Setting.electron = args.electron logger.hr('Webui configs') logger.attr('Theme', Setting.webui_config.Theme) logger.attr('Language', lang.LANG) logger.attr('Password', True if key else False) logger.attr('CDN', cdn) logger.attr('Electron', args.electron) logger.attr('Reload', Setting.reload) def index(): if key != '' and not login(key): logger.warning(f"{info.user_ip} login failed.") time.sleep(1.5) run_js('location.reload();') return AlasGUI().run() app = asgi_app( applications=[index, translate], cdn=cdn, static_dir=None, debug=True, on_startup=[ startup, lambda: ProcessManager.restart_processes(ev=updater.event) ], on_shutdown=[clearup]) return app
def _run_update(self, instances, names): self.state = 'run update' logger.info("All alas stopped, start updating") if self.update(): if Setting.reload: self.state = 'reload' with open('./config/reloadalas', mode='w') as f: f.writelines(names) from module.webui.app import clearup self._trigger_reload(2) clearup() else: self.state = 'finish' else: self.state = 'failed' logger.warning("Update failed") self.event.clear() ProcessManager.restart_processes(instances, self.event) return False
def _wait_update(self, instances, names): if self.state == 'cancel': self.state = 1 self.state = 'wait' self.event.set() _instances = instances.copy() while _instances: for alas in _instances: if not alas.alive: _instances.remove(alas) logger.info(f"Alas [{alas.config_name}] stopped") logger.info( f"Remains: {[alas.config_name for alas in _instances]}") if self.state == 'cancel': self.state = 1 self.event.clear() ProcessManager.restart_processes(instances, self.event) return time.sleep(0.25) self._run_update(instances, names)
def _run_update(self, instances, names): self.state = "run update" logger.info("All alas stopped, start updating") if self.update(): if State.restart_event is not None: self.state = "reload" with open("./config/reloadalas", mode="w") as f: f.writelines(names) from module.webui.app import clearup self._trigger_reload(2) clearup() else: self.state = "finish" else: self.state = "failed" logger.warning("Update failed") self.event.clear() ProcessManager.restart_processes(instances, self.event) return False