Source code for gamesheet_sdk.admin.games.helpers
# Copyright (c) 2026 bdperkin
# SPDX-License-Identifier: MIT
"""Shared helper functions for games operations."""
from __future__ import annotations
from typing import Any
from gamesheet_sdk.admin.games.models import Game
from gamesheet_sdk.common.constants import (
BFF_API_BASE_URL,
BFF_GAMES_LIST,
DEFAULT_GAMES_LIMIT,
VALID_GAME_TYPES,
)
from gamesheet_sdk.common.exceptions import GameSheetError
from gamesheet_sdk.common.session import Session
from gamesheet_sdk.common.shared import check_bff_response_status, handle_response
def _make_request(
session: Session,
season_id: str,
completed: bool | None = None,
scheduled: bool | None = None,
brackets: bool | None = None,
) -> list[Game]:
"""Make a request to the BFF games-list endpoint.
:param session: An authenticated :class:`Session`.
:type session: Session
:param season_id: The season identifier.
:type season_id: str
:param completed: Filter for completed games.
:type completed: bool | None
:param scheduled: Filter for scheduled games.
:type scheduled: bool | None
:param brackets: Filter for bracket games.
:type brackets: bool | None
:returns: A list of :class:`Game` objects.
:rtype: list[Game]
:raises GameSheetError: For any non-2xx response.
"""
params: dict[str, Any] = {
"filter[seasons]": season_id,
"filter[limit]": str(DEFAULT_GAMES_LIMIT),
"filter[offset]": "0",
"filter[sort]": "-start_time",
}
# Set filter flags
if completed is not None:
params["filter[completed]"] = "true" if completed else "false"
if scheduled is not None:
params["filter[scheduled]"] = "true" if scheduled else "false"
if brackets is not None:
params["filter[brackets]"] = "true" if brackets else "false"
url = f"{BFF_API_BASE_URL}{BFF_GAMES_LIST}"
response = session.get(url, params=params)
handle_response(response, url, "GET games")
body: dict[str, Any] = response.json()
check_bff_response_status(body, url)
# Parse games from the data array
games_data = body.get("data", [])
return [Game(**game_data) for game_data in games_data]
[docs]
def validate_game_type(game_type: str) -> None:
"""Validate a game type against the known valid types.
:param game_type: The game type to validate.
:type game_type: str
:raises GameSheetError: If the game type is not valid.
"""
sorted_game_types = ", ".join(sorted(VALID_GAME_TYPES))
if game_type not in VALID_GAME_TYPES:
msg = f"Invalid game type '{game_type}'. Valid options: {sorted_game_types}"
raise GameSheetError(msg)