scanner: Copy the Metadata code from lib/
And add an extra function for disc subtitles. Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
ad9cf2b135
commit
a28d4d4b8e
|
@ -0,0 +1,2 @@
|
|||
# Copyright 2021 (c) Anna Schumaker.
|
||||
from . import metadata
|
|
@ -0,0 +1,54 @@
|
|||
# Copyright 2021 (c) Anna Schumaker.
|
||||
import mutagen
|
||||
import re
|
||||
|
||||
class Metadata:
|
||||
def __init__(self, filepath):
|
||||
self.path = filepath
|
||||
self.file = None
|
||||
|
||||
def __enter__(self):
|
||||
self.file = mutagen.File(self.path)
|
||||
return self
|
||||
|
||||
def __exit__(self, exp_type, exp_value, traceback):
|
||||
self.file = None
|
||||
return exp_type == None
|
||||
|
||||
def album(self):
|
||||
return self.file.get("album", [ "Unknown Album" ])[0]
|
||||
|
||||
def artist(self):
|
||||
artist = self.file.get("artist", [ "Unknown Artist" ])
|
||||
return self.file.get("albumartist", artist)[0]
|
||||
|
||||
def artistsort(self):
|
||||
sort = self.file.get("artistsort", [ self.artist() ])
|
||||
return self.file.get("albumartistsort", sort)[0]
|
||||
|
||||
def decade(self):
|
||||
return (self.year() // 10) * 10
|
||||
|
||||
def discnumber(self):
|
||||
return int(self.file.get("discnumber", [ 1 ])[0])
|
||||
|
||||
def discsubtitle(self):
|
||||
return self.file.get("discsubtitle", [ None ])[0]
|
||||
|
||||
def genres(self):
|
||||
genre = self.file.get("genre", [ "" ])[0]
|
||||
return [ g.strip() for g in re.split(",|;|/|:", genre) ]
|
||||
|
||||
def length(self):
|
||||
return int(self.file.info.length)
|
||||
|
||||
def title(self):
|
||||
return self.file.get("title", [ "" ])[0]
|
||||
|
||||
def tracknumber(self):
|
||||
return int(self.file.get("tracknumber", [ 0 ])[0])
|
||||
|
||||
def year(self):
|
||||
year = self.file.get("date", [ "0" ])
|
||||
year = self.file.get("originalyear", year)[0]
|
||||
return int(re.match("\d+", year).group(0))
|
|
@ -0,0 +1,36 @@
|
|||
# Copyright 2021 (c) Anna Schumaker.
|
||||
import pathlib
|
||||
import scanner
|
||||
import unittest
|
||||
|
||||
test_tracks = pathlib.Path("./data/Test Album")
|
||||
track_01 = test_tracks / "01 - Test Track.ogg"
|
||||
track_02 = test_tracks / "02 - Test {Disc 2}.ogg"
|
||||
|
||||
class TestMetadata(unittest.TestCase):
|
||||
def test_metadata_init(self):
|
||||
mdf = scanner.metadata.Metadata(track_01)
|
||||
self.assertEqual(mdf.path, track_01)
|
||||
self.assertIsNone(mdf.file)
|
||||
|
||||
def test_metadata_track_01(self):
|
||||
with scanner.metadata.Metadata(track_01) as mdf:
|
||||
self.assertEqual(mdf.album(), "Test Album")
|
||||
self.assertEqual(mdf.artist(), "Test Artist")
|
||||
self.assertEqual(mdf.artistsort(), "Artist, Test")
|
||||
self.assertEqual(mdf.decade(), 2010)
|
||||
self.assertEqual(mdf.discnumber(), 1)
|
||||
self.assertEqual(mdf.discsubtitle(), None)
|
||||
self.assertEqual(mdf.genres(), [ "Test" ])
|
||||
self.assertEqual(mdf.length(), 10)
|
||||
self.assertEqual(mdf.title(), "Test Track")
|
||||
self.assertEqual(mdf.tracknumber(), 1)
|
||||
self.assertEqual(mdf.year(), 2019)
|
||||
|
||||
def test_metadata_track_02(self):
|
||||
with scanner.metadata.Metadata(track_02) as mdf:
|
||||
self.assertEqual(mdf.artist(), "Test Album Artist")
|
||||
self.assertEqual(mdf.artistsort(), "Album Artist, Test")
|
||||
self.assertEqual(mdf.discsubtitle(), "Electric Boogaloo")
|
||||
self.assertEqual(mdf.genres(), [ "Test", "Genre", "List" ])
|
||||
self.assertEqual(mdf.year(), 2019)
|
|
@ -50,6 +50,7 @@ generate_track(15, "Test Album/02 - Test {Disc 2}.ogg", { "Title" : "Test {Disc
|
|||
"artist" : "Test Artist",
|
||||
"artistsort" : "Artist, Test",
|
||||
"album" : "Test Album {Disc 2}",
|
||||
"discsubtitle" : "Electric Boogaloo",
|
||||
"genre" : "Test, Genre, List",
|
||||
"originalyear" : "2019",
|
||||
"date" : "2020-10-18"})
|
||||
|
|
Loading…
Reference in New Issue