68 lines
1.7 KiB
Python
68 lines
1.7 KiB
Python
"""Protocol definitions for the shared package"""
|
|
from typing import Protocol, Any
|
|
from pathlib import Path
|
|
from dataclasses import dataclass
|
|
from datetime import datetime
|
|
|
|
|
|
@dataclass
|
|
class FileRecord:
|
|
"""Core file record with all metadata"""
|
|
path: Path
|
|
size: int
|
|
modified_time: float
|
|
created_time: float
|
|
disk_label: str
|
|
checksum: str | None = None
|
|
status: str = 'indexed' # indexed, planned, moved, verified
|
|
category: str | None = None
|
|
duplicate_of: str | None = None
|
|
|
|
|
|
@dataclass
|
|
class OperationRecord:
|
|
"""Record of a migration operation"""
|
|
source_path: Path
|
|
target_path: Path
|
|
operation_type: str # move, copy, hardlink, symlink
|
|
status: str = 'pending' # pending, in_progress, completed, failed
|
|
error: str | None = None
|
|
executed_at: datetime | None = None
|
|
verified: bool = False
|
|
|
|
|
|
class IDatabase(Protocol):
|
|
"""Protocol for database operations"""
|
|
|
|
def store_file(self, file_record: FileRecord) -> None:
|
|
"""Store a file record"""
|
|
...
|
|
|
|
def get_files_by_disk(self, disk: str) -> list[FileRecord]:
|
|
"""Get all files on a specific disk"""
|
|
...
|
|
|
|
def store_operation(self, operation: OperationRecord) -> None:
|
|
"""Store an operation record"""
|
|
...
|
|
|
|
def get_pending_operations(self) -> list[OperationRecord]:
|
|
"""Get all pending operations"""
|
|
...
|
|
|
|
|
|
class ILogger(Protocol):
|
|
"""Protocol for logging operations"""
|
|
|
|
def info(self, message: str) -> None:
|
|
...
|
|
|
|
def warning(self, message: str) -> None:
|
|
...
|
|
|
|
def error(self, message: str) -> None:
|
|
...
|
|
|
|
def debug(self, message: str) -> None:
|
|
...
|