Files
snake-python/server/database/backend/__init__.py
T
daniel156161 5efab77248 feat!: adopt Python 3.15 and support BattlesnakeArena
- Require Python 3.15 in project metadata, runtime pin, and Docker stages.
- Use lazy imports for database backends and type-only dependencies.
- Defer benchmark dependencies until their code paths are used.
- Rely on deferred annotations and use Path.info for file discovery.
- Accept BattlesnakeArena alongside BattlesnakeEngine on game endpoints.
- Advance quart_common for Python 3.15 and multi-agent validation.
- Add pytest development dependencies and refresh the uv lockfile.
- Test lazy backend loading, import order, and fresh file discovery.
- Document the runtime requirements and locked uv workflow.

BREAKING CHANGE: Python 3.15 or newer is required; earlier runtimes cannot parse the lazy import syntax.
2026-11-03 10:02:40 +01:00

27 lines
1.1 KiB
Python

from .Template import GameplayBackendTemplate
lazy from .PostgresqlGameplayBackend import PostgresqlGameplayBackend as PostgresqlBackend
lazy from .SqliteGameplayBackend import SqliteGameplayBackend as SqliteBackend
class GameplayBackendBuilder:
@staticmethod
def build(backend:str="sqlite", db_path:str|None=None, busy_timeout_ms:int=5000, pg_dsn:str|None=None, pg_min_size:int=1, pg_max_size:int=5) -> GameplayBackendTemplate:
normalized = (backend or "sqlite").strip().lower()
if normalized == "postgresql" or normalized == "postgres":
if not pg_dsn:
raise ValueError("pg_dsn is required for the postgresql backend")
return PostgresqlBackend(
dsn=pg_dsn,
min_size=pg_min_size,
max_size=pg_max_size,
sqlite_migration_path=db_path,
)
if normalized == "sqlite":
if not db_path:
raise ValueError("db_path is required for the sqlite backend")
return SqliteBackend(db_path=db_path, busy_timeout_ms=busy_timeout_ms)
raise ValueError(f"Unknown gameplay backend: {backend!r}. Choose 'sqlite' or 'postgresql'.")