Example #1
0
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
Example #2
0
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
Example #3
0
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
Example #4
0
    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
Example #5
0
 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)
Example #6
0
    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