dasfh
This commit is contained in:
parent
b6a8966503
commit
133e360562
@ -51,7 +51,7 @@ song_input = Song(
|
|||||||
length=666,
|
length=666,
|
||||||
isrc="US-S1Z-99-00001",
|
isrc="US-S1Z-99-00001",
|
||||||
tracksort=2,
|
tracksort=2,
|
||||||
target=Target(file="~/Music/test/Linkin Park/Hybrid Theory/Cure for the Itch.mp3", path="~/Music/test/Linkin Park/Hybrid Theory/"),
|
target=Target(file="test/Linkin Park/Hybrid Theory/out.mp3", path="~/Music/test/Linkin Park/Hybrid Theory/"),
|
||||||
lyrics=[
|
lyrics=[
|
||||||
Lyrics(text="these are some depressive lyrics", language="en"),
|
Lyrics(text="these are some depressive lyrics", language="en"),
|
||||||
Lyrics(text="test", language="en")
|
Lyrics(text="test", language="en")
|
||||||
@ -100,6 +100,7 @@ for source in song.sources:
|
|||||||
# try writing metadata
|
# try writing metadata
|
||||||
write_metadata(song)
|
write_metadata(song)
|
||||||
|
|
||||||
|
exit()
|
||||||
# getting song by album ref
|
# getting song by album ref
|
||||||
div()
|
div()
|
||||||
song_output_list = cache.pull_songs(album_ref=album_input.reference)
|
song_output_list = cache.pull_songs(album_ref=album_input.reference)
|
||||||
|
@ -4,17 +4,18 @@ import logging
|
|||||||
from typing import List, Tuple
|
from typing import List, Tuple
|
||||||
from pkg_resources import resource_string
|
from pkg_resources import resource_string
|
||||||
|
|
||||||
from .objects.database_object import Reference
|
from .objects.parents import Reference
|
||||||
|
from .objects.source import Source
|
||||||
from .objects import (
|
from .objects import (
|
||||||
Song,
|
Song,
|
||||||
Lyrics,
|
Lyrics,
|
||||||
Metadata,
|
Metadata,
|
||||||
Target,
|
Target,
|
||||||
Artist,
|
Artist,
|
||||||
Source,
|
|
||||||
Album
|
Album
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger("database")
|
logger = logging.getLogger("database")
|
||||||
|
|
||||||
# Due to this not being deployed on a Server **HOPEFULLY**
|
# Due to this not being deployed on a Server **HOPEFULLY**
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
from . import (
|
from . import (
|
||||||
song,
|
song,
|
||||||
id3_mapping
|
id3_mapping,
|
||||||
|
source
|
||||||
)
|
)
|
||||||
|
|
||||||
ID3_MAPPING = id3_mapping.Mapping
|
ID3_MAPPING = id3_mapping.Mapping
|
||||||
|
|
||||||
Song = song.Song
|
Song = song.Song
|
||||||
Artist = song.Artist
|
Artist = song.Artist
|
||||||
Source = song.Source
|
Source = source.Source
|
||||||
Target = song.Target
|
Target = song.Target
|
||||||
Metadata = song.Metadata
|
Metadata = song.Metadata
|
||||||
Lyrics = song.Lyrics
|
Lyrics = song.Lyrics
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
from ...utils.shared import (
|
from ...utils.shared import (
|
||||||
DATABASE_LOGGER as logger
|
DATABASE_LOGGER as logger
|
||||||
)
|
)
|
||||||
from .database_object import (
|
from .parents import (
|
||||||
DatabaseObject,
|
DatabaseObject,
|
||||||
Reference
|
Reference
|
||||||
)
|
)
|
||||||
|
@ -45,3 +45,22 @@ class DatabaseObject:
|
|||||||
|
|
||||||
id = property(fget=get_id)
|
id = property(fget=get_id)
|
||||||
reference = property(fget=get_reference)
|
reference = property(fget=get_reference)
|
||||||
|
|
||||||
|
|
||||||
|
class SongAttribute:
|
||||||
|
def __init__(self, song=None):
|
||||||
|
# the reference to the song the lyrics belong to
|
||||||
|
self.song = song
|
||||||
|
|
||||||
|
def add_song(self, song):
|
||||||
|
self.song = song
|
||||||
|
|
||||||
|
def get_ref_song_id(self):
|
||||||
|
if self.song is None:
|
||||||
|
return None
|
||||||
|
return self.song.reference.id
|
||||||
|
|
||||||
|
def set_ref_song_id(self, song_id):
|
||||||
|
self.song_ref = Reference(song_id)
|
||||||
|
|
||||||
|
song_ref_id = property(fget=get_ref_song_id, fset=set_ref_song_id)
|
@ -7,33 +7,19 @@ from ...utils.shared import (
|
|||||||
MUSIC_DIR,
|
MUSIC_DIR,
|
||||||
DATABASE_LOGGER as logger
|
DATABASE_LOGGER as logger
|
||||||
)
|
)
|
||||||
from .database_object import (
|
from .parents import (
|
||||||
DatabaseObject,
|
DatabaseObject,
|
||||||
Reference
|
Reference,
|
||||||
|
SongAttribute
|
||||||
)
|
)
|
||||||
|
from .source import Source
|
||||||
|
|
||||||
"""
|
"""
|
||||||
All Objects dependent
|
All Objects dependent
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
class SongAttribute:
|
|
||||||
def __init__(self, song=None):
|
|
||||||
# the reference to the song the lyrics belong to
|
|
||||||
self.song = song
|
|
||||||
|
|
||||||
def add_song(self, song):
|
|
||||||
self.song = song
|
|
||||||
|
|
||||||
def get_ref_song_id(self):
|
|
||||||
if self.song is None:
|
|
||||||
return None
|
|
||||||
return self.song.reference.id
|
|
||||||
|
|
||||||
def set_ref_song_id(self, song_id):
|
|
||||||
self.song_ref = Reference(song_id)
|
|
||||||
|
|
||||||
song_ref_id = property(fget=get_ref_song_id, fset=set_ref_song_id)
|
|
||||||
|
|
||||||
|
|
||||||
class Metadata:
|
class Metadata:
|
||||||
@ -58,7 +44,9 @@ class Metadata:
|
|||||||
return
|
return
|
||||||
if type(value) != list:
|
if type(value) != list:
|
||||||
raise ValueError(f"can only set attribute to list, not {type(value)}")
|
raise ValueError(f"can only set attribute to list, not {type(value)}")
|
||||||
self.id3_attributes[key] = value
|
|
||||||
|
# self.id3_attributes[key] = [value[0], "HHHHSSSS"]
|
||||||
|
self.id3_attributes[key] = value[0]
|
||||||
|
|
||||||
def __getitem__(self, key):
|
def __getitem__(self, key):
|
||||||
if key not in self.id3_attributes:
|
if key not in self.id3_attributes:
|
||||||
@ -96,24 +84,7 @@ class Metadata:
|
|||||||
return "\n".join(rows)
|
return "\n".join(rows)
|
||||||
|
|
||||||
|
|
||||||
class Source(DatabaseObject, SongAttribute):
|
|
||||||
"""
|
|
||||||
create somehow like that
|
|
||||||
```python
|
|
||||||
# url won't be a valid one due to it being just an example
|
|
||||||
Source(src="youtube", url="https://youtu.be/dfnsdajlhkjhsd")
|
|
||||||
```
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self, id_: str = None, src: str = None, url: str = None) -> None:
|
|
||||||
DatabaseObject.__init__(self, id_=id_)
|
|
||||||
SongAttribute.__init__(self)
|
|
||||||
|
|
||||||
self.src = src
|
|
||||||
self.url = url
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return f"{self.src}: {self.url}"
|
|
||||||
|
|
||||||
|
|
||||||
class Target(DatabaseObject, SongAttribute):
|
class Target(DatabaseObject, SongAttribute):
|
||||||
|
41
src/music_kraken/database/objects/source.py
Normal file
41
src/music_kraken/database/objects/source.py
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
from enum import Enum
|
||||||
|
|
||||||
|
from .parents import (
|
||||||
|
DatabaseObject,
|
||||||
|
SongAttribute
|
||||||
|
)
|
||||||
|
|
||||||
|
class sources(Enum):
|
||||||
|
YOUTUBE = "youtube"
|
||||||
|
MUSIFY = "musify"
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_homepage(cls, attribute) -> str:
|
||||||
|
homepage_map = {
|
||||||
|
cls.YOUTUBE: "https://www.youtube.com/",
|
||||||
|
cls.MUSIFY: "https://musify.club/"
|
||||||
|
}
|
||||||
|
return homepage_map[attribute]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class Source(DatabaseObject, SongAttribute):
|
||||||
|
"""
|
||||||
|
create somehow like that
|
||||||
|
```python
|
||||||
|
# url won't be a valid one due to it being just an example
|
||||||
|
Source(src="youtube", url="https://youtu.be/dfnsdajlhkjhsd")
|
||||||
|
```
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, id_: str = None, src: str = None, url: str = None) -> None:
|
||||||
|
DatabaseObject.__init__(self, id_=id_)
|
||||||
|
SongAttribute.__init__(self)
|
||||||
|
|
||||||
|
self.src = sources(src)
|
||||||
|
self.url = url
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"{self.src}: {self.url}"
|
||||||
|
|
||||||
|
homepage = property(fget=lambda self: sources.get_homepage(self.src))
|
@ -7,7 +7,7 @@ from ..utils.shared import (
|
|||||||
MUSIC_DIR,
|
MUSIC_DIR,
|
||||||
SONG_LOGGER as logger
|
SONG_LOGGER as logger
|
||||||
)
|
)
|
||||||
from .objects.database_object import DatabaseObject
|
from .objects.parents import DatabaseObject
|
||||||
|
|
||||||
class Metadata:
|
class Metadata:
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import mutagen
|
import mutagen
|
||||||
from mutagen.id3 import ID3, Frame
|
from mutagen.id3 import ID3, Frame
|
||||||
|
|
||||||
from typing import List
|
from typing import List
|
||||||
@ -18,7 +18,7 @@ class AudioMetadata:
|
|||||||
|
|
||||||
self.frames: ID3 = ID3()
|
self.frames: ID3 = ID3()
|
||||||
|
|
||||||
if self.file_location is not None:
|
if file_location is not None:
|
||||||
self.file_location = file_location
|
self.file_location = file_location
|
||||||
|
|
||||||
|
|
||||||
@ -26,10 +26,10 @@ class AudioMetadata:
|
|||||||
print("adding")
|
print("adding")
|
||||||
for key, value in song.metadata:
|
for key, value in song.metadata:
|
||||||
"""
|
"""
|
||||||
TODO:
|
https://www.programcreek.com/python/example/84797/mutagen.id3.ID3
|
||||||
Implement the adding to the frame thingie of the metadata
|
|
||||||
"""
|
"""
|
||||||
print(key, value)
|
print(key, value)
|
||||||
|
self.frames.add(mutagen.id3.Frames[key](encoding=3, text=value))
|
||||||
|
|
||||||
def save(self, file_location: str = None):
|
def save(self, file_location: str = None):
|
||||||
if file_location is not None:
|
if file_location is not None:
|
||||||
@ -37,12 +37,12 @@ class AudioMetadata:
|
|||||||
|
|
||||||
if self.file_location is None:
|
if self.file_location is None:
|
||||||
raise Exception("no file target provided to save the data to")
|
raise Exception("no file target provided to save the data to")
|
||||||
self.frames.save(filething=self.file_location)
|
self.frames.save(self.file_location, v2_version=4)
|
||||||
|
|
||||||
def set_file_location(self, file_location):
|
def set_file_location(self, file_location):
|
||||||
# try loading the data from the given file. if it doesn't succeed the frame remains empty
|
# try loading the data from the given file. if it doesn't succeed the frame remains empty
|
||||||
try:
|
try:
|
||||||
self.frames.load(file_location)
|
self.frames.load(file_location, v2_version=4)
|
||||||
self._file_location = file_location
|
self._file_location = file_location
|
||||||
except mutagen.MutagenError:
|
except mutagen.MutagenError:
|
||||||
logger.warning(f"couldn't find any metadata at: \"{self.file_location}\"")
|
logger.warning(f"couldn't find any metadata at: \"{self.file_location}\"")
|
||||||
@ -52,7 +52,7 @@ class AudioMetadata:
|
|||||||
|
|
||||||
def write_metadata(song: Song):
|
def write_metadata(song: Song):
|
||||||
if not song.target.exists_on_disc:
|
if not song.target.exists_on_disc:
|
||||||
print("afhhkj")
|
print(song.target.file)
|
||||||
return
|
return
|
||||||
|
|
||||||
id3_object = AudioMetadata(file_location=song.target.file)
|
id3_object = AudioMetadata(file_location=song.target.file)
|
||||||
|
Loading…
Reference in New Issue
Block a user