fixes and improvements

This commit is contained in:
2026-05-07 23:09:08 +02:00
parent a5910b0fd6
commit 7e80733837
5 changed files with 9 additions and 48 deletions
@@ -21,15 +21,6 @@ logger = logging.getLogger(__name__)
class Settings(BaseSettings):
"""Flat application settings read from env vars / .env file."""
# Jellyfin (legacy fallback only; machine settings are preferred)
jellyfin_url: str = ""
jellyfin_api_key: str = ""
jellyfin_user_id: str = ""
# Jellyseerr (legacy fallback only; machine settings are preferred)
jellyseerr_url: str = ""
jellyseerr_api_key: str = ""
# Logging
log_level: str = "INFO"
@@ -129,17 +129,13 @@ def _resolve_machine(service: str, request: Request | None = None) -> dict[str,
def get_jellyfin_client(request: Request = None) -> JellyfinClient:
"""Return a Jellyfin client for the selected machine or legacy env fallback."""
"""Return a Jellyfin client for the selected machine."""
machine = get_settings_store().get_machine_config(_request_machine_id(request)) or _resolve_machine("jellyfin", request)
if machine and machine.get("jellyfin_url") and machine.get("jellyfin_api_key"):
cache_key = (machine["id"], machine["jellyfin_url"], machine.get("jellyfin_api_key") or "")
return _jellyfin_client_for(cache_key)
settings = get_settings()
if not settings.jellyfin_url or not settings.jellyfin_api_key:
raise RuntimeError("No Jellyfin machine is configured and JELLYFIN_URL/API_KEY are not set")
logger.info("Falling back to legacy Jellyfin env settings")
return _jellyfin_client_for(("legacy", settings.jellyfin_url, settings.jellyfin_api_key))
raise RuntimeError("No Jellyfin machine is configured. Add a machine with jellyfin_url and jellyfin_api_key in Settings.")
def get_jellyseerr_client(request: Request = None) -> JellyseerrClient | None:
@@ -148,16 +144,8 @@ def get_jellyseerr_client(request: Request = None) -> JellyseerrClient | None:
if machine and machine.get("jellyseerr_url") and machine.get("jellyseerr_api_key"):
return JellyseerrClient(machine["jellyseerr_url"], machine.get("jellyseerr_api_key") or "")
settings = get_settings()
if not settings.jellyseerr_url or not settings.jellyseerr_api_key:
logger.info(
"Jellyseerr client not configured (url=%s, api_key=%s)",
"set" if settings.jellyseerr_url else "missing",
"set" if settings.jellyseerr_api_key else "missing",
)
return None
logger.info("Falling back to legacy Jellyseerr env settings")
return JellyseerrClient(settings.jellyseerr_url, settings.jellyseerr_api_key)
logger.info("Jellyseerr client not configured (no machine with jellyseerr_url and jellyseerr_api_key)")
return None
def get_ssh_client(request: Request = None):
@@ -232,9 +220,6 @@ def get_user_id(request: Request = None) -> str:
machine = get_settings_store().get_machine_config(_request_machine_id(request)) or _resolve_machine("jellyfin", request)
if machine and machine.get("jellyfin_user_id"):
return str(machine["jellyfin_user_id"])
settings = get_settings()
if settings.jellyfin_user_id:
return settings.jellyfin_user_id
client = get_jellyfin_client(request)
users = client.users()
if not users:
@@ -44,11 +44,6 @@ def describe_settings(settings: object) -> dict[str, str]:
"oidc_issuer_url": _sanitize_url(getattr(settings, "oidc_issuer_url", "")),
"oidc_audience": getattr(settings, "oidc_audience", "") or "<unset>",
"oidc_jwks_url": _sanitize_url(getattr(settings, "oidc_jwks_url", "")),
"jellyfin_url": _sanitize_url(getattr(settings, "jellyfin_url", "")),
"jellyfin_api_key": "set" if getattr(settings, "jellyfin_api_key", "") else "missing",
"jellyfin_user_id": getattr(settings, "jellyfin_user_id", "") or "<auto>",
"jellyseerr_url": _sanitize_url(getattr(settings, "jellyseerr_url", "")),
"jellyseerr_api_key": "set" if getattr(settings, "jellyseerr_api_key", "") else "missing",
"ssh_host": getattr(settings, "ssh_host", "") or "<unset>",
"ssh_username": getattr(settings, "ssh_username", "") or "<unset>",
"ssh_port": str(getattr(settings, "ssh_port", 22) or 22),
@@ -42,11 +42,11 @@ def _default_local_machine() -> dict[str, Any]:
"password": "",
"media_root": settings.media_root,
"path_prefix": settings.path_prefix,
"jellyfin_url": settings.jellyfin_url,
"jellyfin_user_id": settings.jellyfin_user_id,
"jellyfin_api_key": settings.jellyfin_api_key or "",
"jellyseerr_url": settings.jellyseerr_url,
"jellyseerr_api_key": settings.jellyseerr_api_key or "",
"jellyfin_url": "",
"jellyfin_user_id": "",
"jellyfin_api_key": "",
"jellyseerr_url": "",
"jellyseerr_api_key": "",
"notes": "",
}
-10
View File
@@ -11,8 +11,6 @@ class TestSettings:
settings = Settings(_env_file=None)
assert settings.ssh_host == ""
assert settings.ssh_port == 22
assert settings.jellyfin_url == ""
assert settings.jellyseerr_url == ""
assert settings.log_level == "INFO"
assert settings.remote_media_root == ""
assert settings.ssh_key_directory == ""
@@ -21,10 +19,6 @@ class TestSettings:
def test_from_env(self):
env = {
"JELLYFIN_URL": "https://test.example.com",
"JELLYFIN_API_KEY": "key123",
"JELLYSEERR_URL": "https://requests.example.com",
"JELLYSEERR_API_KEY": "seerr123",
"LOG_LEVEL": "DEBUG",
"SSH_HOST": "192.168.1.1",
"SSH_USERNAME": "testuser",
@@ -33,10 +27,6 @@ class TestSettings:
}
with patch.dict(os.environ, env, clear=True):
settings = Settings(_env_file=None)
assert settings.jellyfin_url == "https://test.example.com"
assert settings.jellyfin_api_key == "key123"
assert settings.jellyseerr_url == "https://requests.example.com"
assert settings.jellyseerr_api_key == "seerr123"
assert settings.log_level == "DEBUG"
assert settings.ssh_host == "192.168.1.1"
assert settings.ssh_username == "testuser"