Spaces:
Paused
Paused
| from python.helpers.api import ApiHandler, Request, Response | |
| from werkzeug.datastructures import FileStorage | |
| from python.helpers.backup import BackupService | |
| from python.helpers.persist_chat import load_tmp_chats | |
| import json | |
| class BackupRestore(ApiHandler): | |
| def requires_auth(cls) -> bool: | |
| return True | |
| def requires_loopback(cls) -> bool: | |
| return False | |
| async def process(self, input: dict, request: Request) -> dict | Response: | |
| # Handle file upload | |
| if 'backup_file' not in request.files: | |
| return {"success": False, "error": "No backup file provided"} | |
| backup_file: FileStorage = request.files['backup_file'] | |
| if backup_file.filename == '': | |
| return {"success": False, "error": "No file selected"} | |
| # Get restore configuration from form data | |
| metadata_json = request.form.get('metadata', '{}') | |
| overwrite_policy = request.form.get('overwrite_policy', 'overwrite') # overwrite, skip, backup | |
| clean_before_restore = request.form.get('clean_before_restore', 'false').lower() == 'true' | |
| try: | |
| metadata = json.loads(metadata_json) | |
| restore_include_patterns = metadata.get("include_patterns", []) | |
| restore_exclude_patterns = metadata.get("exclude_patterns", []) | |
| except json.JSONDecodeError: | |
| return {"success": False, "error": "Invalid metadata JSON"} | |
| try: | |
| backup_service = BackupService() | |
| result = await backup_service.restore_backup( | |
| backup_file=backup_file, | |
| restore_include_patterns=restore_include_patterns, | |
| restore_exclude_patterns=restore_exclude_patterns, | |
| overwrite_policy=overwrite_policy, | |
| clean_before_restore=clean_before_restore, | |
| user_edited_metadata=metadata | |
| ) | |
| # Load all chats from the chats folder | |
| load_tmp_chats() | |
| return { | |
| "success": True, | |
| "restored_files": result["restored_files"], | |
| "deleted_files": result.get("deleted_files", []), | |
| "skipped_files": result["skipped_files"], | |
| "errors": result["errors"], | |
| "backup_metadata": result["backup_metadata"], | |
| "clean_before_restore": result.get("clean_before_restore", False) | |
| } | |
| except Exception as e: | |
| return { | |
| "success": False, | |
| "error": str(e) | |
| } | |