pre-migration commit
This commit is contained in:
+32
-20
@@ -28,6 +28,7 @@ _SAVE_LOCK_STALE_SECONDS = 3600 # consider lock stale after 1 hour
|
||||
|
||||
_CONFIG_CACHE: Dict[str, Any] = {}
|
||||
_LAST_SAVED_CONFIG: Dict[str, Any] = {}
|
||||
_CONFIG_SUMMARY_PENDING = False
|
||||
_CONFIG_SAVE_MAX_RETRIES = 5
|
||||
_CONFIG_SAVE_RETRY_DELAY = 0.15
|
||||
_CONFIG_MISSING = object()
|
||||
@@ -84,9 +85,28 @@ def global_config() -> List[Dict[str, Any]]:
|
||||
|
||||
def clear_config_cache() -> None:
|
||||
"""Clear the configuration cache and baseline snapshot."""
|
||||
global _CONFIG_CACHE, _LAST_SAVED_CONFIG
|
||||
global _CONFIG_CACHE, _LAST_SAVED_CONFIG, _CONFIG_SUMMARY_PENDING
|
||||
_CONFIG_CACHE = {}
|
||||
_LAST_SAVED_CONFIG = {}
|
||||
_CONFIG_SUMMARY_PENDING = False
|
||||
|
||||
|
||||
def _log_config_load_summary(config: Dict[str, Any]) -> None:
|
||||
try:
|
||||
provs = list(config.get("provider", {}).keys()) if isinstance(config.get("provider"), dict) else []
|
||||
stores = list(config.get("store", {}).keys()) if isinstance(config.get("store"), dict) else []
|
||||
mtime = None
|
||||
try:
|
||||
mtime = datetime.datetime.fromtimestamp(db.db_path.stat().st_mtime, datetime.timezone.utc).isoformat().replace('+00:00', 'Z')
|
||||
except Exception:
|
||||
mtime = None
|
||||
summary = (
|
||||
f"Loaded config from {db.db_path.name}: providers={len(provs)} ({', '.join(provs[:10])}{'...' if len(provs)>10 else ''}), "
|
||||
f"stores={len(stores)} ({', '.join(stores[:10])}{'...' if len(stores)>10 else ''}), mtime={mtime}"
|
||||
)
|
||||
log(summary)
|
||||
except Exception:
|
||||
logger.exception("Failed to build config load summary from %s", db.db_path)
|
||||
|
||||
|
||||
def get_nested_config_value(config: Dict[str, Any], *path: str) -> Any:
|
||||
@@ -624,9 +644,12 @@ def _count_changed_entries(old_config: Dict[str, Any], new_config: Dict[str, Any
|
||||
return len(changed) + len(removed)
|
||||
|
||||
|
||||
def load_config() -> Dict[str, Any]:
|
||||
global _CONFIG_CACHE, _LAST_SAVED_CONFIG
|
||||
def load_config(*, emit_summary: bool = True) -> Dict[str, Any]:
|
||||
global _CONFIG_CACHE, _LAST_SAVED_CONFIG, _CONFIG_SUMMARY_PENDING
|
||||
if _CONFIG_CACHE:
|
||||
if emit_summary and _CONFIG_SUMMARY_PENDING:
|
||||
_log_config_load_summary(_CONFIG_CACHE)
|
||||
_CONFIG_SUMMARY_PENDING = False
|
||||
return _CONFIG_CACHE
|
||||
|
||||
# Load strictly from database
|
||||
@@ -635,24 +658,13 @@ def load_config() -> Dict[str, Any]:
|
||||
_sync_alldebrid_api_key(db_config)
|
||||
_CONFIG_CACHE = db_config
|
||||
_LAST_SAVED_CONFIG = deepcopy(db_config)
|
||||
try:
|
||||
# Log a compact summary to help detect startup overwrites/mismatches
|
||||
provs = list(db_config.get("provider", {}).keys()) if isinstance(db_config.get("provider"), dict) else []
|
||||
stores = list(db_config.get("store", {}).keys()) if isinstance(db_config.get("store"), dict) else []
|
||||
mtime = None
|
||||
try:
|
||||
mtime = datetime.datetime.fromtimestamp(db.db_path.stat().st_mtime, datetime.timezone.utc).isoformat().replace('+00:00', 'Z')
|
||||
except Exception:
|
||||
mtime = None
|
||||
summary = (
|
||||
f"Loaded config from {db.db_path.name}: providers={len(provs)} ({', '.join(provs[:10])}{'...' if len(provs)>10 else ''}), "
|
||||
f"stores={len(stores)} ({', '.join(stores[:10])}{'...' if len(stores)>10 else ''}), mtime={mtime}"
|
||||
)
|
||||
log(summary)
|
||||
if emit_summary:
|
||||
_log_config_load_summary(db_config)
|
||||
_CONFIG_SUMMARY_PENDING = False
|
||||
else:
|
||||
_CONFIG_SUMMARY_PENDING = True
|
||||
|
||||
# Forensics disabled: audit/mismatch/backup detection removed to simplify code.
|
||||
except Exception:
|
||||
logger.exception("Failed to build config load summary from %s", db.db_path)
|
||||
# Forensics disabled: audit/mismatch/backup detection removed to simplify code.
|
||||
return db_config
|
||||
|
||||
_LAST_SAVED_CONFIG = {}
|
||||
|
||||
Reference in New Issue
Block a user