Handle NonStreamableError for metadata parsing (#595)

This commit is contained in:
Nathan Thomas 2024-01-24 14:00:18 -08:00 committed by GitHub
parent 1c2bd2545c
commit 24d23ad230
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 28 additions and 4 deletions

View file

@ -7,6 +7,7 @@ from .. import progress
from ..client import Client from ..client import Client
from ..config import Config from ..config import Config
from ..db import Database from ..db import Database
from ..exceptions import NonStreamableError
from ..filepath_utils import clean_filepath from ..filepath_utils import clean_filepath
from ..metadata import AlbumMetadata from ..metadata import AlbumMetadata
from ..metadata.util import get_album_track_ids from ..metadata.util import get_album_track_ids
@ -50,7 +51,14 @@ class PendingAlbum(Pending):
db: Database db: Database
async def resolve(self) -> Album | None: async def resolve(self) -> Album | None:
resp = await self.client.get_metadata(self.id, "album") try:
resp = await self.client.get_metadata(self.id, "album")
except NonStreamableError as e:
logger.error(
f"Album {self.id} not available to stream on {self.client.source} ({e})",
)
return None
meta = AlbumMetadata.from_album_resp(resp, self.client.source) meta = AlbumMetadata.from_album_resp(resp, self.client.source)
if meta is None: if meta is None:
logger.error( logger.error(

View file

@ -7,6 +7,7 @@ from ..client import Client
from ..config import Config, QobuzDiscographyFilterConfig from ..config import Config, QobuzDiscographyFilterConfig
from ..console import console from ..console import console
from ..db import Database from ..db import Database
from ..exceptions import NonStreamableError
from ..metadata import ArtistMetadata from ..metadata import ArtistMetadata
from .album import Album, PendingAlbum from .album import Album, PendingAlbum
from .media import Media, Pending from .media import Media, Pending
@ -180,8 +181,15 @@ class PendingArtist(Pending):
config: Config config: Config
db: Database db: Database
async def resolve(self) -> Artist: async def resolve(self) -> Artist | None:
resp = await self.client.get_metadata(self.id, "artist") try:
resp = await self.client.get_metadata(self.id, "artist")
except NonStreamableError as e:
logger.error(
f"Artist {self.id} not available to stream on {self.client.source} ({e})",
)
return None
meta = ArtistMetadata.from_resp(resp, self.client.source) meta = ArtistMetadata.from_resp(resp, self.client.source)
albums = [ albums = [
PendingAlbum(album_id, self.client, self.config, self.db) PendingAlbum(album_id, self.client, self.config, self.db)

View file

@ -147,7 +147,14 @@ class PendingPlaylist(Pending):
db: Database db: Database
async def resolve(self) -> Playlist | None: async def resolve(self) -> Playlist | None:
resp = await self.client.get_metadata(self.id, "playlist") try:
resp = await self.client.get_metadata(self.id, "playlist")
except NonStreamableError as e:
logger.error(
f"Playlist {self.id} not available to stream on {self.client.source} ({e})",
)
return None
meta = PlaylistMetadata.from_resp(resp, self.client.source) meta = PlaylistMetadata.from_resp(resp, self.client.source)
name = meta.name name = meta.name
parent = self.config.session.downloads.folder parent = self.config.session.downloads.folder
@ -261,6 +268,7 @@ class PendingLastfmPlaylist(Pending):
if that fails. if that fails.
Args: Args:
----
query (str): Query to search query (str): Query to search
s (Status): s (Status):
callback: function to call after each query completes callback: function to call after each query completes