From 1e57ad1af657eb1303be97b1f6b59c762017906e Mon Sep 17 00:00:00 2001 From: Daniel Dolezal Date: Fri, 3 Apr 2026 18:01:18 +0200 Subject: [PATCH] add bootstrap script to start the server up the same way --- asgi.py | 14 ++------------ main.py | 21 ++++----------------- server/bootstrap.py | 39 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 29 deletions(-) create mode 100644 server/bootstrap.py diff --git a/asgi.py b/asgi.py index 642e79f..c296d83 100644 --- a/asgi.py +++ b/asgi.py @@ -1,15 +1,5 @@ -from server.Server import Server -import os +from server.bootstrap import build_server_from_env -server = Server( - data_path=os.path.dirname(__file__), - snake_type=os.environ.get("SNAKE", "BestBattleSnake"), - storage_type=os.environ.get("STORAGE", "LocalStorage"), - debug=os.environ.get("DEBUG_SERVER", False), - check_tls_security=False, -) - -if os.environ.get("STORE_GAME_HISTORY", None): - server.enable_store_game_state() +server = build_server_from_env(default_snake_type="TemplateSnake") app = server.app diff --git a/main.py b/main.py index 1f269ef..168d156 100755 --- a/main.py +++ b/main.py @@ -13,8 +13,9 @@ # For more info see docs.battlesnake.com from server.CreateEnvironmentFile import CreateEnvironmentFile -from server.Server import Server +from server.bootstrap import build_run_config, build_server_from_env +import asyncio import os # Start server when `python main.py` is run @@ -26,19 +27,5 @@ if __name__ == "__main__": "SNAKE": "TemplateSnake", }) - server = Server( - data_path=os.path.dirname(__file__), - snake_type=os.environ.get("SNAKE", "TemplateSnake"), - storage_type=os.environ.get("STORAGE", "LocalStorage"), - debug=os.environ.get("DEBUG_SERVER", False), - check_tls_security=False, - ) - - if os.environ.get("STORE_GAME_HISTORY", None): - server.enable_store_game_state() - - server.run( - host=os.environ.get("HOST", "0.0.0.0"), - port=int(os.environ.get("PORT", "8000")), - debug=bool(os.environ.get("DEBUG", False)), - ) + server = build_server_from_env(default_snake_type="TemplateSnake") + asyncio.run(server.run(**build_run_config())) diff --git a/server/bootstrap.py b/server/bootstrap.py new file mode 100644 index 0000000..2f20a6d --- /dev/null +++ b/server/bootstrap.py @@ -0,0 +1,39 @@ +from typing import TypedDict +from pathlib import Path +import os + +from server.Server import Server + +class RunConfig(TypedDict): + host: str + port: int + debug: bool + +def env_bool(name:str, default:bool=False) -> bool: + value = os.environ.get(name) + if value is None: + return default + return value.lower() in {'1', 'true', 'yes', 'on'} + +def build_server_from_env(default_snake_type:str) -> Server: + data_path = str(Path(__file__).resolve().parent.parent) + server = Server( + data_path=data_path, + snake_type=os.environ.get('SNAKE', default_snake_type), + storage_type=os.environ.get('STORAGE', 'LocalStorage'), + debug=env_bool('DEBUG_SERVER'), + check_tls_security=False, + ) + + if env_bool('STORE_GAME_HISTORY'): + server.enable_store_game_state() + + return server + + +def build_run_config() -> RunConfig: + return { + 'host': os.environ.get('HOST', '0.0.0.0'), + 'port': int(os.environ.get('PORT', '8000')), + 'debug': env_bool('DEBUG'), + }