music-kraken-core/src/music_kraken/database/song.py

73 lines
2.1 KiB
Python
Raw Normal View History

2022-11-22 08:21:28 +00:00
from typing import List
from .artist import Artist
from .metadata import Metadata
from .source import Source
from .target import Target
2022-11-21 14:40:41 +00:00
class Song:
def __init__(self, json_response) -> None:
self.json_data = json_response
# initialize the data
2022-11-24 13:13:55 +00:00
self.id = self.json_data['id']
2022-11-21 14:54:13 +00:00
self.title = self.json_data['title']
2022-11-23 10:33:24 +00:00
self.artists = []
for a in self.json_data['artists']:
new_artist = Artist(a)
exists = False
for existing_artist in self.artists:
if new_artist == existing_artist:
exists = True
break
if not exists:
self.artists.append(new_artist)
self.isrc = self.json_data['isrc']
2022-11-21 14:54:13 +00:00
# initialize the sources
2022-11-22 08:21:28 +00:00
self.sources: List[Source] = []
2022-11-21 14:44:59 +00:00
for src in self.json_data['source']:
if src['src'] is None:
continue
self.sources.append(Source(src))
2022-11-22 17:25:35 +00:00
# initialize the target
self.target = Target()
self.target.file = self.json_data['file']
self.target.path = self.json_data['path']
# initialize id3 metadata
self.metadata = Metadata()
2022-11-22 17:25:35 +00:00
for key, value in self.json_data.items():
self.metadata[key] = value
self.metadata['artist'] = self.get_artist_names()
# EasyID3.valid_keys.keys()
def __str__(self) -> str:
return f"\"{self.title}\" by {', '.join([str(a) for a in self.artists])}"
2022-11-22 17:25:35 +00:00
def get_metadata(self):
return self.metadata.get_all_metadata()
def has_isrc(self) -> bool:
return self.isrc is not None
2022-11-21 14:40:41 +00:00
def get_artist_names(self) -> List[str]:
2022-11-22 13:25:01 +00:00
return [a.name for a in self.artists]
2022-11-21 14:40:41 +00:00
def __getitem__(self, item):
if item not in self.json_data:
return None
return self.json_data[item]
def __setitem__(self, item, value):
if item == "file":
self.target.file = value
return
if item == "path":
self.target.path = value
return
2022-11-21 14:40:41 +00:00
self.json_data[item] = value