diff --git a/.gitignore b/.gitignore index 06b77552..5a4d370b 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,11 @@ __pycache__/ # C extensions *.so +# VSCODE files +.vscode +# Build files +tmp/ + # Distribution / packaging .Python build/ diff --git a/src/ytdl_sub/entries/base_entry.py b/src/ytdl_sub/entries/base_entry.py index 76dfb2a1..a4078c2c 100644 --- a/src/ytdl_sub/entries/base_entry.py +++ b/src/ytdl_sub/entries/base_entry.py @@ -14,6 +14,7 @@ class PlaylistMetadata: playlist_index: int playlist_id: str playlist_extractor: str + playlist_count: int class BaseEntry(ABC): diff --git a/src/ytdl_sub/entries/soundcloud.py b/src/ytdl_sub/entries/soundcloud.py index 15c75530..4278482b 100644 --- a/src/ytdl_sub/entries/soundcloud.py +++ b/src/ytdl_sub/entries/soundcloud.py @@ -51,6 +51,11 @@ class SoundcloudAlbumTrack(SoundcloudTrack): """Returns the entry's album name, fetched from its internal album""" return self._album + @property + def track_count(self) -> int: + """Returns the entry's total tracks in album for singles this is 1""" + return self._playlist_metadata.playlist_count + @property def album_year(self) -> int: """Returns the entry's album year, fetched from its internal album""" @@ -127,6 +132,7 @@ class SoundcloudAlbum(Entry): playlist_id=self.uid, playlist_extractor=self.extractor, playlist_index=track.kwargs("playlist_index"), + playlist_count=self.track_count, ), ) for track in tracks diff --git a/src/ytdl_sub/entries/variables/soundcloud_variables.py b/src/ytdl_sub/entries/variables/soundcloud_variables.py index 3fcbdcab..45a35755 100644 --- a/src/ytdl_sub/entries/variables/soundcloud_variables.py +++ b/src/ytdl_sub/entries/variables/soundcloud_variables.py @@ -25,6 +25,15 @@ class SoundcloudVariables(EntryVariables): """ return f"{self.track_number:02d}" + @property + def track_count(self) -> int: + """ + Returns + ------- + The total tracks in album. For singles, it will always be 1. + """ + return 1 + @property def album(self) -> str: """ diff --git a/tests/unit/entries/test_soundcloud_entries.py b/tests/unit/entries/test_soundcloud_entries.py index d6c42b44..76e69668 100644 --- a/tests/unit/entries/test_soundcloud_entries.py +++ b/tests/unit/entries/test_soundcloud_entries.py @@ -13,6 +13,11 @@ def track_number_padded(): return "01" +@pytest.fixture +def track_count(): + return 1 + + @pytest.fixture def url(): return "soundcloud.com/artist/track-asdfasdf" @@ -31,6 +36,7 @@ def mock_soundcloud_track_to_dict( track_number, track_number_padded, is_premiere, + track_count, ): return dict( mock_entry_to_dict, @@ -40,6 +46,7 @@ def mock_soundcloud_track_to_dict( "album": title, "sanitized_album": title, "album_year": upload_year, + "track_count": track_count, } ) @@ -62,6 +69,7 @@ def validate_soundcloud_track_properties( track_number, track_number_padded, is_premiere, + track_count, ): def _validate_soundcloud_track_properties(soundcloud_track: SoundcloudTrack): assert validate_entry_properties(soundcloud_track) @@ -70,7 +78,7 @@ def validate_soundcloud_track_properties( assert soundcloud_track.album == title assert soundcloud_track.sanitized_album == title assert soundcloud_track.album_year == upload_year - + assert soundcloud_track.track_count == track_count assert soundcloud_track.is_premiere() == is_premiere return True