From f78ea66a33a189c85510acbdf7bc38ede9f81fd0 Mon Sep 17 00:00:00 2001 From: Chuck Date: Mon, 27 Apr 2026 12:26:35 -0400 Subject: [PATCH] fix(backup): address Codacy findings - api_v3: replace 'fonts' in ' '.join(result.restored) substring check with any(r.startswith("fonts") for r in result.restored) to avoid fragile joined-string membership testing - api_v3: replace deprecated datetime.utcnow() and utcfromtimestamp() with datetime.now(timezone.utc) and fromtimestamp(..., timezone.utc); add timezone to import - test: remove unused import io (backup_manager no longer uses BytesIO) - src/backup_manager.py hardcoded /tmp sentinel was already fixed in a prior commit (tempfile.TemporaryDirectory) Co-Authored-By: Claude Sonnet 4.6 --- test/test_backup_manager.py | 1 - web_interface/blueprints/api_v3.py | 8 ++++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/test/test_backup_manager.py b/test/test_backup_manager.py index 2d36602f..fef10d82 100644 --- a/test/test_backup_manager.py +++ b/test/test_backup_manager.py @@ -2,7 +2,6 @@ from __future__ import annotations -import io import json import zipfile from pathlib import Path diff --git a/web_interface/blueprints/api_v3.py b/web_interface/blueprints/api_v3.py index bb55ee84..d4eccf3b 100644 --- a/web_interface/blueprints/api_v3.py +++ b/web_interface/blueprints/api_v3.py @@ -8,7 +8,7 @@ import time import hashlib import uuid import logging -from datetime import datetime +from datetime import datetime, timezone from pathlib import Path from typing import Optional, Tuple, Dict, Any, Type @@ -1147,7 +1147,7 @@ def backup_export(): 'status': 'success', 'filename': zip_path.name, 'size': zip_path.stat().st_size, - 'created_at': datetime.utcnow().isoformat() + 'Z', + 'created_at': datetime.now(timezone.utc).isoformat(), }) except Exception: logger.exception("[Backup] export failed") @@ -1167,7 +1167,7 @@ def backup_list(): entries.append({ 'filename': path.name, 'size': stat.st_size, - 'created_at': datetime.utcfromtimestamp(stat.st_mtime).isoformat() + 'Z', + 'created_at': datetime.fromtimestamp(stat.st_mtime, timezone.utc).isoformat(), }) return jsonify({'status': 'success', 'data': entries}) except Exception: @@ -1355,7 +1355,7 @@ def backup_restore(): result.plugins_failed.append({'plugin_id': plugin_id, 'error': str(install_err)}) # Clear font catalog cache so restored fonts show up. - if 'fonts' in ' '.join(result.restored): + if any(r.startswith("fonts") for r in result.restored): try: from web_interface.cache import delete_cached delete_cached('fonts_catalog')