add versions to snakes and read it in server class

This commit is contained in:
2026-04-03 19:57:55 +02:00
parent 013ac98821
commit 0a3db6ba57
8 changed files with 499 additions and 444 deletions
+26
View File
@@ -17,6 +17,7 @@ class Server:
'color': '#888888',
'head': 'default',
'tail': 'default',
'version': '1.0.0',
}
def __init__(self, data_path:str, snake_type:str, storage_type:str, debug:bool=False, check_tls_security:bool=False):
@@ -42,6 +43,7 @@ class Server:
'max_turn': 0,
}
self.logger = build_logger('Battlesnake', debug_env_var='DEBUG_SERVER')
self.snake_version = self._get_snake_version()
self.app = Quart('Battlesnake')
@@ -134,12 +136,36 @@ class Server:
return await self._override_snake_config_with_environment_variables(snake_config)
async def _override_snake_config_with_environment_variables(self, config:dict[str, str]) -> dict[str, str]:
config['version'] = self.snake_version
for key in ('author', 'color', 'head', 'tail'):
value = os.environ.get(f'SNAKE_{key.upper()}')
if value is not None:
config[key] = value
version_override = os.environ.get('SNAKE_VERSION')
if version_override is not None:
config['version'] = version_override
return config
def _get_snake_version(self) -> str:
configured_version = SnakeBuilder.get_version(self.snake_type)
if configured_version:
return configured_version
try:
snake = SnakeBuilder.build(self.snake_type)
except Exception:
return self.default_snake_config['version']
version = getattr(snake, 'version', None)
if version is None:
version = getattr(snake, 'VERSION', None)
if not version:
return self.default_snake_config['version']
return str(version)
async def _create_game_board(self, game_state:dict):
game_id = game_state['game']['id']
new_game_board = GameBoard(
+14 -2
View File
@@ -1,7 +1,19 @@
class SnakeBuilder:
SNAKE_VERSIONS = {
"TemplateSnake": "1.0.0",
"DummSnake": "1.0.0",
"LogicSnake": "1.1.0",
"MasterSnake": "1.2.0",
"BetterMasterSnake": "1.3.0",
"BestBattleSnake": "2.5.0",
}
@classmethod
def build(self, selected_snake:str):
snake_module = __import__(f'snakes.{selected_snake}', fromlist=[selected_snake])
snake_module = __import__(f"snakes.{selected_snake}", fromlist=[selected_snake])
snake_class = getattr(snake_module, selected_snake)
return snake_class()
@classmethod
def get_version(self, selected_snake:str) -> str | None:
return self.SNAKE_VERSIONS.get(selected_snake)