diff --git a/deezspot/__init__.py b/deezspot/__init__.py index bb518da..b99f282 100644 --- a/deezspot/__init__.py +++ b/deezspot/__init__.py @@ -9,7 +9,7 @@ from deezspot.libutils.logging_utils import configure_logger, logger # Export key functionality from deezspot.deezloader import DeeLogin -from deezspot.models import Track, Album, Playlist, Smart, Episode +from deezspot.models.download import Track, Album, Playlist, Smart, Episode __version__ = "1.2.0" diff --git a/deezspot/__taggers__.py b/deezspot/__taggers__.py index 297d154..5395910 100644 --- a/deezspot/__taggers__.py +++ b/deezspot/__taggers__.py @@ -11,7 +11,7 @@ from mutagen.id3 import ( APIC, COMM, SYLT, TALB, TCOM, TCON, TCOP, TDRC, TEXT, TIT2, TLEN, TPE1, TPE2, TPOS, TPUB, TRCK, TSRC, TXXX, USLT, TYER ) -from deezspot.models import Track, Episode +from deezspot.models.download import Track, Episode import requests import logging import os diff --git a/deezspot/deezloader/__init__.py b/deezspot/deezloader/__init__.py index fdadaff..a88795c 100644 --- a/deezspot/deezloader/__init__.py +++ b/deezspot/deezloader/__init__.py @@ -6,7 +6,7 @@ from deezspot.deezloader.dee_api import API from deezspot.easy_spoty import Spo from deezspot.deezloader.deegw_api import API_GW from deezspot.deezloader.deezer_settings import stock_quality -from deezspot.models import ( +from deezspot.models.download import ( Track, Album, Playlist, diff --git a/deezspot/libutils/utils.py b/deezspot/libutils/utils.py index 20019cf..3c04f3f 100644 --- a/deezspot/libutils/utils.py +++ b/deezspot/libutils/utils.py @@ -6,7 +6,7 @@ from datetime import datetime from urllib.parse import urlparse from requests import get as req_get from zipfile import ZipFile, ZIP_DEFLATED -from deezspot.models.track import Track +from deezspot.models.download.track import Track from deezspot.exceptions import InvalidLink from deezspot.libutils.others_settings import supported_link, header from deezspot.libutils.logging_utils import ProgressReporter, logger diff --git a/deezspot/models/__init__.py b/deezspot/models/__init__.py deleted file mode 100644 index 2847ff6..0000000 --- a/deezspot/models/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/python3 - -from deezspot.models.smart import Smart -from deezspot.models.track import Track -from deezspot.models.album import Album -from deezspot.models.playlist import Playlist -from deezspot.models.preferences import Preferences -from deezspot.models.episode import Episode diff --git a/deezspot/models/album.py b/deezspot/models/album.py deleted file mode 100644 index 6cfb958..0000000 --- a/deezspot/models/album.py +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/python3 - -from deezspot.models.track import Track - -class Album: - def __init__(self, ids: int) -> None: - self.tracks: list[Track] = [] - self.zip_path = None - self.image = None - self.album_quality = None - self.md5_image = None - self.ids = ids - self.nb_tracks = None - self.album_name = None - self.upc = None - self.tags = None - self.__set_album_md5() - - def __set_album_md5(self): - self.album_md5 = f"album/{self.ids}" \ No newline at end of file diff --git a/deezspot/models/callback/__init__.py b/deezspot/models/callback/__init__.py index f184df0..783a5d5 100644 --- a/deezspot/models/callback/__init__.py +++ b/deezspot/models/callback/__init__.py @@ -5,7 +5,7 @@ Callback data models for the music metadata schema. """ from .common import IDs, ReleaseDate -from .artist import artistObject, artistTrackObject -from .album import albumObject, albumTrackObject, albumArtistObject, trackAlbumObject -from .track import trackObject +from .artist import artistObject, albumArtistObject +from .album import albumObject, trackAlbumObject +from .track import trackObject, artistTrackObject, albumTrackObject from .playlist import playlistObject, trackPlaylistObject, albumTrackPlaylistObject, artistTrackPlaylistObject \ No newline at end of file diff --git a/deezspot/models/callback/album.py b/deezspot/models/callback/album.py index b4ab008..344a0c1 100644 --- a/deezspot/models/callback/album.py +++ b/deezspot/models/callback/album.py @@ -18,18 +18,6 @@ class trackAlbumObject: ids: IDs = field(default_factory=IDs) -@dataclass -class albumTrackObject: - """Album when nested inside a track context.""" - type: str = "albumTrack" - album_type: str = "" # "album" | "single" | "compilation" - title: str = "" - release_date: Dict[str, Any] = field(default_factory=dict) # ReleaseDate as dict - total_tracks: int = 0 - genres: List[str] = field(default_factory=list) - ids: IDs = field(default_factory=IDs) - - @dataclass class albumObject: """A standalone album/single/compilation, with nested trackAlbumObject[] for its tracks.""" diff --git a/deezspot/models/callback/artist.py b/deezspot/models/callback/artist.py index 37b29ad..957d492 100644 --- a/deezspot/models/callback/artist.py +++ b/deezspot/models/callback/artist.py @@ -6,17 +6,6 @@ from typing import List, Optional from .common import IDs -@dataclass -class artistTrackObject: - """ - An artist when nested inside a track context. - No genres, no albums—just identifying info. - """ - type: str = "artistTrack" - name: str = "" - ids: IDs = field(default_factory=IDs) - - @dataclass class albumArtistObject: """Album when nested inside an artist context.""" diff --git a/deezspot/models/callback/playlist.py b/deezspot/models/callback/playlist.py index 7b67123..056ca7e 100644 --- a/deezspot/models/callback/playlist.py +++ b/deezspot/models/callback/playlist.py @@ -33,7 +33,6 @@ class trackPlaylistObject: title: str = "" position: int = 0 # Position in the playlist duration_ms: int = 0 # mandatory - # Nested objects instead of string references artist: artistTrackPlaylistObject = field(default_factory=artistTrackPlaylistObject) album: albumTrackPlaylistObject = field(default_factory=albumTrackPlaylistObject) ids: IDs = field(default_factory=IDs) diff --git a/deezspot/models/callback/track.py b/deezspot/models/callback/track.py index f0260de..1c9dda7 100644 --- a/deezspot/models/callback/track.py +++ b/deezspot/models/callback/track.py @@ -1,11 +1,32 @@ #!/usr/bin/python3 from dataclasses import dataclass, field -from typing import List, Optional +from typing import List, Optional, Dict, Any from .common import IDs -from .album import albumTrackObject -from .artist import artistTrackObject + + +@dataclass +class artistTrackObject: + """ + An artist when nested inside a track context. + No genres, no albums—just identifying info. + """ + type: str = "artistTrack" + name: str = "" + ids: IDs = field(default_factory=IDs) + + +@dataclass +class albumTrackObject: + """Album when nested inside a track context.""" + type: str = "albumTrack" + album_type: str = "" # "album" | "single" | "compilation" + title: str = "" + release_date: Dict[str, Any] = field(default_factory=dict) # ReleaseDate as dict + total_tracks: int = 0 + genres: List[str] = field(default_factory=list) + ids: IDs = field(default_factory=IDs) @dataclass diff --git a/deezspot/models/episode.py b/deezspot/models/download/episode.py similarity index 100% rename from deezspot/models/episode.py rename to deezspot/models/download/episode.py diff --git a/deezspot/models/playlist.py b/deezspot/models/download/playlist.py similarity index 71% rename from deezspot/models/playlist.py rename to deezspot/models/download/playlist.py index 53c9aa7..e47ba31 100644 --- a/deezspot/models/playlist.py +++ b/deezspot/models/download/playlist.py @@ -1,6 +1,6 @@ #!/usr/bin/python3 -from deezspot.models.track import Track +from deezspot.models.download.track import Track class Playlist: def __init__(self) -> None: diff --git a/deezspot/models/preferences.py b/deezspot/models/download/preferences.py similarity index 100% rename from deezspot/models/preferences.py rename to deezspot/models/download/preferences.py diff --git a/deezspot/models/smart.py b/deezspot/models/download/smart.py similarity index 55% rename from deezspot/models/smart.py rename to deezspot/models/download/smart.py index 38a980e..7abe480 100644 --- a/deezspot/models/smart.py +++ b/deezspot/models/download/smart.py @@ -1,8 +1,8 @@ #!/usr/bin/python3 -from deezspot.models.track import Track -from deezspot.models.album import Album -from deezspot.models.playlist import Playlist +from deezspot.models.download.track import Track +from deezspot.models.download.album import Album +from deezspot.models.download.playlist import Playlist class Smart: def __init__(self) -> None: diff --git a/deezspot/models/track.py b/deezspot/models/track.py deleted file mode 100644 index 6a34dab..0000000 --- a/deezspot/models/track.py +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/python3 - -class Track: - def __init__( - self, - tags: dict, - song_path: str, - file_format: str, - quality: str, - link: str, - ids: int -) -> None: - - self.tags = tags - self.__set_tags() - - music_display = getattr(self, 'music', getattr(self, 'name', "Unknown Track")) - artist_display = getattr(self, 'artist', "Unknown Artist") - self.song_name = f"{music_display} - {artist_display}" - - self.song_path = song_path - self.file_format = file_format - self.quality = quality - self.link = link - self.ids = ids - self.md5_image = None - self.success = True - self.__set_track_md5() - - def __set_tags(self): - for tag, value in self.tags.items(): - setattr( - self, tag, value - ) - - def __set_track_md5(self): - self.track_md5 = f"track/{self.ids}" - - def set_fallback_ids(self, fallback_ids): - self.fallback_ids = fallback_ids - self.fallback_track_md5 = f"track/{self.fallback_ids}" \ No newline at end of file diff --git a/deezspot/spotloader/__init__.py b/deezspot/spotloader/__init__.py index 85eda30..2776bcd 100644 --- a/deezspot/spotloader/__init__.py +++ b/deezspot/spotloader/__init__.py @@ -11,7 +11,7 @@ from deezspot.libutils.utils import ( link_is_valid, what_kind, ) -from deezspot.models import ( +from deezspot.models.download import ( Track, Album, Playlist,