Add read-only database V2 parser
This commit is contained in:
+24
-1
@@ -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
|
||||
),
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user