Initial work
This commit is contained in:
commit
929088cef0
13 files changed
+613
No files matched your search
@@ -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)
|
||||
Reference in new issue
Block a user