Initial work

This commit is contained in:
Pat Teruel committed 2026-02-22 15:15:07 +08:00
commit 929088cef0
13 files changed
+613

No files matched your search

+42
View File
@@ -0,0 +1,42 @@
"""Sonarr API client."""
import os
import requests
SONARR_HOST = os.environ["SONARR_HOST"].rstrip("/")
SONARR_API_KEY = os.environ["SONARR_API_KEY"]
SONARR_SERIES_ID = os.environ["SONARR_SERIES_ID"]
HEADERS = {"X-Api-Key": SONARR_API_KEY}
def _get_episodes():
"""Fetch all episodes for the configured One Piece series."""
url = f"{SONARR_HOST}/api/v3/episode"
params = {"seriesId": SONARR_SERIES_ID}
resp = requests.get(url, headers=HEADERS, params=params, timeout=30)
resp.raise_for_status()
return resp.json()
def get_absolute_episode(season: int, episode: int) -> int:
"""Return the absolute (series-wide) episode number for the given season/episode."""
episodes = _get_episodes()
for ep in episodes:
if ep.get("seasonNumber") == season and ep.get("episodeNumber") == episode:
abs_num = ep.get("absoluteEpisodeNumber")
if abs_num is None:
raise RuntimeError(
f"Sonarr has no absolute episode number for S{season:02d}E{episode:02d}"
)
return abs_num
raise RuntimeError(f"Episode S{season:02d}E{episode:02d} not found in Sonarr")
def get_total_episodes() -> int:
"""Return total number of episodes in the series according to Sonarr."""
episodes = _get_episodes()
# Exclude specials (season 0)
regular = [ep for ep in episodes if ep.get("seasonNumber", 0) != 0 and ep.get("hasFile")]
if not regular:
regular = [ep for ep in episodes if ep.get("seasonNumber", 0) != 0]
return len(regular)