Fix production mode server

This commit is contained in:
Andras Schmelczer 2022-06-25 19:04:31 +02:00
parent 394d4465b0
commit 73cbc950bc
No known key found for this signature in database
GPG key ID: 0EA1BC97D0AB076E

View file

@ -65,52 +65,52 @@ def main() -> None:
logger.info(f"Starting uvicorn server with app={app}") 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 on_closed(self, event: FileSystemEvent) -> None:
def __init__(self) -> None: logger.warning(f"File {event.src_path} has triggered a restart")
super().__init__(patterns=["*.py", "*.ipynb"], ignore_patterns=["__*.py"]) self.restart()
self.server: Optional[GreatAIReload] = None
self.restart()
def on_closed(self, event: FileSystemEvent) -> None: def restart(self) -> None:
logger.warning(f"File {event.src_path} has triggered a restart") file_name = get_script_name(args.file_name)
self.restart() app = find_app(file_name)
if app is None:
logger.warning("Auto-reloading skipped")
return
def restart(self) -> None: self.stop_server()
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() 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) def stop_server(self) -> None:
socket = config.bind_socket() if self.server:
self.server = GreatAIReload( self.server.shutdown()
config, target=uvicorn.Server(config=config).run, sockets=[socket]
)
self.server.startup()
def stop_server(self) -> None: restart_handler = EventHandler()
if self.server: observer = Observer()
self.server.shutdown() observer.schedule(restart_handler, path=".", recursive=True)
observer.start()
restart_handler = EventHandler() try:
observer = Observer() while True:
observer.schedule(restart_handler, path=".", recursive=True) time.sleep(50)
observer.start() finally:
observer.stop()
try: restart_handler.stop_server()
while True: if args.file_name.endswith(".ipynb"):
time.sleep(50) Path(get_script_name_of_notebook(args.file_name)).unlink(missing_ok=True)
finally: observer.join()
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: def get_script_name(file_name_argument: str) -> str: