refactored a bit

This commit is contained in:
Lars Noack 2022-11-24 14:13:55 +01:00
parent 42feb5397a
commit cd9d67102b
5 changed files with 88 additions and 68 deletions

14
src/goof.py Normal file
View File

@ -0,0 +1,14 @@
import music_kraken as mk
print(mk.__file__)
from music_kraken.audio_source import (
fetch_sources,
fetch_audios
)
print(fetch_sources)
cache = mk.database.temp_database.temp_database
print(cache, len(cache.get_tracks_without_src()))
fetch_sources(cache.get_tracks_without_src(), skip_existing_files=False)
fetch_audios(cache.get_tracks_to_download(), override_existing=True)

View File

@ -0,0 +1,14 @@
from typing import List
from ..database.song import Song as song_object
from . import (
fetch_source,
fetch_audio
)
def fetch_sources(songs: List[song_object], skip_existing_files: bool = False):
fetch_source.Download.fetch_sources(songs=songs, skip_existing_files=skip_existing_files)
def fetch_audios(songs: List[song_object], override_existing: bool = False):
fetch_audio.Download.fetch_audios(songs=songs, override_existing=override_existing)

View File

@ -1,3 +1,4 @@
from typing import List
import mutagen.id3
import requests
import os.path
@ -10,7 +11,11 @@ from .sources import (
musify,
local_files
)
from ..database import song as song_objects
from ..database.song import (
Song as song_object,
Target as target_object,
Source as source_object
)
from ..database.temp_database import temp_database
logger = DOWNLOAD_LOGGER
@ -34,41 +39,38 @@ print(EasyID3.valid_keys.keys())
class Download:
def __init__(self):
for song in temp_database.get_tracks_to_download():
Download.fetch_audios(temp_database.get_tracks_to_download())
if self.path_stuff(song.target):
self.write_metadata(song)
@classmethod
def fetch_audios(cls, songs: List[song_object], override_existing: bool = False):
for song in songs:
if not cls.path_stuff(song.target) and not override_existing:
cls.write_metadata(song)
continue
# download_success = Download.download_from_src(song['src'], song)
is_downloaded = False
for source in song.sources:
download_success = Download.download_from_src(song, source)
if download_success != -1:
break
else:
if download_success == -1:
logger.warning(f"couldn't download {song['url']} from {song['src']}")
else:
is_downloaded = True
break
"""
download_success = None
src = song['src']
if src == 'musify':
download_success = musify.download(song)
elif src == 'youtube':
download_success = youtube.download(song)
"""
if is_downloaded:
cls.write_metadata(song)
self.write_metadata(song)
@classmethod
def download_from_src(cls, song: song_object, source: source_object):
if source.src not in sources:
raise ValueError(f"source {source.src} seems to not exist")
source_subclass = sources[source.src]
@staticmethod
def download_from_src(song, src):
if src.src not in sources:
raise ValueError(f"source {src.src} seems to not exist")
source_subclass = sources[src.src]
return source_subclass.fetch_audio(song, source)
return source_subclass.fetch_audio(song, src)
@staticmethod
def write_metadata(song: song_objects.Song):
@classmethod
def write_metadata(cls, song: song_object):
if not os.path.exists(song.target.file):
logger.warning(f"file {song.target.file} doesn't exist")
return False
@ -88,14 +90,14 @@ class Download:
logger.info("saving")
audiofile.save(song.target.file, v1=2)
@staticmethod
def path_stuff(target: song_objects.Target) -> bool:
# returns true if it shouldn't be downloaded
@classmethod
def path_stuff(cls, target: target_object) -> bool:
# returns true if it should be downloaded
if os.path.exists(target.file):
logger.info(f"'{target.file}' does already exist, thus not downloading.")
return True
return False
os.makedirs(target.path, exist_ok=True)
return False
return True
if __name__ == "__main__":

View File

@ -1,11 +1,12 @@
from ..utils.shared import *
from typing import List
from ..utils.shared import *
from .sources import (
youtube,
musify,
local_files
)
from ..database.song import Song as song_object
from ..database.temp_database import temp_database
logger = URL_DOWNLOAD_LOGGER
@ -19,42 +20,12 @@ sources = {
class Download:
def __init__(self) -> None:
self.urls = []
for song in temp_database.get_tracks_without_src():
id_ = song['id']
if os.path.exists(song.target.file):
logger.info(f"skipping the fetching of the download links, cuz {song['file']} already exists.")
logger.info(f"skipping the fetching of the download links, cuz {song.target.file} already exists.")
continue
"""
not implemented yet, will in one point crashe everything
# check File System
file_path = file_system.get_path(song)
if file_path is not None:
self.add_url(file_path, 'file', id_)
continue
"""
"""
# check YouTube
youtube_url = youtube.Youtube.fetch_source(song)
if youtube_url is not None:
self.add_url(youtube_url, 'youtube', id_)
continue
# check musify
musify_url = musify.Musify.fetch_source(song)
if musify_url is not None:
self.add_url(musify_url, 'musify', id_)
continue
# check musify again, but with a different methode that takes longer
musify_url = musify.get_musify_url_slow(song)
if musify_url is not None:
self.add_url(musify_url, 'musify', id_)
continue
"""
sucess = False
for src in AUDIO_SOURCES:
res = Download.fetch_from_src(song, src)
@ -65,16 +36,34 @@ class Download:
if not sucess:
logger.warning(f"Didn't find any sources for {song}")
@staticmethod
def fetch_from_src(song, src):
@classmethod
def fetch_sources(cls, songs: List[song_object], skip_existing_files: bool = False):
for song in songs:
if os.path.exists(song.target.file) and skip_existing_files:
logger.info(f"skipping the fetching of the download links, cuz {song.target.file} already exists.")
continue
sucess = False
for src in AUDIO_SOURCES:
res = cls.fetch_from_src(song, src)
if res is not None:
sucess = True
cls.add_url(res, src, song.id)
if not sucess:
logger.warning(f"Didn't find any sources for {song}")
@classmethod
def fetch_from_src(cls, song, src):
if src not in sources:
raise ValueError(f"source {src} seems to not exist")
source_subclass = sources[src]
return source_subclass.fetch_source(song)
@staticmethod
def add_url(url: str, src: str, id_: str):
@classmethod
def add_url(cls, url: str, src: str, id_: str):
temp_database.set_download_data(id_, url, src)

View File

@ -78,6 +78,7 @@ class Song:
self.json_data = json_response
# initialize the data
self.id = self.json_data['id']
self.title = self.json_data['title']
self.artists = []
for a in self.json_data['artists']: