soundcloud username

This commit is contained in:
jbannon 2022-06-05 15:29:23 +00:00
parent 44525895f6
commit e232b1cdda
2 changed files with 16 additions and 16 deletions

View file

@ -145,9 +145,9 @@ class YoutubeChannelUrlValidator(StringValidator):
return self._channel_url return self._channel_url
class SoundcloudArtistUrlValidator(StringValidator): class SoundcloudUsernameUrlValidator(StringValidator):
_expected_value_type_name = "Soundcloud artist url" _expected_value_type_name = "Soundcloud username url"
@classmethod @classmethod
def _get_channel_url(cls, url: str) -> Optional[str]: def _get_channel_url(cls, url: str) -> Optional[str]:
@ -166,24 +166,24 @@ class SoundcloudArtistUrlValidator(StringValidator):
query = urlparse(url) query = urlparse(url)
if query.hostname in ("soundcloud.com", "www.soundcloud.com"): if query.hostname in ("soundcloud.com", "www.soundcloud.com"):
if len(query.path) > 2: # /artist_name if len(query.path) > 2: # /artist_name
artist_name = query.path[1:].split("/")[0] # strip extra paths or slashes username = query.path[1:].split("/")[0] # strip extra paths or slashes
artist_name = artist_name.split("?")[0] # strip extra arguments username = username.split("?")[0] # strip extra arguments
return f"https://soundcloud.com/{artist_name}" return f"https://soundcloud.com/{username}"
return None return None
def __init__(self, name: str, value: Any): def __init__(self, name: str, value: Any):
super().__init__(name, value) super().__init__(name, value)
self._artist_url = self._get_channel_url(value) self._username_url = self._get_channel_url(value)
if not self._artist_url: if not self._username_url:
raise self._validation_exception(f"'{value}' is not a valid Soundcloud artist url.") raise self._validation_exception(f"'{value}' is not a valid Soundcloud username url.")
@property @property
def artist_url(self) -> str: def username_url(self) -> str:
""" """
Returns Returns
------- -------
Full artist URL Full artist URL
""" """
return self._artist_url return self._username_url

View file

@ -3,7 +3,7 @@ import re
import pytest import pytest
from ytdl_sub.utils.exceptions import ValidationException from ytdl_sub.utils.exceptions import ValidationException
from ytdl_sub.validators.url_validator import SoundcloudArtistUrlValidator from ytdl_sub.validators.url_validator import SoundcloudUsernameUrlValidator
from ytdl_sub.validators.url_validator import YoutubeChannelUrlValidator from ytdl_sub.validators.url_validator import YoutubeChannelUrlValidator
from ytdl_sub.validators.url_validator import YoutubePlaylistUrlValidator from ytdl_sub.validators.url_validator import YoutubePlaylistUrlValidator
from ytdl_sub.validators.url_validator import YoutubeVideoUrlValidator from ytdl_sub.validators.url_validator import YoutubeVideoUrlValidator
@ -97,7 +97,7 @@ class TestYoutubeChannelUrlValidator:
YoutubeChannelUrlValidator(name="unit test", value=bad_url) YoutubeChannelUrlValidator(name="unit test", value=bad_url)
class TestSoundcloudArtistUrlValidator: class TestSoundcloudUsernameUrlValidator:
@pytest.mark.parametrize( @pytest.mark.parametrize(
"url", "url",
[ [
@ -110,11 +110,11 @@ class TestSoundcloudArtistUrlValidator:
], ],
) )
def test_soundcloud_artist_url_validator_success(self, url): def test_soundcloud_artist_url_validator_success(self, url):
artist_url = SoundcloudArtistUrlValidator(name="unit test", value=url).artist_url username_url = SoundcloudUsernameUrlValidator(name="unit test", value=url).username_url
assert artist_url == "https://soundcloud.com/poop" assert username_url == "https://soundcloud.com/poop"
def test_youtube_playlist_url_validator_fail(self): def test_youtube_playlist_url_validator_fail(self):
bad_url = "soundcloud.com" bad_url = "soundcloud.com"
expected_error_msg = f"'{bad_url}' is not a valid Soundcloud artist url." expected_error_msg = f"'{bad_url}' is not a valid Soundcloud username url."
with pytest.raises(ValidationException, match=re.escape(expected_error_msg)): with pytest.raises(ValidationException, match=re.escape(expected_error_msg)):
SoundcloudArtistUrlValidator(name="unit test", value=bad_url) SoundcloudUsernameUrlValidator(name="unit test", value=bad_url)