feat: add comprehensive error handling and logging for vault settings save operations with permission error detection and detailed error messages in UI toast notifications

This commit is contained in:
2026-03-26 16:00:27 -04:00
parent 2686cc5d11
commit 34f4e41419
4 changed files with 180 additions and 9 deletions
+14 -1
View File
@@ -1477,7 +1477,20 @@ async def api_update_vault_settings(vault_name: str, body: dict = Body(...), cur
settings_to_update["hiddenWhitelist"] = body["hiddenWhitelist"]
# Update persisted settings
updated = update_vault_setting(vault_name, settings_to_update)
try:
updated = update_vault_setting(vault_name, settings_to_update)
except PermissionError as e:
logger.error(f"Permission error saving settings for vault '{vault_name}': {e}")
raise HTTPException(
status_code=500,
detail=f"Permission denied: Cannot write to settings file. Check /app/data permissions."
)
except Exception as e:
logger.error(f"Error saving settings for vault '{vault_name}': {e}")
raise HTTPException(
status_code=500,
detail=f"Failed to save settings: {str(e)}"
)
# Update in-memory vault config
if vault_name in vault_config:
+19 -6
View File
@@ -46,14 +46,27 @@ def save_vault_settings() -> None:
"""Persist vault settings to disk."""
with _settings_lock:
try:
logger.info(f"Attempting to save settings to {_SETTINGS_PATH}")
logger.info(f"Parent directory: {_SETTINGS_PATH.parent}")
logger.info(f"Parent exists: {_SETTINGS_PATH.parent.exists()}")
_SETTINGS_PATH.parent.mkdir(parents=True, exist_ok=True)
_SETTINGS_PATH.write_text(
json.dumps(_vault_settings, indent=2, ensure_ascii=False),
encoding="utf-8"
)
logger.info(f"Saved settings for {len(_vault_settings)} vaults")
logger.info(f"Directory created/verified: {_SETTINGS_PATH.parent}")
content = json.dumps(_vault_settings, indent=2, ensure_ascii=False)
logger.info(f"JSON content prepared ({len(content)} bytes)")
_SETTINGS_PATH.write_text(content, encoding="utf-8")
logger.info(f"Successfully saved settings for {len(_vault_settings)} vaults to {_SETTINGS_PATH}")
except PermissionError as e:
logger.error(f"Permission denied writing to {_SETTINGS_PATH}: {e}")
logger.error(f"Check that user has write permissions to {_SETTINGS_PATH.parent}")
raise
except Exception as e:
logger.error(f"Failed to save vault settings: {e}")
logger.error(f"Failed to save vault settings to {_SETTINGS_PATH}: {e}")
logger.error(f"Error type: {type(e).__name__}")
import traceback
logger.error(f"Traceback: {traceback.format_exc()}")
raise