| from helpers.api import ApiHandler, Request, Response |
| from helpers.backup import BackupService |
|
|
|
|
| class BackupTest(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) |
| max_files = input.get("max_files", 1000) |
|
|
| |
| patterns_string = input.get("patterns", "") |
| if patterns_string and not include_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) |
|
|
| if not include_patterns: |
| return { |
| "success": True, |
| "files": [], |
| "total_count": 0, |
| "truncated": False |
| } |
|
|
| |
| metadata = { |
| "include_patterns": include_patterns, |
| "exclude_patterns": exclude_patterns, |
| "include_hidden": include_hidden |
| } |
|
|
| backup_service = BackupService() |
| matched_files = await backup_service.test_patterns(metadata, max_files=max_files) |
|
|
| return { |
| "success": True, |
| "files": matched_files, |
| "total_count": len(matched_files), |
| "truncated": len(matched_files) >= max_files |
| } |
|
|
| except Exception as e: |
| return { |
| "success": False, |
| "error": str(e) |
| } |
|
|