| from helpers.api import ApiHandler, Request, Response, send_file |
| from helpers.backup import BackupService |
| from helpers.persist_chat import save_tmp_chats |
|
|
|
|
| class BackupCreate(ApiHandler): |
| @classmethod |
| def requires_auth(cls) -> bool: |
| return True |
|
|
| @classmethod |
| def requires_loopback(cls) -> bool: |
| return False |
|
|
| async def process(self, input: dict, request: Request) -> dict | Response: |
| try: |
| |
| include_patterns = input.get("include_patterns", []) |
| exclude_patterns = input.get("exclude_patterns", []) |
| include_hidden = input.get("include_hidden", True) |
| backup_name = input.get("backup_name", "agent-zero-backup") |
|
|
| |
| patterns_string = input.get("patterns", "") |
| if patterns_string and not include_patterns and not exclude_patterns: |
| |
| lines = [line.strip() for line in patterns_string.split('\n') if line.strip() and not line.strip().startswith('#')] |
| for line in lines: |
| if line.startswith('!'): |
| exclude_patterns.append(line[1:]) |
| else: |
| include_patterns.append(line) |
|
|
| |
| save_tmp_chats() |
|
|
| |
| backup_service = BackupService() |
| zip_path = await backup_service.create_backup( |
| include_patterns=include_patterns, |
| exclude_patterns=exclude_patterns, |
| include_hidden=include_hidden, |
| backup_name=backup_name |
| ) |
|
|
| |
| return send_file( |
| zip_path, |
| as_attachment=True, |
| download_name=f"{backup_name}.zip", |
| mimetype='application/zip' |
| ) |
|
|
| except Exception as e: |
| return { |
| "success": False, |
| "error": str(e) |
| } |
|
|