mirror of
https://github.com/oskvr37/tiddl.git
synced 2026-06-13 12:15:13 +03:00
✅ add parseURL
This commit is contained in:
@@ -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()
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user