improve uri parse helper to give better exception if it fails (#294)
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Mon, 9 May 2022 10:14:53 +0000 (12:14 +0200)
committerGitHub <noreply@github.com>
Mon, 9 May 2022 10:14:53 +0000 (12:14 +0200)
music_assistant/controllers/music/__init__.py

index efca2e2556bd4469388777c84ab49604440d896b..abac150fcc590bfdbd4389c8fbf60ecfd00b39e3 100755 (executable)
@@ -147,18 +147,19 @@ class MusicController:
         self, uri: str, force_refresh: bool = False, lazy: bool = True
     ) -> MediaItemType:
         """Fetch MediaItem by uri."""
-        if uri.startswith("http://") or uri.startswith("https://"):
-            raise MusicAssistantError(f"Not a valid Music Assistant uri: {uri}")
-        if "://" in uri:
-            provider = uri.split("://")[0]
-            item_id = uri.split("/")[-1]
-            media_type = MediaType(uri.split("/")[-2])
-        else:
-            # spotify new-style uri
-            provider, media_type, item_id = uri.split(":")
-            media_type = MediaType(media_type)
-        if media_type == MediaType.UNKNOWN:
-            raise MusicAssistantError(f"Not a valid Music Assistant uri: {uri}")
+        try:
+            if "://" in uri:
+                provider = uri.split("://")[0]
+                item_id = uri.split("/")[-1]
+                media_type = MediaType(uri.split("/")[-2])
+            elif "spotify" in uri:
+                # spotify new-style uri
+                provider, media_type, item_id = uri.split(":")
+                media_type = MediaType(media_type)
+        except (TypeError, AttributeError, ValueError) as err:
+            raise MusicAssistantError(
+                f"Not a valid Music Assistant uri: {uri}"
+            ) from err
         return await self.get_item(
             item_id, provider, media_type, force_refresh=force_refresh, lazy=lazy
         )