added artist notes
This commit is contained in:
parent
7d570038b3
commit
bbf7181b13
@ -58,10 +58,10 @@ print_song(song)
|
|||||||
|
|
||||||
artist = song.main_artist_list[0]
|
artist = song.main_artist_list[0]
|
||||||
|
|
||||||
print_artist(artist)
|
# print_artist(artist)
|
||||||
|
|
||||||
artist = EncyclopaediaMetallum.fetch_artist_details(artist)
|
artist = EncyclopaediaMetallum.fetch_artist_details(artist)
|
||||||
|
|
||||||
# print_artist(artist)
|
print_artist(artist)
|
||||||
|
|
||||||
# print(only_smile)
|
# print(only_smile)
|
||||||
|
@ -10,7 +10,7 @@ from . import (
|
|||||||
not_used_anymore,
|
not_used_anymore,
|
||||||
target
|
target
|
||||||
)
|
)
|
||||||
from .not_used_anymore import metadata
|
|
||||||
|
|
||||||
from .utils.shared import (
|
from .utils.shared import (
|
||||||
MUSIC_DIR,
|
MUSIC_DIR,
|
||||||
@ -49,20 +49,9 @@ Album = database.Album
|
|||||||
|
|
||||||
ID3Timestamp = database.ID3Timestamp
|
ID3Timestamp = database.ID3Timestamp
|
||||||
|
|
||||||
MetadataSearch = metadata.MetadataSearch
|
|
||||||
MetadataDownload = metadata.MetadataDownload
|
|
||||||
|
|
||||||
cache = database.cache
|
cache = database.cache
|
||||||
Database = database.Database
|
Database = database.Database
|
||||||
|
|
||||||
def fetch_metadata(type_: str, id_: str):
|
|
||||||
metadata_downloader = MetadataDownload()
|
|
||||||
metadata_downloader.download({'type': type_, 'id': id_})
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_metadata_from_search(search_instance: MetadataSearch):
|
|
||||||
current_option = search_instance.current_option
|
|
||||||
fetch_metadata(type_=current_option.type, id_=current_option.id)
|
|
||||||
|
|
||||||
|
|
||||||
def set_targets(genre: str):
|
def set_targets(genre: str):
|
||||||
@ -112,42 +101,6 @@ searches for the track <any track> from the release <any relaese>
|
|||||||
print(msg)
|
print(msg)
|
||||||
|
|
||||||
|
|
||||||
def execute_input(_input: str, search: MetadataSearch) -> bool:
|
|
||||||
"""
|
|
||||||
:returns: True if it should break out of the loop else False
|
|
||||||
"""
|
|
||||||
query_input = _input.strip()
|
|
||||||
_input = _input.strip().lower()
|
|
||||||
if _input in ("d", "ok", "dl", "download"):
|
|
||||||
return True
|
|
||||||
if _input in ("q", "quit", "exit"):
|
|
||||||
exit()
|
|
||||||
if _input in ("h", "help"):
|
|
||||||
help_search_metadata()
|
|
||||||
return False
|
|
||||||
if _input.isdigit():
|
|
||||||
print()
|
|
||||||
print(search.choose(int(_input)))
|
|
||||||
return False
|
|
||||||
if _input == "..":
|
|
||||||
print()
|
|
||||||
print(search.get_previous_options())
|
|
||||||
return False
|
|
||||||
|
|
||||||
print()
|
|
||||||
print(search.search_from_query(query_input))
|
|
||||||
|
|
||||||
|
|
||||||
def search_for_metadata():
|
|
||||||
search = MetadataSearch()
|
|
||||||
|
|
||||||
while True:
|
|
||||||
_input = input("\"help\" for an overview of commands: ")
|
|
||||||
if execute_input(_input=_input, search=search):
|
|
||||||
break
|
|
||||||
|
|
||||||
print(f"downloading: {search.current_option}")
|
|
||||||
return search
|
|
||||||
|
|
||||||
|
|
||||||
def get_genre():
|
def get_genre():
|
||||||
@ -166,36 +119,3 @@ def get_genre():
|
|||||||
return existing_genres[genre_id]
|
return existing_genres[genre_id]
|
||||||
|
|
||||||
return genre
|
return genre
|
||||||
|
|
||||||
|
|
||||||
def cli(start_at: int = 0, only_lyrics: bool = False):
|
|
||||||
if start_at <= 2 and not only_lyrics:
|
|
||||||
genre = get_genre()
|
|
||||||
logging.info(f"{genre} has been set as genre.")
|
|
||||||
|
|
||||||
if start_at <= 0:
|
|
||||||
search = search_for_metadata()
|
|
||||||
logging.info("Starting Downloading of metadata")
|
|
||||||
fetch_metadata_from_search(search)
|
|
||||||
|
|
||||||
if start_at <= 1 and not only_lyrics:
|
|
||||||
logging.info("creating Paths")
|
|
||||||
set_targets(genre=genre)
|
|
||||||
|
|
||||||
if start_at <= 2 and not only_lyrics:
|
|
||||||
logging.info("Fetching Download Links")
|
|
||||||
fetch_sources(cache.get_tracks_without_src())
|
|
||||||
|
|
||||||
if start_at <= 3 and not only_lyrics:
|
|
||||||
logging.info("starting to download the mp3's")
|
|
||||||
fetch_audios(cache.get_tracks_to_download())
|
|
||||||
|
|
||||||
if start_at <= 4:
|
|
||||||
logging.info("starting to fetch the lyrics")
|
|
||||||
lyrics.fetch_lyrics(cache.get_tracks_for_lyrics())
|
|
||||||
|
|
||||||
|
|
||||||
def gtk_gui():
|
|
||||||
# please maximaly a minimal gui, the fully fleshed out gui should be made externally
|
|
||||||
# to avoid ending up with a huge monolyth
|
|
||||||
pass
|
|
||||||
|
@ -16,5 +16,7 @@ Lyrics = objects.Lyrics
|
|||||||
Album = objects.Album
|
Album = objects.Album
|
||||||
Artist = objects.Artist
|
Artist = objects.Artist
|
||||||
|
|
||||||
|
FormattedText = objects.FormattedText
|
||||||
|
|
||||||
Database = database.Database
|
Database = database.Database
|
||||||
cache = temp_database.TempDatabase()
|
cache = temp_database.TempDatabase()
|
||||||
|
@ -2,7 +2,8 @@ from . import (
|
|||||||
song,
|
song,
|
||||||
metadata,
|
metadata,
|
||||||
source,
|
source,
|
||||||
parents
|
parents,
|
||||||
|
formatted_text
|
||||||
)
|
)
|
||||||
|
|
||||||
MusicObject = parents.DatabaseObject
|
MusicObject = parents.DatabaseObject
|
||||||
@ -21,3 +22,5 @@ Target = song.Target
|
|||||||
Lyrics = song.Lyrics
|
Lyrics = song.Lyrics
|
||||||
|
|
||||||
Album = song.Album
|
Album = song.Album
|
||||||
|
|
||||||
|
FormattedText = formatted_text.FormattedText
|
||||||
|
@ -51,6 +51,10 @@ class FormattedText:
|
|||||||
return None
|
return None
|
||||||
return pandoc.write(self.doc, format="plain").strip()
|
return pandoc.write(self.doc, format="plain").strip()
|
||||||
|
|
||||||
|
plaintext = property(fget=get_plaintext, fset=set_plaintext)
|
||||||
|
markdown = property(fget=get_markdown, fset=set_markdown)
|
||||||
|
html = property(fget=get_html, fset=set_html)
|
||||||
|
|
||||||
|
|
||||||
class NotesAttributes:
|
class NotesAttributes:
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
@ -23,6 +23,7 @@ from .source import (
|
|||||||
SourcePages,
|
SourcePages,
|
||||||
SourceAttribute
|
SourceAttribute
|
||||||
)
|
)
|
||||||
|
from .formatted_text import FormattedText
|
||||||
|
|
||||||
"""
|
"""
|
||||||
All Objects dependent
|
All Objects dependent
|
||||||
@ -363,7 +364,7 @@ class Artist(DatabaseObject, SourceAttribute, MetadataAttribute):
|
|||||||
feature_songs: List[Song] = None,
|
feature_songs: List[Song] = None,
|
||||||
main_albums: List[Album] = None,
|
main_albums: List[Album] = None,
|
||||||
album_type: str = None,
|
album_type: str = None,
|
||||||
notes: str = None,
|
notes: FormattedText = None,
|
||||||
lyrical_themes: List[str] = None,
|
lyrical_themes: List[str] = None,
|
||||||
general_genre: str = "",
|
general_genre: str = "",
|
||||||
country=None,
|
country=None,
|
||||||
@ -382,7 +383,9 @@ class Artist(DatabaseObject, SourceAttribute, MetadataAttribute):
|
|||||||
which are meant to only use in outputs to describe the object
|
which are meant to only use in outputs to describe the object
|
||||||
i mean do as you want but there aint no strict rule about em so good luck
|
i mean do as you want but there aint no strict rule about em so good luck
|
||||||
"""
|
"""
|
||||||
self.notes = notes
|
self.notes: FormattedText = notes
|
||||||
|
if self.notes is None:
|
||||||
|
self.notes = FormattedText()
|
||||||
self.lyrical_themes: List[str] = lyrical_themes
|
self.lyrical_themes: List[str] = lyrical_themes
|
||||||
if self.lyrical_themes is None:
|
if self.lyrical_themes is None:
|
||||||
self.lyrical_themes = []
|
self.lyrical_themes = []
|
||||||
@ -406,7 +409,11 @@ class Artist(DatabaseObject, SourceAttribute, MetadataAttribute):
|
|||||||
self.source_list = source_list
|
self.source_list = source_list
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name or ""
|
string = self.name or ""
|
||||||
|
plaintext_notes = self.notes.get_plaintext()
|
||||||
|
if plaintext_notes is not None:
|
||||||
|
string += "\n" + plaintext_notes
|
||||||
|
return string
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return self.__str__()
|
return self.__str__()
|
||||||
|
@ -15,7 +15,8 @@ from ..database import (
|
|||||||
SourcePages,
|
SourcePages,
|
||||||
Song,
|
Song,
|
||||||
Album,
|
Album,
|
||||||
ID3Timestamp
|
ID3Timestamp,
|
||||||
|
FormattedText
|
||||||
)
|
)
|
||||||
from ..utils import (
|
from ..utils import (
|
||||||
string_processing
|
string_processing
|
||||||
@ -383,6 +384,19 @@ class EncyclopaediaMetallum(Page):
|
|||||||
|
|
||||||
return artist
|
return artist
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def fetch_band_notes(cls, artist: Artist, ma_artist_id: str) -> Artist:
|
||||||
|
endpoint = "https://www.metal-archives.com/band/read-more/id/{}"
|
||||||
|
|
||||||
|
# make the request
|
||||||
|
r = cls.API_SESSION.get(endpoint.format(ma_artist_id))
|
||||||
|
if r.status_code != 200:
|
||||||
|
LOGGER.warning(f"code {r.status_code} at {endpoint.format(ma_artist_id)}")
|
||||||
|
return artist
|
||||||
|
|
||||||
|
artist.notes.html = r.text
|
||||||
|
return artist
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def fetch_artist_details(cls, artist: Artist) -> Artist:
|
def fetch_artist_details(cls, artist: Artist) -> Artist:
|
||||||
source_list = artist.get_sources_from_page(cls.SOURCE_TYPE)
|
source_list = artist.get_sources_from_page(cls.SOURCE_TYPE)
|
||||||
@ -397,12 +411,12 @@ class EncyclopaediaMetallum(Page):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
TODO
|
TODO
|
||||||
[] https://www.metal-archives.com/bands/Ghost_Bath/3540372489
|
[x] https://www.metal-archives.com/bands/Ghost_Bath/3540372489
|
||||||
[x] https://www.metal-archives.com/band/discography/id/3540372489/tab/all
|
[x] https://www.metal-archives.com/band/discography/id/3540372489/tab/all
|
||||||
[] reviews: https://www.metal-archives.com/review/ajax-list-band/id/3540372489/json/1?sEcho=1&iColumns=4&sColumns=&iDisplayStart=0&iDisplayLength=200&mDataProp_0=0&mDataProp_1=1&mDataProp_2=2&mDataProp_3=3&iSortCol_0=3&sSortDir_0=desc&iSortingCols=1&bSortable_0=true&bSortable_1=true&bSortable_2=true&bSortable_3=true&_=1675155257133
|
[] reviews: https://www.metal-archives.com/review/ajax-list-band/id/3540372489/json/1?sEcho=1&iColumns=4&sColumns=&iDisplayStart=0&iDisplayLength=200&mDataProp_0=0&mDataProp_1=1&mDataProp_2=2&mDataProp_3=3&iSortCol_0=3&sSortDir_0=desc&iSortingCols=1&bSortable_0=true&bSortable_1=true&bSortable_2=true&bSortable_3=true&_=1675155257133
|
||||||
[] simmilar: https://www.metal-archives.com/band/ajax-recommendations/id/3540372489
|
[] simmilar: https://www.metal-archives.com/band/ajax-recommendations/id/3540372489
|
||||||
[x] sources: https://www.metal-archives.com/link/ajax-list/type/band/id/3540372489
|
[x] sources: https://www.metal-archives.com/link/ajax-list/type/band/id/3540372489
|
||||||
[] band notes: https://www.metal-archives.com/band/read-more/id/3540372489
|
[x] band notes: https://www.metal-archives.com/band/read-more/id/3540372489
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# SIMPLE METADATA
|
# SIMPLE METADATA
|
||||||
@ -414,4 +428,7 @@ class EncyclopaediaMetallum(Page):
|
|||||||
# EXTERNAL SOURCES
|
# EXTERNAL SOURCES
|
||||||
artist = cls.fetch_artist_sources(artist, artist_id)
|
artist = cls.fetch_artist_sources(artist, artist_id)
|
||||||
|
|
||||||
|
# ARTIST NOTES
|
||||||
|
artist = cls.fetch_band_notes(artist, artist_id)
|
||||||
|
|
||||||
return artist
|
return artist
|
||||||
|
Loading…
Reference in New Issue
Block a user