Files
snake-python/snakes/__init__.py
T
daniel156161 f14d780f29
Build and Push Docker Container / build-and-push (push) Successful in 7m53s
feat: add live replays and PostgreSQL maintenance tools
- Stream compact live replay updates across local and clustered dashboards.
- Render responsive snake bodies as SVG paths with aligned custom icons.
- Add cache-busted assets, replay fallback routes, and live-follow playback.
- Support PostgreSQL benchmark sampling and idempotent SQLite migration.
- Add dry-run cleanup for old low-quality PostgreSQL replay payloads.
- Reward safe perimeter lanes and bump Prism to version 1.5.0.
- Add backend, migration, dashboard, and perimeter regression coverage.
2026-08-02 00:50:46 +02:00

68 lines
2.1 KiB
Python

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.5.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)