47 lines
1.3 KiB
Python
47 lines
1.3 KiB
Python
"""Definitions for persisted precomputed historical snapshots."""
|
|
|
|
from __future__ import annotations
|
|
|
|
|
|
SNAPSHOT_TYPE_SERVER_SUMMARY = "server-summary"
|
|
SNAPSHOT_TYPE_WEEKLY_LEADERBOARD = "weekly-leaderboard"
|
|
SNAPSHOT_TYPE_RECENT_MATCHES = "recent-matches"
|
|
|
|
SUPPORTED_SNAPSHOT_TYPES = frozenset(
|
|
{
|
|
SNAPSHOT_TYPE_SERVER_SUMMARY,
|
|
SNAPSHOT_TYPE_WEEKLY_LEADERBOARD,
|
|
SNAPSHOT_TYPE_RECENT_MATCHES,
|
|
}
|
|
)
|
|
|
|
SUPPORTED_LEADERBOARD_METRICS = frozenset(
|
|
{
|
|
"kills",
|
|
"deaths",
|
|
"support",
|
|
"matches_over_100_kills",
|
|
}
|
|
)
|
|
|
|
DEFAULT_SNAPSHOT_WINDOW = "all-time"
|
|
DEFAULT_WEEKLY_SNAPSHOT_WINDOW = "7d"
|
|
|
|
|
|
def validate_snapshot_identity(
|
|
*,
|
|
snapshot_type: str,
|
|
metric: str | None = None,
|
|
) -> None:
|
|
"""Validate the persisted snapshot selectors accepted by the storage layer."""
|
|
if snapshot_type not in SUPPORTED_SNAPSHOT_TYPES:
|
|
raise ValueError(f"Unsupported historical snapshot type: {snapshot_type}")
|
|
|
|
if snapshot_type == SNAPSHOT_TYPE_WEEKLY_LEADERBOARD:
|
|
if metric not in SUPPORTED_LEADERBOARD_METRICS:
|
|
raise ValueError(f"Unsupported historical snapshot metric: {metric}")
|
|
return
|
|
|
|
if metric is not None:
|
|
raise ValueError(f"Metric is only supported for {SNAPSHOT_TYPE_WEEKLY_LEADERBOARD}.")
|