Classify static and smart crates
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
from serato_doctor.models.crate import Crate
|
||||
from serato_doctor.models.crate import Crate, CrateKind
|
||||
from serato_doctor.models.health import HealthReport
|
||||
from serato_doctor.models.library import Library
|
||||
from serato_doctor.models.match import MatchEvidence, TrackMatch
|
||||
@@ -7,6 +7,7 @@ from serato_doctor.models.track import DiskTrack
|
||||
|
||||
__all__ = [
|
||||
"Crate",
|
||||
"CrateKind",
|
||||
"DiskTrack",
|
||||
"HealthReport",
|
||||
"Library",
|
||||
|
||||
@@ -1,13 +1,21 @@
|
||||
from dataclasses import dataclass
|
||||
from enum import Enum
|
||||
from pathlib import Path
|
||||
from typing import Tuple
|
||||
|
||||
from serato_doctor.models.reference import TrackReference
|
||||
|
||||
|
||||
class CrateKind(str, Enum):
|
||||
STATIC = "static"
|
||||
SMART = "smart"
|
||||
UNKNOWN = "unknown"
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class Crate:
|
||||
"""A Serato crate and the track references parsed from it."""
|
||||
|
||||
path: Path
|
||||
references: Tuple[TrackReference, ...]
|
||||
kind: CrateKind = CrateKind.UNKNOWN
|
||||
|
||||
@@ -8,6 +8,7 @@ class HealthReport:
|
||||
|
||||
score: Optional[float]
|
||||
total_references: int
|
||||
scored_references: int
|
||||
healthy_references: int
|
||||
missing_references: int
|
||||
unique_missing_filenames: int
|
||||
@@ -16,7 +17,11 @@ class HealthReport:
|
||||
duplicate_files: int
|
||||
unused_tracks: int
|
||||
suggested_matches: int
|
||||
static_crates: int
|
||||
smart_crates: int
|
||||
unknown_crates: int
|
||||
dynamic_references_excluded: int
|
||||
|
||||
@property
|
||||
def score_basis(self) -> str:
|
||||
return "Resolved crate references / total crate references"
|
||||
return "Resolved non-dynamic references / non-dynamic references scored"
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
from dataclasses import dataclass
|
||||
from typing import Iterable, Tuple
|
||||
|
||||
from serato_doctor.models.crate import Crate
|
||||
from serato_doctor.models.reference import ReferenceResult, TrackReference
|
||||
from serato_doctor.models.track import DiskTrack
|
||||
|
||||
@@ -11,6 +12,7 @@ class Library:
|
||||
|
||||
references: Tuple[TrackReference, ...]
|
||||
tracks: Tuple[DiskTrack, ...]
|
||||
crates: Tuple[Crate, ...] = ()
|
||||
|
||||
@classmethod
|
||||
def build(
|
||||
@@ -20,6 +22,18 @@ class Library:
|
||||
) -> "Library":
|
||||
return cls(tuple(references), tuple(tracks))
|
||||
|
||||
@classmethod
|
||||
def from_crates(
|
||||
cls, crates: Iterable[Crate], tracks: Iterable[DiskTrack]
|
||||
) -> "Library":
|
||||
crate_tuple = tuple(crates)
|
||||
references = tuple(
|
||||
reference
|
||||
for crate in crate_tuple
|
||||
for reference in crate.references
|
||||
)
|
||||
return cls(references, tuple(tracks), crate_tuple)
|
||||
|
||||
def reconcile_by_filename(self) -> Tuple[ReferenceResult, ...]:
|
||||
disk_names = {track.filename for track in self.tracks}
|
||||
return tuple(
|
||||
|
||||
Reference in New Issue
Block a user