soundcloud username
This commit is contained in:
parent
44525895f6
commit
e232b1cdda
2 changed files with 16 additions and 16 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue