Source code for gamesheet_sdk.admin.games.broadcasters
# Copyright (c) 2026 bdperkin
# SPDX-License-Identifier: MIT
"""Broadcaster operations for games."""
from __future__ import annotations
from typing import TYPE_CHECKING, Any
from gamesheet_sdk.admin.games.models import Broadcaster
from gamesheet_sdk.common.constants import BFF_API_BASE_URL, BFF_BROADCASTERS
from gamesheet_sdk.common.exceptions import GameSheetError
from gamesheet_sdk.common.shared import check_bff_response_status, handle_response
if TYPE_CHECKING:
from gamesheet_sdk.common.session import Session
[docs]
def list_broadcasters(session: Session) -> list[Broadcaster]:
"""Return the list of valid broadcasters.
Fetches the current list of broadcaster services from the BFF API. The returned broadcaster keys can be
used when creating or updating scheduled games.
Args:
session (Session): An authenticated :class:`Session`.
Returns:
list[Broadcaster]: A list of :class:`Broadcaster` objects.
"""
url = f"{BFF_API_BASE_URL}{BFF_BROADCASTERS}"
response = session.get(url)
handle_response(response, url, "GET broadcasters")
body: dict[str, Any] = response.json()
check_bff_response_status(body, url)
broadcasters_data = body.get("data", [])
return [Broadcaster(**b) for b in broadcasters_data]
[docs]
def validate_broadcaster_key(session: Session, broadcaster: str) -> str:
"""Validate a broadcaster key and return the correctly-cased version.
Fetches the list of valid broadcasters and performs a case-insensitive match. Returns the broadcaster key
with the correct casing as stored in the API.
Args:
session (Session): An authenticated :class:`Session`.
broadcaster (str): The broadcaster key to validate (case- insensitive).
Returns:
str: The correctly-cased broadcaster key.
Raises:
GameSheetError: If the broadcaster key is not valid.
"""
if not broadcaster:
return broadcaster
broadcasters = list_broadcasters(session)
broadcaster_lower = broadcaster.lower()
for b in broadcasters:
if b.key.lower() == broadcaster_lower:
return b.key
valid_keys = [b.key for b in broadcasters]
joined_valid_keys = ", ".join(valid_keys)
msg = f"Invalid broadcaster '{broadcaster}'. Valid options (case-insensitive): {joined_valid_keys}"
raise GameSheetError(msg)