From 05e99718f874636e6c8219821a67bbedeef70f6c Mon Sep 17 00:00:00 2001 From: codey Date: Wed, 14 Aug 2024 08:06:02 -0400 Subject: [PATCH] Resolves #8 --- endpoints/lastfm.py | 44 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/endpoints/lastfm.py b/endpoints/lastfm.py index 893cb66..5baf66b 100644 --- a/endpoints/lastfm.py +++ b/endpoints/lastfm.py @@ -34,6 +34,23 @@ class ValidAlbumDetailRequest(BaseModel): "a2": "houdini" } } + +class ValidTrackInfoRequest(BaseModel): + """ + - **a**: artist name + - **t**: track + """ + + a: str + t: str + + class Config: + schema_extra = { + "example": { + "a": "eminem", + "t": "rap god" + } + } class LastFM(FastAPI): """Last.FM Endpoints""" @@ -48,7 +65,8 @@ class LastFM(FastAPI): "get_artist_by_name": self.artist_by_name_handler, "get_artist_albums": self.artist_album_handler, "get_release": self.release_detail_handler, - "get_album_tracklist": self.release_tracklist_handler, + "get_release_tracklist": self.release_tracklist_handler, + "get_track_info": self.track_info_handler, #tbd } @@ -157,4 +175,26 @@ class LastFM(FastAPI): 'title': tracklist_result.get('title'), 'summary': tracklist_result.get('summary'), 'tracks': tracklist_result.get('tracks') - } + } + + async def track_info_handler(self, data: ValidTrackInfoRequest): + """ + /get_track_info/ + Get track info from Last.FM given an artist/track + """ + artist = data.a + track = data.t + + if not(artist) or not(track): + return { + 'err': True, + 'errorText': 'Invalid request' + } + + track_info_result = await self.lastfm.get_track_info(artist=artist, track=track) + assert not "err" in track_info_result.keys() + return { + 'success': True, + 'result': track_info_result + } +