import importlib from dataclasses import dataclass @dataclass(frozen=True, slots=True) class SnakeRegistration: module: str version: str SNAKE_REGISTRATIONS = { "TemplateSnake": SnakeRegistration("snakes.core.template", "1.0.0"), "ApexBattleSnake": SnakeRegistration("snakes.strategies.apex", "1.0.0"), "PrismBattleSnake_GPT_5_6_Sol": SnakeRegistration( "snakes.strategies.prism", "1.3.0" ), "DummSnake": SnakeRegistration("snakes.legacy.DummSnake", "1.0.0"), "LogicSnake": SnakeRegistration("snakes.legacy.LogicSnake", "1.1.0"), "MasterSnake": SnakeRegistration("snakes.legacy.MasterSnake", "1.2.0"), "BetterMasterSnake": SnakeRegistration("snakes.legacy.BetterMasterSnake", "1.3.0"), "BestBattleSnake": SnakeRegistration("snakes.legacy.BestBattleSnake", "2.6.0"), "TrainedBattleSnake": SnakeRegistration( "snakes.legacy.TrainedBattleSnake", "0.1.0" ), "UltimateBattleSnake": SnakeRegistration( "snakes.legacy.UltimateBattleSnake", "4.5.0" ), "SupremeBattleSnake_ClaudeOpus4_6": SnakeRegistration( "snakes.legacy.SupremeBattleSnake_ClaudeOpus4_6", "1.0.0", ), } # Backward-compatible public version map. SNAKE_REGISTRY = { name: registration.version for name, registration in SNAKE_REGISTRATIONS.items() } DEFAULT_SNAKE_CONFIG = { "apiversion": "1", "author": "", "color": "#888888", "head": "default", "tail": "default", } def build_snake(selected_snake: str): registration = SNAKE_REGISTRATIONS.get(selected_snake) if registration is None: raise ValueError(f"Unknown snake: {selected_snake}") snake_module = importlib.import_module(registration.module) snake_class = getattr(snake_module, selected_snake) return snake_class() def get_snake_version(selected_snake: str) -> str | None: registration = SNAKE_REGISTRATIONS.get(selected_snake) return registration.version if registration is not None else None class SnakeBuilder: @classmethod def build(self, selected_snake: str): return build_snake(selected_snake) @classmethod def get_version(self, selected_snake: str) -> str | None: return get_snake_version(selected_snake)