add parseURL

This commit is contained in:
oskvr37
2024-07-31 15:32:45 +02:00
parent 306563f765
commit fe307d7cff
2 changed files with 104 additions and 0 deletions
+81
View File
@@ -0,0 +1,81 @@
import unittest
from .utils import parseURL
class TestUtils(unittest.TestCase):
def test_parseURL(self):
self.assertEqual(
parseURL("https://tidal.com/browse/track/284165609"), ("track", "284165609")
)
self.assertEqual(
parseURL("https://tidal.com/browse/track/284165609/"),
("track", "284165609"),
)
self.assertEqual(
parseURL("https://tidal.com/browse/track/284165609?u"),
("track", "284165609"),
)
self.assertEqual(
parseURL(
"https://listen.tidal.com/album/284165608/track/284165609",
),
("track", "284165609"),
)
self.assertEqual(
parseURL("https://listen.tidal.com/album/284165608"), ("album", "284165608")
)
self.assertEqual(
parseURL("https://tidal.com/browse/album/284165608"), ("album", "284165608")
)
self.assertEqual(
parseURL("https://tidal.com/browse/album/284165608?u"),
("album", "284165608"),
)
self.assertEqual(
parseURL("https://listen.tidal.com/artist/7695548"), ("artist", "7695548")
)
self.assertEqual(
parseURL("https://tidal.com/browse/artist/7695548"), ("artist", "7695548")
)
self.assertEqual(
parseURL(
"https://tidal.com/browse/playlist/803be625-97e4-4cbb-88dd-43f0b1c61ed7"
),
("playlist", "803be625-97e4-4cbb-88dd-43f0b1c61ed7"),
)
self.assertEqual(
parseURL(
"https://listen.tidal.com/playlist/803be625-97e4-4cbb-88dd-43f0b1c61ed7"
),
("playlist", "803be625-97e4-4cbb-88dd-43f0b1c61ed7"),
)
self.assertEqual(
parseURL(
"https://listen.tidal.com/playlist/803be625-97e4-4cbb-88dd-43f0b1c61ed7"
),
("playlist", "803be625-97e4-4cbb-88dd-43f0b1c61ed7"),
)
self.assertEqual(parseURL("track/284165609"), ("track", "284165609"))
self.assertEqual(
parseURL("playlist/803be625-97e4-4cbb-88dd-43f0b1c61ed7"),
("playlist", "803be625-97e4-4cbb-88dd-43f0b1c61ed7"),
)
# we can also omit domain
self.assertEqual(
parseURL("playlist/803be625-97e4-4cbb-88dd-43f0b1c61ed7"),
("playlist", "803be625-97e4-4cbb-88dd-43f0b1c61ed7"),
)
self.assertRaises(ValueError, parseURL, "")
if __name__ == "__main__":
unittest.main()
+23
View File
@@ -0,0 +1,23 @@
from typing import Literal, List, get_args
RESOURCE = Literal["track", "album", "artist", "playlist"]
RESOURCE_LIST: List[RESOURCE] = list(get_args(RESOURCE))
def parseURL(url: str) -> tuple[RESOURCE, str]:
# remove trailing slash
url = url.rstrip("/")
# remove params
url = url.split("?")[0]
fragments = url.split("/")
if len(fragments) != 2:
raise ValueError(f"Invalid input: {url}")
parsed_type, parsed_id = fragments[-2], fragments[-1]
if parsed_type not in RESOURCE_LIST:
raise ValueError(f"Invalid resource type: {parsed_type} ({url})")
return parsed_type, parsed_id