playlist metadata

This commit is contained in:
jbannon 2022-04-11 23:56:31 +00:00
parent af2d091d50
commit 5a63d80ca5
2 changed files with 31 additions and 16 deletions

View file

@ -1,4 +1,5 @@
from abc import ABC
from dataclasses import dataclass
from pathlib import Path
from typing import Any
from typing import Dict
@ -10,6 +11,13 @@ from ytdl_subscribe.validators.base.string_formatter_validators import StringFor
from ytdl_subscribe.validators.config.overrides.overrides_validator import OverridesValidator
@dataclass
class PlaylistMetadata:
order_index: int
playlist_id: str
playlist_extractor: str
# TODO: strip things out of entry into BaseEntry
class BaseEntry(ABC):
def __init__(self, **kwargs):
@ -41,14 +49,13 @@ class BaseEntry(ABC):
return self.kwargs("extractor")
@property
def order_index(self) -> int:
def playlist_metadata(self) -> Optional[PlaylistMetadata]:
"""
Reserved for any child entry class that might have some kind of ordering to it.
Returns 1 unless overwritten.
Reserved for any child entry class that resides in a playlist.
:return: The order index (1-based)
:return: Playlist metadata for this entry
"""
return 1
return None
def to_dict(self) -> Dict[str, str]:
"""Returns the entry's values as a dictionary"""

View file

@ -1,9 +1,11 @@
from typing import Dict
from typing import List
from typing import Optional
from sanitize_filename import sanitize
from ytdl_subscribe.entries.entry import Entry
from ytdl_subscribe.entries.entry import PlaylistMetadata
class SoundcloudTrack(Entry):
@ -65,23 +67,23 @@ class SoundcloudAlbumTrack(SoundcloudTrack):
Entry object to represent a Soundcloud track yt-dlp that belongs to an album.
"""
def __init__(self, album: str, album_year: int, track_number: int, **kwargs):
def __init__(self, album: str, album_year: int, playlist_metadata: PlaylistMetadata, **kwargs):
"""
Initialize the album track using album metadata and ytdl metadata for the specific track.
"""
super().__init__(**kwargs)
self._album = album
self._album_year = album_year
self._track_number = track_number
self._playlist_metadata = playlist_metadata
@property
def playlist_metadata(self) -> Optional[PlaylistMetadata]:
return self._playlist_metadata
@property
def track_number(self) -> int:
"""Returns the entry's track number"""
return self._track_number
@property
def order_index(self) -> int:
return self._track_number
return self._playlist_metadata.order_index
@property
def album(self) -> str:
@ -95,12 +97,16 @@ class SoundcloudAlbumTrack(SoundcloudTrack):
@classmethod
def from_soundcloud_entry(
cls, soundcloud_track: SoundcloudTrack, album: str, album_year: int, track_number: int
cls,
album: str,
album_year: int,
soundcloud_track: SoundcloudTrack,
playlist_metadata: PlaylistMetadata,
) -> "SoundcloudAlbumTrack":
return SoundcloudAlbumTrack(
album=album,
album_year=album_year,
track_number=track_number,
playlist_metadata=playlist_metadata,
**soundcloud_track._kwargs,
)
@ -130,10 +136,12 @@ class SoundcloudAlbum(Entry):
album_tracks = [
SoundcloudAlbumTrack.from_soundcloud_entry(
soundcloud_track=track,
album=self.title,
album_year=self.album_year,
track_number=i + 1,
soundcloud_track=track,
playlist_metadata=PlaylistMetadata(
playlist_id=self.uid, playlist_extractor=self.extractor, order_index=i + 1
),
)
for i, track in enumerate(tracks)
]