Add working crate parser and filesystem scanner

This commit is contained in:
Philip Guzman
2026-06-29 23:09:52 -07:00
parent 66d5a62516
commit 4ad5b8a574
4 changed files with 141 additions and 0 deletions
+46
View File
@@ -0,0 +1,46 @@
from pathlib import Path
import argparse
import csv
from serato_doctor.crate_parser import parse_crates
from serato_doctor.scanner import scan_audio
def main():
parser = argparse.ArgumentParser(prog="serato-doctor")
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"))
args = parser.parse_args()
serato = Path(args.serato)
music = Path(args.music)
out = Path(args.out)
refs = parse_crates(serato / "Subcrates")
disk = scan_audio(music)
disk_names = {t.filename for t in disk}
rows = []
for ref in refs:
rows.append({
"crate": str(ref.source),
"serato_path": str(ref.path),
"filename": ref.filename,
"exists_by_filename": ref.filename in disk_names,
})
with out.open("w", newline="", encoding="utf-8") as f:
writer = csv.DictWriter(f, fieldnames=["crate", "serato_path", "filename", "exists_by_filename"])
writer.writeheader()
writer.writerows(rows)
print(f"Crate references: {len(refs)}")
print(f"Disk tracks: {len(disk)}")
print(f"Missing by filename: {sum(1 for r in rows if not r['exists_by_filename'])}")
print(f"Wrote: {out}")
if __name__ == "__main__":
main()