Add read-only analyze command
This commit is contained in:
+42
-13
@@ -3,6 +3,7 @@ import argparse
|
||||
|
||||
from serato_doctor.config import ScanConfig
|
||||
from serato_doctor.crate_parser import parse_crates
|
||||
from serato_doctor.health import analyze_health
|
||||
from serato_doctor.logging import configure_logging
|
||||
from serato_doctor.models.library import Library
|
||||
from serato_doctor.scanner import scan_audio
|
||||
@@ -11,10 +12,23 @@ from serato_doctor.report import write_csv, write_missing_report
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(prog="serato-doctor")
|
||||
parser.add_argument(
|
||||
"command", nargs="?", choices=("scan", "analyze"), default="scan"
|
||||
)
|
||||
parser.add_argument("--serato", default=str(Path.home() / "Music/_Serato_"))
|
||||
parser.add_argument("--music", default=str(Path.home() / "Library/CloudStorage/OneDrive-Personal/Jukebox"))
|
||||
parser.add_argument("--out", default=str(Path.home() / "Desktop/serato_doctor_scan.csv"))
|
||||
parser.add_argument("--report", default=str(Path.home() / "Desktop/serato_doctor_missing_report.txt"))
|
||||
parser.add_argument(
|
||||
"--music",
|
||||
default=str(
|
||||
Path.home() / "Library/CloudStorage/OneDrive-Personal/Jukebox"
|
||||
),
|
||||
)
|
||||
parser.add_argument(
|
||||
"--out", default=str(Path.home() / "Desktop/serato_doctor_scan.csv")
|
||||
)
|
||||
parser.add_argument(
|
||||
"--report",
|
||||
default=str(Path.home() / "Desktop/serato_doctor_missing_report.txt"),
|
||||
)
|
||||
parser.add_argument(
|
||||
"--reference-root",
|
||||
action="append",
|
||||
@@ -37,7 +51,7 @@ def main():
|
||||
log_file=Path(args.log_file) if args.log_file else None,
|
||||
)
|
||||
logger = configure_logging(config.verbose, config.log_file)
|
||||
logger.info("Starting read-only library scan")
|
||||
logger.info("Starting read-only library inspection")
|
||||
logger.debug("Serato directory: %s", config.serato)
|
||||
logger.debug("Music directory: %s", config.music)
|
||||
|
||||
@@ -53,15 +67,30 @@ def main():
|
||||
logger.info("Scanned %d disk tracks", len(library.tracks))
|
||||
logger.info("Found %d references missing by filename", missing_count)
|
||||
|
||||
write_csv(results, config.out)
|
||||
write_missing_report(results, config.report)
|
||||
logger.info("Wrote CSV and missing-reference reports")
|
||||
|
||||
print(f"Crate references: {len(library.references)}")
|
||||
print(f"Disk tracks: {len(library.tracks)}")
|
||||
print(f"Missing by filename: {missing_count}")
|
||||
print(f"CSV: {config.out}")
|
||||
print(f"Report: {config.report}")
|
||||
if args.command == "analyze":
|
||||
health = analyze_health(library)
|
||||
score = f"{health.score:.1f}%" if health.score is not None else "Not assessed"
|
||||
logger.info("Calculated library health: %s", score)
|
||||
print(f"Overall Health: {score}")
|
||||
print(f"Score Basis: {health.score_basis}")
|
||||
print(f"Tracks: {health.disk_tracks}")
|
||||
print(f"Crate References: {health.total_references}")
|
||||
print(f"Healthy References: {health.healthy_references}")
|
||||
print(f"Broken References: {health.missing_references}")
|
||||
print(f"Unique Missing Filenames: {health.unique_missing_filenames}")
|
||||
print(f"Duplicate Filename Groups: {health.duplicate_filename_groups}")
|
||||
print(f"Duplicate Files: {health.duplicate_files}")
|
||||
print(f"Unused Tracks: {health.unused_tracks}")
|
||||
print(f"Suggested Matches: {health.suggested_matches}")
|
||||
else:
|
||||
write_csv(results, config.out)
|
||||
write_missing_report(results, config.report)
|
||||
logger.info("Wrote CSV and missing-reference reports")
|
||||
print(f"Crate references: {len(library.references)}")
|
||||
print(f"Disk tracks: {len(library.tracks)}")
|
||||
print(f"Missing by filename: {missing_count}")
|
||||
print(f"CSV: {config.out}")
|
||||
print(f"Report: {config.report}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
Reference in New Issue
Block a user