From 73cbc950bcf25867a29e1aa2726dd831946414e4 Mon Sep 17 00:00:00 2001 From: Andras Schmelczer Date: Sat, 25 Jun 2022 19:04:31 +0200 Subject: [PATCH] Fix production mode server --- src/great_ai/__main__.py | 78 ++++++++++++++++++++-------------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/src/great_ai/__main__.py b/src/great_ai/__main__.py index 39af9a0..be1028a 100644 --- a/src/great_ai/__main__.py +++ b/src/great_ai/__main__.py @@ -65,52 +65,52 @@ def main() -> None: logger.info(f"Starting uvicorn server with app={app}") - uvicorn.run(app, **common_config) # this will never return + uvicorn.run(app, **common_config) + else: + class EventHandler(PatternMatchingEventHandler): + def __init__(self) -> None: + super().__init__(patterns=["*.py", "*.ipynb"], ignore_patterns=["__*.py"]) + self.server: Optional[GreatAIReload] = None + self.restart() - class EventHandler(PatternMatchingEventHandler): - def __init__(self) -> None: - super().__init__(patterns=["*.py", "*.ipynb"], ignore_patterns=["__*.py"]) - self.server: Optional[GreatAIReload] = None - self.restart() + def on_closed(self, event: FileSystemEvent) -> None: + logger.warning(f"File {event.src_path} has triggered a restart") + self.restart() - def on_closed(self, event: FileSystemEvent) -> None: - logger.warning(f"File {event.src_path} has triggered a restart") - self.restart() + def restart(self) -> None: + file_name = get_script_name(args.file_name) + app = find_app(file_name) + if app is None: + logger.warning("Auto-reloading skipped") + return - def restart(self) -> None: - file_name = get_script_name(args.file_name) - app = find_app(file_name) - if app is None: - logger.warning("Auto-reloading skipped") - return + self.stop_server() - self.stop_server() + config = Config(app, **common_config) + socket = config.bind_socket() + self.server = GreatAIReload( + config, target=uvicorn.Server(config=config).run, sockets=[socket] + ) + self.server.startup() - config = Config(app, **common_config) - socket = config.bind_socket() - self.server = GreatAIReload( - config, target=uvicorn.Server(config=config).run, sockets=[socket] - ) - self.server.startup() + def stop_server(self) -> None: + if self.server: + self.server.shutdown() - def stop_server(self) -> None: - if self.server: - self.server.shutdown() + restart_handler = EventHandler() + observer = Observer() + observer.schedule(restart_handler, path=".", recursive=True) + observer.start() - restart_handler = EventHandler() - observer = Observer() - observer.schedule(restart_handler, path=".", recursive=True) - observer.start() - - try: - while True: - time.sleep(50) - finally: - observer.stop() - restart_handler.stop_server() - if args.file_name.endswith(".ipynb"): - Path(get_script_name_of_notebook(args.file_name)).unlink(missing_ok=True) - observer.join() + try: + while True: + time.sleep(50) + finally: + observer.stop() + restart_handler.stop_server() + if args.file_name.endswith(".ipynb"): + Path(get_script_name_of_notebook(args.file_name)).unlink(missing_ok=True) + observer.join() def get_script_name(file_name_argument: str) -> str: