Add read-only database V2 parser
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
from pathlib import Path
|
||||
|
||||
from serato_doctor.database_parser import iter_records, parse_database
|
||||
|
||||
|
||||
def record(tag, payload):
|
||||
return tag + len(payload).to_bytes(4, "big") + payload
|
||||
|
||||
|
||||
def text_record(tag, value):
|
||||
return record(tag, value.encode("utf-16-be"))
|
||||
|
||||
|
||||
def test_parse_database_reads_track_paths_and_metadata(tmp_path):
|
||||
track = b"".join(
|
||||
[
|
||||
text_record(b"pfil", "Users/sample/Music/Track.mp3"),
|
||||
text_record(b"tsng", "Track title"),
|
||||
text_record(b"tart", "Test artist"),
|
||||
text_record(b"talb", "Test album"),
|
||||
text_record(b"tgen", "House"),
|
||||
]
|
||||
)
|
||||
database_path = tmp_path / "database V2"
|
||||
database_path.write_bytes(
|
||||
text_record(b"vrsn", "2.0/Test Database") + record(b"otrk", track)
|
||||
)
|
||||
|
||||
database = parse_database(database_path)
|
||||
|
||||
assert database.version == "2.0/Test Database"
|
||||
assert len(database.tracks) == 1
|
||||
parsed = database.tracks[0]
|
||||
assert parsed.path == Path("/Users/sample/Music/Track.mp3")
|
||||
assert parsed.filename == "Track.mp3"
|
||||
assert parsed.title == "Track title"
|
||||
assert parsed.artist == "Test artist"
|
||||
assert parsed.album == "Test album"
|
||||
assert parsed.genre == "House"
|
||||
|
||||
|
||||
def test_iter_records_ignores_incomplete_trailing_record():
|
||||
complete = record(b"vrsn", "2.0".encode("utf-16-be"))
|
||||
incomplete = b"otrk\x00\x00\x00\x10short"
|
||||
|
||||
records = list(iter_records(complete + incomplete))
|
||||
|
||||
assert records == [(b"vrsn", "2.0".encode("utf-16-be"))]
|
||||
Reference in New Issue
Block a user