(self, input: dict, request: Request)
| 15 | return False |
| 16 | |
| 17 | async def process(self, input: dict, request: Request) -> dict | Response: |
| 18 | # Handle file upload |
| 19 | if 'backup_file' not in request.files: |
| 20 | return {"success": False, "error": "No backup file provided"} |
| 21 | |
| 22 | backup_file: FileStorage = request.files['backup_file'] |
| 23 | if backup_file.filename == '': |
| 24 | return {"success": False, "error": "No file selected"} |
| 25 | |
| 26 | # Get restore configuration from form data |
| 27 | metadata_json = request.form.get('metadata', '{}') |
| 28 | overwrite_policy = request.form.get('overwrite_policy', 'overwrite') # overwrite, skip, backup |
| 29 | clean_before_restore = request.form.get('clean_before_restore', 'false').lower() == 'true' |
| 30 | |
| 31 | try: |
| 32 | metadata = json.loads(metadata_json) |
| 33 | restore_include_patterns = metadata.get("include_patterns", []) |
| 34 | restore_exclude_patterns = metadata.get("exclude_patterns", []) |
| 35 | except json.JSONDecodeError: |
| 36 | return {"success": False, "error": "Invalid metadata JSON"} |
| 37 | |
| 38 | try: |
| 39 | backup_service = BackupService() |
| 40 | result = await backup_service.restore_backup( |
| 41 | backup_file=backup_file, |
| 42 | restore_include_patterns=restore_include_patterns, |
| 43 | restore_exclude_patterns=restore_exclude_patterns, |
| 44 | overwrite_policy=overwrite_policy, |
| 45 | clean_before_restore=clean_before_restore, |
| 46 | user_edited_metadata=metadata |
| 47 | ) |
| 48 | |
| 49 | # Load all chats from the chats folder |
| 50 | load_tmp_chats() |
| 51 | |
| 52 | return { |
| 53 | "success": True, |
| 54 | "restored_files": result["restored_files"], |
| 55 | "deleted_files": result.get("deleted_files", []), |
| 56 | "skipped_files": result["skipped_files"], |
| 57 | "errors": result["errors"], |
| 58 | "backup_metadata": result["backup_metadata"], |
| 59 | "clean_before_restore": result.get("clean_before_restore", False) |
| 60 | } |
| 61 | |
| 62 | except Exception as e: |
| 63 | return { |
| 64 | "success": False, |
| 65 | "error": str(e) |
| 66 | } |
nothing calls this directly
no test coverage detected