Add read-only database V2 parser

This commit is contained in:
Philip Guzman
2026-07-01 08:13:20 -07:00
parent 8ff4db4951
commit 37786612b7
14 changed files with 238 additions and 3 deletions
+24 -1
View File
@@ -1,5 +1,7 @@
from collections import Counter
from serato_doctor.duplicates import find_duplicate_groups
from serato_doctor.matching import MatchingEngine
from serato_doctor.matching import MatchingEngine, normalize
from serato_doctor.models.crate import CrateKind
from serato_doctor.models.duplicate import DuplicateKind
from serato_doctor.models.health import HealthReport
@@ -44,6 +46,13 @@ def analyze_health(library: Library) -> HealthReport:
bool(matcher.candidates_for(result.reference)) for result in missing
)
database_tracks = library.database.tracks if library.database else ()
database_names = {normalize(track.filename) for track in database_tracks}
library_names = {normalize(track.filename) for track in library.tracks}
database_path_counts = Counter(
normalize(str(track.path)) for track in database_tracks
)
return HealthReport(
score=score,
total_references=len(library.references),
@@ -82,4 +91,18 @@ def analyze_health(library: Library) -> HealthReport:
for crate in library.crates
if crate.kind is CrateKind.SMART
),
database_present=library.database is not None,
database_entries=len(database_tracks),
database_library_matches=sum(
normalize(track.filename) in library_names for track in database_tracks
),
database_unmatched_entries=sum(
normalize(track.filename) not in library_names for track in database_tracks
),
tracks_missing_from_database=sum(
normalize(track.filename) not in database_names for track in library.tracks
),
duplicate_database_paths=sum(
count - 1 for count in database_path_counts.values() if count > 1
),
)