Deezer search working

This commit is contained in:
Nathan Thomas 2023-12-21 20:20:22 -08:00
parent b1e4369f5d
commit f11a1105c9
2 changed files with 12 additions and 5 deletions

View File

@ -108,7 +108,7 @@ class DeezerClient(Client):
artist["albums"] = albums["data"]
return artist
async def search(self, media_type: str, query: str, limit: int = 200):
async def search(self, media_type: str, query: str, limit: int = 200) -> list[dict]:
# TODO: use limit parameter
if media_type == "featured":
try:
@ -125,7 +125,7 @@ class DeezerClient(Client):
raise Exception(f"Invalid media type {media_type}")
response = search_function(query, limit=limit) # type: ignore
return response
return [response]
async def get_downloadable(
self,

View File

@ -92,6 +92,9 @@ class TrackSummary(Summary):
)
or "Unknown"
)
if isinstance(artist, dict) and "name" in artist:
artist = artist["name"]
date_released = (
item.get("release_date")
or item.get("album", {}).get("release_date_original")
@ -100,7 +103,7 @@ class TrackSummary(Summary):
or item.get("year")
or "Unknown"
)
return cls(id, name.strip(), artist, date_released)
return cls(id, name.strip(), artist, date_released) # type: ignore
@dataclass(slots=True)
@ -186,7 +189,7 @@ class PlaylistSummary(Summary):
wrapped = "\n".join(
textwrap.wrap(self.description, os.get_terminal_size().columns - 4 or 70),
)
return f"{self.num_tracks} tracks\n\nDescription:\n{wrapped}\n\nid:{self.id}"
return f"{self.num_tracks} tracks\n\nDescription:\n{wrapped}\n\nID: {self.id}"
def media_type(self):
return "playlist"
@ -199,9 +202,10 @@ class PlaylistSummary(Summary):
(item.get("publisher_metadata") and item["publisher_metadata"]["artist"])
or item.get("owner", {}).get("name")
or item.get("user", {}).get("username")
or item.get("user", {}).get("name")
or "Unknown"
)
num_tracks = item.get("tracks_count") or -1
num_tracks = item.get("tracks_count") or item.get("nb_tracks") or -1
description = item.get("description") or "No description"
return cls(id, name, creator, num_tracks, description)
@ -235,6 +239,9 @@ class SearchResults:
key = media_type + "s"
for item in page[key]["items"]:
results.append(summary_type.from_item(item))
elif source == "deezer":
for item in page["data"]:
results.append(summary_type.from_item(item))
else:
raise NotImplementedError