from dataclasses import dataclass from pathlib import Path from typing import Optional, Tuple from serato_doctor.models.track import DiskTrack @dataclass(frozen=True) class BrokenSymlink: """A symbolic link whose target cannot be resolved.""" path: Path target: Optional[Path] @dataclass(frozen=True) class FilesystemScan: """Read-only findings from one traversal of a music folder.""" tracks: Tuple[DiskTrack, ...] broken_symlinks: Tuple[BrokenSymlink, ...]