diff --git a/endpoints/lyric_search.py b/endpoints/lyric_search.py index 1f06b00..1dd6dcb 100644 --- a/endpoints/lyric_search.py +++ b/endpoints/lyric_search.py @@ -100,11 +100,8 @@ class LyricSearch(FastAPI): self.endpoints = { "typeahead/artist": self.artist_typeahead_handler, "typeahead/song": self.song_typeahead_handler, - # "lyric_search": self.lyric_search_handler, - "lyric_search": self.new_test, #test + "lyric_search": self.lyric_search_handler, "lyric_cache_list": self.lyric_cache_list_handler, - "lyric_search_history": self.lyric_search_log_handler, - "lyric_search_test": self.new_test, } self.acceptable_request_sources = [ @@ -168,7 +165,7 @@ class LyricSearch(FastAPI): 'history': last_10k_sings } - async def new_test(self, data: ValidLyricRequest): + async def lyric_search_handler(self, data: ValidLyricRequest): """ Search for lyrics (testing) @@ -249,168 +246,3 @@ class LyricSearch(FastAPI): # if not data.extra: # result.pop('src') return result - - - - async def lyric_search_handler(self, data: ValidLyricRequest): - """ - Search for lyrics - - - **a**: artist - - **s**: song - - **t**: track (artist and song combined) [used only if a & s are not used] - - **extra**: include extra details in response [optional, default: false] - - **lrc**: Request LRCs? - - **sub**: text to search within lyrics, if found lyrics will begin at found verse [optional, default: none] - - **src**: the script/utility which initiated the request - """ - - lrc = data.lrc - src = data.src.upper() - if not src in self.acceptable_request_sources: - raise HTTPException(detail="Invalid request source", status_code=403) - - await self.glob_state.increment_counter('lyric_requests') - - search_artist = data.a - search_song = data.s - search_text = data.t - add_extras = data.extra - sub_search = data.sub - search_object = None - - random_song_requested = (search_artist == "!" and search_song == "!") - query_valid = ( - not(search_artist is None) and - not(search_song is None) and - len(search_artist) >= 1 and - len(search_song) >= 1 and - len(search_artist) + len(search_song) >= 3 - ) - - if not random_song_requested and (not search_text and not query_valid): - return { - "err": True, - "errorText": "Invalid parameters" - } - if search_artist and search_song: - search_artist = self.constants.DOUBLE_SPACE_REGEX.sub(" ", search_artist.strip()) - search_song = self.constants.DOUBLE_SPACE_REGEX.sub(" ", search_song.strip()) - search_artist = urllib.parse.unquote(search_artist) - search_song = urllib.parse.unquote(search_song) - - if search_text is None: - # pylint: disable=consider-using-f-string - search_object = self.lyrics_engine.create_query_object("%s : %s" % (search_artist, search_song)) - if sub_search: - sub_search = regex.sub(r'\s{2,}', ' ', sub_search.strip()) - search_object = self.lyrics_engine.create_query_object("%s : %s : %s" % (search_artist, search_song, sub_search)) - else: - search_object = self.lyrics_engine.create_query_object(str(search_text)) - - if lrc: - search_worker = await self.lyrics_engine.grabFromSpotify(searching=search_object, - lrc=True) - - spotify_lyrics_unsynced = True - if search_worker and search_worker.get('l'): - for line in search_worker.get('l'): - if line.get('timeTag') and line.get('timeTag') != "00:00.00": - spotify_lyrics_unsynced = False - if not search_worker or spotify_lyrics_unsynced: - # Try LRCLib before failing out - try: - lrclib_api_url = "https://lrclib.net/api/get" - sane_artist = urllib.parse.quote_plus(search_artist) - sane_track = urllib.parse.quote_plus(search_song) - async with aiohttp.ClientSession() as session: - async with session.get(f"{lrclib_api_url}?artist_name={sane_artist}&track_name={sane_track}") as request: - request.raise_for_status() - response_json = await request.json() - if not "syncedLyrics" in response_json: - raise BaseException("LRCLib Fallback Failed") - lrc_content = response_json.get('syncedLyrics') - returned_artist = response_json.get('artistName') - returned_song = response_json.get('trackName') - logging.debug("Synced Lyrics [LRCLib]: %s", - lrc_content) - lrc_content_out = [] - for line in lrc_content.split("\n"): - _timetag = None - _words = None - if not line.strip(): - continue - reg_helper = regex.findall(self.lrc_regex, line.strip()) - if not reg_helper: - continue - reg_helper = reg_helper[0] - _timetag = reg_helper[0] - if not reg_helper[1].strip(): - _words = "♪" - else: - _words = reg_helper[1] - lrc_content_out.append({ - "timeTag": _timetag, - "words": _words, - }) - - return { - 'err': False, - 'artist': returned_artist, - 'song': returned_song, - 'combo_lev': "N/A", - 'lrc': lrc_content_out, - 'from_cache': False, - 'src': 'Alt LRC SRC', - 'reqn': await self.glob_state.get_counter('lyric_requests'), - } - except: - traceback.print_exc() - return { - 'err': True, - 'errorText': 'Search failed!', - } - - - return { - 'err': True, - 'errorText': 'Search failed!', - } - if lrc: - return { - 'err': False, - 'artist': search_worker['artist'], - 'song': search_worker['song'], - 'combo_lev': search_worker['combo_lev'], - 'lrc': search_worker['l'], - 'from_cache': False, - 'src': search_worker['method'], - 'reqn': await self.glob_state.get_counter('lyric_requests'), - } - - search_worker = await self.lyrics_engine.lyrics_worker(searching=search_object) - - - if not search_worker or not 'l' in search_worker.keys(): - await self.glob_state.increment_counter('failedlyric_requests') - return { - 'err': True, - 'errorText': 'Sources exhausted, lyrics not located.' - } - - - await self.lyrics_engine.storeHistEntry(artist=search_worker.get('artist'), - song=search_worker.get('song'), - retr_method=search_worker.get('method'), - request_src=src.strip()) - - return { - 'err': False, - 'artist': search_worker['artist'], - 'song': search_worker['song'], - 'combo_lev': f'{search_worker['combo_lev']:.2f}', - 'lyrics': regex.sub(r"\s/\s", "
", " ".join(search_worker['l'])), - 'from_cache': search_worker['method'].strip().lower().startswith("local cache"), - 'src': search_worker['method'] if add_extras else None, - 'reqn': await self.glob_state.get_counter('lyric_requests') - }