added Source objects to album

This commit is contained in:
Lars Noack 2023-01-23 13:49:07 +01:00
parent cb5b1b1fcc
commit e51d4ca467
4 changed files with 31 additions and 6 deletions

View File

@ -51,7 +51,10 @@ album_input = Album(
title="One Final Action", title="One Final Action",
date=ID3Timestamp(year=1986, month=3, day=1), date=ID3Timestamp(year=1986, month=3, day=1),
language=pycountry.languages.get(alpha_2="en"), language=pycountry.languages.get(alpha_2="en"),
label="cum productions" label="cum productions",
sources=[
Source(SourcePages.ENCYCLOPAEDIA_METALLUM, "https://www.metal-archives.com/albums/I%27m_in_a_Coffin/One_Final_Action/207614")
]
) )
album_input.artists = [ album_input.artists = [
main_artist, main_artist,
@ -110,6 +113,8 @@ print("--src--")
for source in song.sources: for source in song.sources:
print(source) print(source)
print("album", song.album.sources)
# try writing metadata # try writing metadata
write_metadata(song) write_metadata(song)

View File

@ -159,6 +159,9 @@ class Database:
self.push_artist_album(artist_ref=artist.reference, album_ref=album.reference) self.push_artist_album(artist_ref=artist.reference, album_ref=album.reference)
self.push_artist(artist) self.push_artist(artist)
for source in album.sources:
self.push_source(source=source)
def push_song(self, song: Song): def push_song(self, song: Song):
# ADDING THE DATA FOR THE SONG OBJECT # ADDING THE DATA FOR THE SONG OBJECT
""" """
@ -224,7 +227,7 @@ class Database:
def push_source(self, source: Source): def push_source(self, source: Source):
if source.song_ref_id is None: if source.song_ref_id is None:
logger.warning("the Source don't refer to a song") logger.warning(f"the Source {source} don't refer to a song")
table = "Source" table = "Source"
query = f"INSERT OR REPLACE INTO {table} (id, type, song_id, src, url) VALUES (?, ?, ?, ?, ?);" query = f"INSERT OR REPLACE INTO {table} (id, type, song_id, src, url) VALUES (?, ?, ?, ?, ?);"
@ -315,7 +318,6 @@ class Database:
self.push_artist_album(artist_ref=artist.reference, album_ref=album.reference) self.push_artist_album(artist_ref=artist.reference, album_ref=album.reference)
for source in artist.sources: for source in artist.sources:
source.add_song(artist)
self.push_source(source) self.push_source(source)
def pull_lyrics(self, song_ref: Reference = None, lyrics_ref: Reference = None) -> List[Lyrics]: def pull_lyrics(self, song_ref: Reference = None, lyrics_ref: Reference = None) -> List[Lyrics]:
@ -344,7 +346,7 @@ class Database:
language=lyrics_row['language'] language=lyrics_row['language']
) for lyrics_row in lyrics_rows] ) for lyrics_row in lyrics_rows]
def pull_sources(self, artist_ref: Reference = None, song_ref: Reference = None, source_ref: Reference = None) -> List[Source]: def pull_sources(self, artist_ref: Reference = None, song_ref: Reference = None, source_ref: Reference = None, album_ref: Reference = None) -> List[Source]:
""" """
Gets a list of sources. if source_ref is passed in the List will most likely only Gets a list of sources. if source_ref is passed in the List will most likely only
contain one Element if everything goes accordingly. contain one Element if everything goes accordingly.
@ -362,6 +364,8 @@ class Database:
where = f"id=\"{source_ref.id}\" AND type=\"{SourceTypes.SONG.value}\"" where = f"id=\"{source_ref.id}\" AND type=\"{SourceTypes.SONG.value}\""
elif artist_ref is not None: elif artist_ref is not None:
where = f"song_id=\"{artist_ref.id}\" AND type=\"{SourceTypes.ARTIST.value}\"" where = f"song_id=\"{artist_ref.id}\" AND type=\"{SourceTypes.ARTIST.value}\""
elif album_ref is not None:
where = f"song_id=\"{album_ref.id}\" AND type=\"{SourceTypes.ALBUM.value}\""
query = SOURCE_QUERY.format(where=where) query = SOURCE_QUERY.format(where=where)
self.cursor.execute(query) self.cursor.execute(query)
@ -571,7 +575,8 @@ class Database:
country=album_result['country'], country=album_result['country'],
barcode=album_result['barcode'], barcode=album_result['barcode'],
is_split=album_result['is_split'], is_split=album_result['is_split'],
albumsort=album_result['albumsort'] albumsort=album_result['albumsort'],
sources=self.pull_sources(album_ref=Reference(id_=album_id))
) )
if Song not in exclude_relations: if Song not in exclude_relations:

View File

@ -239,7 +239,8 @@ class Album(DatabaseObject, ID3Metadata):
barcode: str = None, barcode: str = None,
is_split: bool = False, is_split: bool = False,
albumsort: int = None, albumsort: int = None,
dynamic: bool = False dynamic: bool = False,
sources: List[Source] = None
) -> None: ) -> None:
DatabaseObject.__init__(self, id_=id_, dynamic=dynamic) DatabaseObject.__init__(self, id_=id_, dynamic=dynamic)
self.title: str = title self.title: str = title
@ -260,6 +261,9 @@ class Album(DatabaseObject, ID3Metadata):
self.tracklist: List[Song] = [] self.tracklist: List[Song] = []
self.artists: List[Artist] = [] self.artists: List[Artist] = []
self._sources = []
self.sources = sources
def __str__(self) -> str: def __str__(self) -> str:
return f"Album: \"{self.title}\"" return f"Album: \"{self.title}\""
@ -304,6 +308,16 @@ class Album(DatabaseObject, ID3Metadata):
return self.language.alpha_3 return self.language.alpha_3
def set_sources(self, source_list: List[Source]):
if source_list is None:
return
self._sources = source_list
for source in self._sources:
source.add_song(self)
source.type_enum = SourceTypes.ALBUM
sources: List[Source] = property(fget=lambda self: self._sources, fset=set_sources)
copyright = property(fget=get_copyright) copyright = property(fget=get_copyright)
iso_639_2_language = property(fget=get_iso_639_2_lang) iso_639_2_language = property(fget=get_iso_639_2_lang)
@ -412,6 +426,7 @@ class Artist(DatabaseObject, ID3Metadata):
self._sources = source_list self._sources = source_list
for source in self._sources: for source in self._sources:
source.add_song(self)
source.type_enum = SourceTypes.ARTIST source.type_enum = SourceTypes.ARTIST
sources: List[Source] = property(fget=lambda self: self._sources, fset=set_sources) sources: List[Source] = property(fget=lambda self: self._sources, fset=set_sources)

BIN
test.db

Binary file not shown.