fixes and improvements
This commit is contained in:
@@ -21,15 +21,6 @@ logger = logging.getLogger(__name__)
|
|||||||
class Settings(BaseSettings):
|
class Settings(BaseSettings):
|
||||||
"""Flat application settings read from env vars / .env file."""
|
"""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
|
# Logging
|
||||||
log_level: str = "INFO"
|
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:
|
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)
|
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"):
|
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 "")
|
cache_key = (machine["id"], machine["jellyfin_url"], machine.get("jellyfin_api_key") or "")
|
||||||
return _jellyfin_client_for(cache_key)
|
return _jellyfin_client_for(cache_key)
|
||||||
|
|
||||||
settings = get_settings()
|
raise RuntimeError("No Jellyfin machine is configured. Add a machine with jellyfin_url and jellyfin_api_key in 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))
|
|
||||||
|
|
||||||
|
|
||||||
def get_jellyseerr_client(request: Request = None) -> JellyseerrClient | None:
|
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"):
|
if machine and machine.get("jellyseerr_url") and machine.get("jellyseerr_api_key"):
|
||||||
return JellyseerrClient(machine["jellyseerr_url"], machine.get("jellyseerr_api_key") or "")
|
return JellyseerrClient(machine["jellyseerr_url"], machine.get("jellyseerr_api_key") or "")
|
||||||
|
|
||||||
settings = get_settings()
|
logger.info("Jellyseerr client not configured (no machine with jellyseerr_url and jellyseerr_api_key)")
|
||||||
if not settings.jellyseerr_url or not settings.jellyseerr_api_key:
|
return None
|
||||||
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)
|
|
||||||
|
|
||||||
|
|
||||||
def get_ssh_client(request: Request = 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)
|
machine = get_settings_store().get_machine_config(_request_machine_id(request)) or _resolve_machine("jellyfin", request)
|
||||||
if machine and machine.get("jellyfin_user_id"):
|
if machine and machine.get("jellyfin_user_id"):
|
||||||
return str(machine["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)
|
client = get_jellyfin_client(request)
|
||||||
users = client.users()
|
users = client.users()
|
||||||
if not 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_issuer_url": _sanitize_url(getattr(settings, "oidc_issuer_url", "")),
|
||||||
"oidc_audience": getattr(settings, "oidc_audience", "") or "<unset>",
|
"oidc_audience": getattr(settings, "oidc_audience", "") or "<unset>",
|
||||||
"oidc_jwks_url": _sanitize_url(getattr(settings, "oidc_jwks_url", "")),
|
"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_host": getattr(settings, "ssh_host", "") or "<unset>",
|
||||||
"ssh_username": getattr(settings, "ssh_username", "") or "<unset>",
|
"ssh_username": getattr(settings, "ssh_username", "") or "<unset>",
|
||||||
"ssh_port": str(getattr(settings, "ssh_port", 22) or 22),
|
"ssh_port": str(getattr(settings, "ssh_port", 22) or 22),
|
||||||
|
|||||||
@@ -42,11 +42,11 @@ def _default_local_machine() -> dict[str, Any]:
|
|||||||
"password": "",
|
"password": "",
|
||||||
"media_root": settings.media_root,
|
"media_root": settings.media_root,
|
||||||
"path_prefix": settings.path_prefix,
|
"path_prefix": settings.path_prefix,
|
||||||
"jellyfin_url": settings.jellyfin_url,
|
"jellyfin_url": "",
|
||||||
"jellyfin_user_id": settings.jellyfin_user_id,
|
"jellyfin_user_id": "",
|
||||||
"jellyfin_api_key": settings.jellyfin_api_key or "",
|
"jellyfin_api_key": "",
|
||||||
"jellyseerr_url": settings.jellyseerr_url,
|
"jellyseerr_url": "",
|
||||||
"jellyseerr_api_key": settings.jellyseerr_api_key or "",
|
"jellyseerr_api_key": "",
|
||||||
"notes": "",
|
"notes": "",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,8 +11,6 @@ class TestSettings:
|
|||||||
settings = Settings(_env_file=None)
|
settings = Settings(_env_file=None)
|
||||||
assert settings.ssh_host == ""
|
assert settings.ssh_host == ""
|
||||||
assert settings.ssh_port == 22
|
assert settings.ssh_port == 22
|
||||||
assert settings.jellyfin_url == ""
|
|
||||||
assert settings.jellyseerr_url == ""
|
|
||||||
assert settings.log_level == "INFO"
|
assert settings.log_level == "INFO"
|
||||||
assert settings.remote_media_root == ""
|
assert settings.remote_media_root == ""
|
||||||
assert settings.ssh_key_directory == ""
|
assert settings.ssh_key_directory == ""
|
||||||
@@ -21,10 +19,6 @@ class TestSettings:
|
|||||||
|
|
||||||
def test_from_env(self):
|
def test_from_env(self):
|
||||||
env = {
|
env = {
|
||||||
"JELLYFIN_URL": "https://test.example.com",
|
|
||||||
"JELLYFIN_API_KEY": "key123",
|
|
||||||
"JELLYSEERR_URL": "https://requests.example.com",
|
|
||||||
"JELLYSEERR_API_KEY": "seerr123",
|
|
||||||
"LOG_LEVEL": "DEBUG",
|
"LOG_LEVEL": "DEBUG",
|
||||||
"SSH_HOST": "192.168.1.1",
|
"SSH_HOST": "192.168.1.1",
|
||||||
"SSH_USERNAME": "testuser",
|
"SSH_USERNAME": "testuser",
|
||||||
@@ -33,10 +27,6 @@ class TestSettings:
|
|||||||
}
|
}
|
||||||
with patch.dict(os.environ, env, clear=True):
|
with patch.dict(os.environ, env, clear=True):
|
||||||
settings = Settings(_env_file=None)
|
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.log_level == "DEBUG"
|
||||||
assert settings.ssh_host == "192.168.1.1"
|
assert settings.ssh_host == "192.168.1.1"
|
||||||
assert settings.ssh_username == "testuser"
|
assert settings.ssh_username == "testuser"
|
||||||
|
|||||||
Reference in New Issue
Block a user