# Copyright 2021 (c) Anna Schumaker. import datetime 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 if self.file else None def __exit__(self, exp_type, exp_value, traceback): self.file = None return (exp_type == None) or (exp_type == AttributeError) 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 release(self): date = self.file.get("date", [ "0" ]) date = self.file.get("originalyear", date)[0].split("-") year = int(date[0]) if len(date) > 0 else 1 month = int(date[1]) if len(date) > 1 else 1 day = int(date[2]) if len(date) > 2 else 1 return datetime.date(max(year, 1), month, day) 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))