Add support for env file support, set via ENV_FILE

Signed-off-by: Luis Garcia <git@luigi311.com>
This commit is contained in:
Luis Garcia
2025-05-18 20:13:44 +00:00
parent 46b60bb866
commit 544649effd
7 changed files with 377 additions and 246 deletions

View File

@@ -5,7 +5,6 @@ import traceback
import os
from math import floor
from typing import Any, Literal
from dotenv import load_dotenv
from packaging.version import parse, Version
from loguru import logger
@@ -13,6 +12,7 @@ from src.functions import (
search_mapping,
log_marked,
str_to_bool,
get_env_value,
)
from src.watched import (
LibraryData,
@@ -24,14 +24,12 @@ from src.watched import (
check_same_identifiers,
)
load_dotenv(override=True)
generate_guids = str_to_bool(os.getenv("GENERATE_GUIDS", "True"))
generate_locations = str_to_bool(os.getenv("GENERATE_LOCATIONS", "True"))
def extract_identifiers_from_item(
server_type: str, item: dict[str, Any]
server_type: str,
item: dict[str, Any],
generate_guids: bool = True,
generate_locations: bool = True,
) -> MediaIdentifiers:
title = item.get("Name")
id = None
@@ -72,9 +70,16 @@ def extract_identifiers_from_item(
)
def get_mediaitem(server_type: str, item: dict[str, Any]) -> MediaItem:
def get_mediaitem(
server_type: str,
item: dict[str, Any],
generate_guids: bool = True,
generate_locations: bool = True,
) -> MediaItem:
return MediaItem(
identifiers=extract_identifiers_from_item(server_type, item),
identifiers=extract_identifiers_from_item(
server_type, item, generate_guids, generate_locations
),
status=WatchedStatus(
completed=item.get("UserData", {}).get("Played"),
time=floor(
@@ -87,18 +92,21 @@ def get_mediaitem(server_type: str, item: dict[str, Any]) -> MediaItem:
class JellyfinEmby:
def __init__(
self,
env,
server_type: Literal["Jellyfin", "Emby"],
base_url: str,
token: str,
headers: dict[str, str],
) -> None:
self.env = env
if server_type not in ["Jellyfin", "Emby"]:
raise Exception(f"Server type {server_type} not supported")
self.server_type: str = server_type
self.base_url: str = base_url
self.token: str = token
self.headers: dict[str, str] = headers
self.timeout: int = int(os.getenv("REQUEST_TIMEOUT", 300))
self.timeout: int = int(get_env_value(self.env, "REQUEST_TIMEOUT", 300))
if not self.base_url:
raise Exception(f"{self.server_type} base_url not set")
@@ -327,7 +335,20 @@ class JellyfinEmby:
movie["UserData"].get("Played")
or movie["UserData"].get("PlaybackPositionTicks", 0) > 600000000
):
watched.movies.append(get_mediaitem(self.server_type, movie))
watched.movies.append(
get_mediaitem(
self.server_type,
movie,
str_to_bool(
get_env_value(self.env, "GENERATE_GUIDS", "True")
),
str_to_bool(
get_env_value(
self.env, "GENERATE_LOCATIONS", "True"
)
),
)
)
# TV Shows
if library_type == "tvshows":
@@ -394,7 +415,20 @@ class JellyfinEmby:
> 600000000
):
episode_mediaitem.append(
get_mediaitem(self.server_type, episode)
get_mediaitem(
self.server_type,
episode,
str_to_bool(
get_env_value(
self.env, "GENERATE_GUIDS", "True"
)
),
str_to_bool(
get_env_value(
self.env, "GENERATE_LOCATIONS", "True"
)
),
)
)
if episode_mediaitem:
@@ -529,6 +563,9 @@ class JellyfinEmby:
user_name,
library_name,
jellyfin_video.get("Name"),
mark_file=get_env_value(
self.env, "MARK_FILE", "mark.log"
),
)
elif self.update_partial:
msg = f"{self.server_type}: {jellyfin_video.get('Name')} as partially watched for {floor(stored_movie.status.time / 60_000)} minutes for {user_name} in {library_name}"
@@ -552,6 +589,9 @@ class JellyfinEmby:
library_name,
jellyfin_video.get("Name"),
duration=floor(stored_movie.status.time / 60_000),
mark_file=get_env_value(
self.env, "MARK_FILE", "mark.log"
),
)
else:
logger.trace(
@@ -636,6 +676,9 @@ class JellyfinEmby:
library_name,
jellyfin_episode.get("SeriesName"),
jellyfin_episode.get("Name"),
mark_file=get_env_value(
self.env, "MARK_FILE", "mark.log"
),
)
elif self.update_partial:
msg = (
@@ -667,6 +710,9 @@ class JellyfinEmby:
duration=floor(
stored_ep.status.time / 60_000
),
mark_file=get_env_value(
self.env, "MARK_FILE", "mark.log"
),
)
else:
logger.trace(