This commit is contained in:
Hellow 2023-01-24 00:16:10 +01:00
parent c28abdd999
commit b17d039fb6
6 changed files with 227 additions and 159 deletions

View File

@ -0,0 +1,161 @@
import music_kraken
from music_kraken import (
Song,
Lyrics,
Target,
Source,
Album,
Artist,
ID3Timestamp,
SourcePages,
SourceTypes
)
from music_kraken.tagging import (
AudioMetadata,
write_metadata,
write_many_metadata
)
import music_kraken.database.new_database as db
import pycountry
def div(msg: str = ""):
print("-" * 50 + msg + "-" * 50)
cache = music_kraken.database.new_database.Database("test.db")
cache.reset()
main_artist = Artist(
name="I'm in a coffin",
sources=[
Source(SourcePages.ENCYCLOPAEDIA_METALLUM, "https://www.metal-archives.com/bands/I%27m_in_a_Coffin/127727")
]
)
artist_ref = main_artist.reference
split_artist = Artist(
name="split"
)
feature_artist = Artist(
name="Ghost"
)
album_input = Album(
title="One Final Action",
date=ID3Timestamp(year=1986, month=3, day=1),
language=pycountry.languages.get(alpha_2="en"),
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 = [
main_artist,
split_artist
]
song_input = Song(
genre="HS Core",
title="Vein Deep in the Solution",
length=666,
isrc="US-S1Z-99-00001",
tracksort=2,
target=Target(file="song.mp3", path="~/Music"),
lyrics=[
Lyrics(text="these are some depressive lyrics", language="en"),
Lyrics(text="test", language="en")
],
sources=[
Source(SourcePages.YOUTUBE, "https://youtu.be/dfnsdajlhkjhsd"),
Source(SourcePages.MUSIFY, "https://ln.topdf.de/Music-Kraken/")
],
album=album_input,
main_artist_list=[main_artist],
feature_artist_list=[feature_artist],
)
other_song = Song(
title="this is just another song",
main_artist_list=[feature_artist],
feature_artist_list=[main_artist]
)
print(song_input)
additional_song = Song(
title="A fcking Song",
album=album_input
)
song_ref = song_input.reference
print(song_ref)
lyrics = Lyrics(text="these are some Lyrics that don't belong to any Song", language="en")
cache.push([album_input, song_input, lyrics, additional_song, other_song])
# getting song by song ref
div()
song_output_list = cache.pull_songs(song_ref=song_ref)
print(len(song_output_list), song_output_list, song_output_list[0].album, sep=" | ")
song = song_output_list[0]
print("tracksort", song_output_list[0].tracksort, sep=": ")
print("ID3", dict(song.metadata))
print(str(song_output_list[0].metadata))
print("--src--")
for source in song.sources:
print(source)
print("album", song.album.sources)
# try writing metadata
write_metadata(song)
exit()
# getting song by album ref
div()
song_output_list = cache.pull_songs(album_ref=album_input.reference)
print(len(song_output_list), song_output_list)
for song in song_output_list:
print(song, song.album)
# getting album
div("album")
album_output_list = cache.pull_albums(album_ref=album_input.reference)
album_output = album_output_list[0]
print(album_output)
print(f"--tracklist-{len(album_output)}--")
for track in album_output.tracklist:
print(track.tracksort, track)
print("--artist--")
for artist in album_output.artists:
print(artist)
# getting album by song
div()
album_output_list = cache.pull_albums(song_ref=song_ref)
print(album_output_list)
print("len of album ->", len(album_output_list[0]), album_output_list[0], sep=" | ")
# get artist
div("artist")
artist_output = cache.pull_artists(artist_ref=artist_ref)[0]
print(artist_output)
print("---static---")
print("albums", artist_output.main_albums)
print("main_s", artist_output.main_songs)
print("feat_s", artist_output.feature_songs)
print("---dynamic---")
print("discography", artist_output.discography)
print("songs", artist_output.songs, artist_output.songs.tracklist)
print("features", artist_output.features, artist_output.features.tracklist)

View File

@ -1,161 +1,5 @@
import music_kraken
from music_kraken import (
Song,
Lyrics,
Target,
Source,
Album,
Artist,
ID3Timestamp,
SourcePages,
SourceTypes
from music_kraken.pages import (
EncyclopaediaMetallum
)
from music_kraken.tagging import (
AudioMetadata,
write_metadata,
write_many_metadata
)
import music_kraken.database.new_database as db
import pycountry
def div(msg: str = ""):
print("-" * 50 + msg + "-" * 50)
cache = music_kraken.database.new_database.Database("test.db")
cache.reset()
main_artist = Artist(
name="I'm in a coffin",
sources=[
Source(SourcePages.ENCYCLOPAEDIA_METALLUM, "https://www.metal-archives.com/bands/I%27m_in_a_Coffin/127727")
]
)
artist_ref = main_artist.reference
split_artist = Artist(
name="split"
)
feature_artist = Artist(
name="Ghost"
)
album_input = Album(
title="One Final Action",
date=ID3Timestamp(year=1986, month=3, day=1),
language=pycountry.languages.get(alpha_2="en"),
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 = [
main_artist,
split_artist
]
song_input = Song(
genre="HS Core",
title="Vein Deep in the Solution",
length=666,
isrc="US-S1Z-99-00001",
tracksort=2,
target=Target(file="song.mp3", path="~/Music"),
lyrics=[
Lyrics(text="these are some depressive lyrics", language="en"),
Lyrics(text="test", language="en")
],
sources=[
Source(SourcePages.YOUTUBE, "https://youtu.be/dfnsdajlhkjhsd"),
Source(SourcePages.MUSIFY, "https://ln.topdf.de/Music-Kraken/")
],
album=album_input,
main_artist_list=[main_artist],
feature_artist_list=[feature_artist],
)
other_song = Song(
title="this is just another song",
main_artist_list=[feature_artist],
feature_artist_list=[main_artist]
)
print(song_input)
additional_song = Song(
title="A fcking Song",
album=album_input
)
song_ref = song_input.reference
print(song_ref)
lyrics = Lyrics(text="these are some Lyrics that don't belong to any Song", language="en")
cache.push([album_input, song_input, lyrics, additional_song, other_song])
# getting song by song ref
div()
song_output_list = cache.pull_songs(song_ref=song_ref)
print(len(song_output_list), song_output_list, song_output_list[0].album, sep=" | ")
song = song_output_list[0]
print("tracksort", song_output_list[0].tracksort, sep=": ")
print("ID3", dict(song.metadata))
print(str(song_output_list[0].metadata))
print("--src--")
for source in song.sources:
print(source)
print("album", song.album.sources)
# try writing metadata
write_metadata(song)
exit()
# getting song by album ref
div()
song_output_list = cache.pull_songs(album_ref=album_input.reference)
print(len(song_output_list), song_output_list)
for song in song_output_list:
print(song, song.album)
# getting album
div("album")
album_output_list = cache.pull_albums(album_ref=album_input.reference)
album_output = album_output_list[0]
print(album_output)
print(f"--tracklist-{len(album_output)}--")
for track in album_output.tracklist:
print(track.tracksort, track)
print("--artist--")
for artist in album_output.artists:
print(artist)
# getting album by song
div()
album_output_list = cache.pull_albums(song_ref=song_ref)
print(album_output_list)
print("len of album ->", len(album_output_list[0]), album_output_list[0], sep=" | ")
# get artist
div("artist")
artist_output = cache.pull_artists(artist_ref=artist_ref)[0]
print(artist_output)
print("---static---")
print("albums", artist_output.main_albums)
print("main_s", artist_output.main_songs)
print("feat_s", artist_output.feature_songs)
print("---dynamic---")
print("discography", artist_output.discography)
print("songs", artist_output.songs, artist_output.songs.tracklist)
print("features", artist_output.features, artist_output.features.tracklist)
EncyclopaediaMetallum.search_by_query("Ghost Bath")

View File

@ -3,6 +3,8 @@ from . import (
objects
)
MusicObject = objects.MusicObject
ID3Timestamp = objects.ID3Timestamp
SourceTypes = objects.SourceTypes
SourcePages = objects.SourcePages

View File

@ -0,0 +1,3 @@
from .encyclopaedia_metallum import EncyclopaediaMetallum
EncyclopaediaMetallum = EncyclopaediaMetallum

View File

@ -20,6 +20,46 @@ class Page:
functionality for every other class fetching something
"""
class Query:
def __init__(self, query: str):
self.query = query
self.is_raw = False
self.artist = None
self.album = None
self.song = None
self.parse_query(query=query)
def __str__(self):
if self.is_raw:
return self.query
return f"{self.artist}; {self.album}; {self.song}"
def parse_query(self, query: str):
if not '#' in query:
self.is_raw = True
return
query = query.strip()
parameters = query.split('#')
parameters.remove('')
for parameter in parameters:
splitted = parameter.split(" ")
type_ = splitted[0]
input_ = " ".join(splitted[1:]).strip()
if type_ == "a":
self.artist = input_
continue
if type_ == "r":
self.album = input_
continue
if type_ == "t":
self.song = type_
continue
@classmethod
def search_by_query(cls, query: str) -> List[MusicObject]:
"""

View File

@ -0,0 +1,18 @@
from typing import List
from .abstract import Page
from ..database import MusicObject
class EncyclopaediaMetallum(Page):
@classmethod
def search_by_query(cls, query: str) -> List[MusicObject]:
query_obj = cls.Query(query)
if query_obj.is_raw:
return cls.simple_search(query_obj)
print(query_obj)
@classmethod
def simple_search(cls, query: Page.Query):
pass