Files
ohm_streaming/app/services/settings.py
T
Roman 41566ab5fb v0.1.0 — Réécriture complète de OhmStreaming
Nouvelle version réécrite de zéro : recherche multi-sources (Vostfree,
French-Manga), extraction 2 niveaux, proxy vidéo intégré, streaming/téléchargement
HLS, métadonnées Kitsu, bibliothèque locale, comptes JWT + administration,
découverte fusionnée, indexeur Torznab (Sonarr/Prowlarr).
2026-09-22 10:05:47 +00:00

73 lines
2.3 KiB
Python

"""Paramètres persistés en DB (activation des sources, réglages UI…)."""
import json
import logging
import secrets
from app.db import db
logger = logging.getLogger(__name__)
async def get_setting(key: str, default: object = None) -> object:
row = await db.fetchone("SELECT value FROM settings WHERE key = ?", (key,))
if row is None:
return default
try:
return json.loads(row["value"])
except json.JSONDecodeError:
logger.warning("Paramètre %r corrompu, valeur par défaut utilisée", key)
return default
async def set_setting(key: str, value: object) -> None:
await db.execute(
"INSERT INTO settings (key, value) VALUES (?, ?) "
"ON CONFLICT(key) DO UPDATE SET value = excluded.value",
(key, json.dumps(value, ensure_ascii=False)),
)
async def is_source_enabled(name: str) -> bool:
return bool(await get_setting(f"source:{name}:enabled", True))
async def set_source_enabled(name: str, enabled: bool) -> None:
await set_setting(f"source:{name}:enabled", enabled)
logger.info("Source %s %s", name, "activée" if enabled else "désactivée")
# ---------------------------------------------------------------- intégrations *arr
TORZNAB_APIKEY_KEY = "torznab:apikey"
SONARR_URL_KEY = "sonarr:url"
SONARR_APIKEY_KEY = "sonarr:apikey"
async def get_torznab_apikey() -> str:
"""Clé API Torznab (générée au premier appel, persistée en DB)."""
key = await get_setting(TORZNAB_APIKEY_KEY)
if not isinstance(key, str) or not key:
key = secrets.token_hex(16)
await set_setting(TORZNAB_APIKEY_KEY, key)
logger.info("Clé API Torznab générée")
return key
async def reset_torznab_apikey() -> str:
key = secrets.token_hex(16)
await set_setting(TORZNAB_APIKEY_KEY, key)
logger.info("Clé API Torznab régénérée")
return key
async def get_sonarr_config() -> dict[str, str]:
return {
"url": await get_setting(SONARR_URL_KEY, ""),
"apikey": await get_setting(SONARR_APIKEY_KEY, ""),
}
async def set_sonarr_config(url: str, apikey: str) -> None:
await set_setting(SONARR_URL_KEY, url.rstrip("/"))
await set_setting(SONARR_APIKEY_KEY, apikey.strip())
logger.info("Configuration Sonarr enregistrée (%s)", url)