| 95 | |
| 96 | @dataclass |
| 97 | class MigrationPlan: |
| 98 | home: Path |
| 99 | plans: list[BucketPlan] = field(default_factory=list) |
| 100 | skipped: list[BucketSkip] = field(default_factory=list) |
| 101 | |
| 102 | def to_dict(self) -> dict[str, Any]: |
| 103 | return { |
| 104 | "home": str(self.home), |
| 105 | "plans": [plan.to_dict() for plan in self.plans], |
| 106 | "skipped": [skip.to_dict() for skip in self.skipped], |
| 107 | "counts": { |
| 108 | "to_migrate": len(self.plans), |
| 109 | "skipped": len(self.skipped), |
| 110 | }, |
| 111 | } |
| 112 | |
| 113 | |
| 114 | def _resolve_bucket_cwd(bucket_path: Path, bucket_name: str) -> Path: |