108 lines
2.4 KiB
Python
108 lines
2.4 KiB
Python
"""Protocol definitions for the migration package"""
|
|
from typing import Protocol
|
|
from pathlib import Path
|
|
from ..shared.models import OperationRecord
|
|
|
|
|
|
class IMigrationStrategy(Protocol):
|
|
"""Protocol for migration strategies"""
|
|
|
|
def migrate(
|
|
self,
|
|
source: Path,
|
|
destination: Path,
|
|
verify: bool = True
|
|
) -> bool:
|
|
"""Migrate a file from source to destination
|
|
|
|
Args:
|
|
source: Source file path
|
|
destination: Destination file path
|
|
verify: Whether to verify the operation
|
|
|
|
Returns:
|
|
True if migration successful
|
|
"""
|
|
...
|
|
|
|
def can_migrate(self, source: Path, destination: Path) -> bool:
|
|
"""Check if migration is possible
|
|
|
|
Args:
|
|
source: Source file path
|
|
destination: Destination file path
|
|
|
|
Returns:
|
|
True if migration is possible
|
|
"""
|
|
...
|
|
|
|
def estimate_time(self, source: Path) -> float:
|
|
"""Estimate migration time in seconds
|
|
|
|
Args:
|
|
source: Source file path
|
|
|
|
Returns:
|
|
Estimated time in seconds
|
|
"""
|
|
...
|
|
|
|
def cleanup(self, source: Path) -> bool:
|
|
"""Cleanup source file after successful migration
|
|
|
|
Args:
|
|
source: Source file path
|
|
|
|
Returns:
|
|
True if cleanup successful
|
|
"""
|
|
...
|
|
|
|
|
|
class IMigrationEngine(Protocol):
|
|
"""Protocol for migration engine"""
|
|
|
|
def plan_migration(
|
|
self,
|
|
disk: str,
|
|
target_base: Path
|
|
) -> list[OperationRecord]:
|
|
"""Plan migration for a disk
|
|
|
|
Args:
|
|
disk: Disk identifier
|
|
target_base: Target base directory
|
|
|
|
Returns:
|
|
List of planned operations
|
|
"""
|
|
...
|
|
|
|
def execute_migration(
|
|
self,
|
|
operations: list[OperationRecord],
|
|
dry_run: bool = False
|
|
) -> dict:
|
|
"""Execute migration operations
|
|
|
|
Args:
|
|
operations: List of operations to execute
|
|
dry_run: Whether to perform a dry run
|
|
|
|
Returns:
|
|
Dictionary with execution statistics
|
|
"""
|
|
...
|
|
|
|
def rollback(self, operation: OperationRecord) -> bool:
|
|
"""Rollback a migration operation
|
|
|
|
Args:
|
|
operation: Operation to rollback
|
|
|
|
Returns:
|
|
True if rollback successful
|
|
"""
|
|
...
|