diff --git a/lyric_search_new/sources/aggregate.py b/lyric_search_new/sources/aggregate.py index 8ffbe5e..087bd79 100644 --- a/lyric_search_new/sources/aggregate.py +++ b/lyric_search_new/sources/aggregate.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3.12 -# pylint: disable=wrong-import-order +# pylint: disable=wrong-import-order, wrong-import-position from typing import Optional from lyric_search_new.constructors import LyricsResult @@ -22,6 +22,7 @@ class Aggregate: self.exclude_methods = exclude_methods async def search(self, artist: str, song: str) -> Optional[LyricsResult]: + """Aggregate Search""" cache_search = cache.Cache() genius_search = genius.Genius() lrclib_search = lrclib.LRCLib() diff --git a/lyric_search_new/sources/cache.py b/lyric_search_new/sources/cache.py index 35ab52f..e6177b3 100644 --- a/lyric_search_new/sources/cache.py +++ b/lyric_search_new/sources/cache.py @@ -1,8 +1,10 @@ #!/usr/bin/env python3.12 -# pylint: disable=wrong-import-position +# pylint: disable=wrong-import-order, wrong-import-position bare-except, broad-exception-caught import os +import logging import sys +import traceback sys.path.insert(1,'..') sys.path.insert(1,'.') from typing import Optional @@ -10,6 +12,9 @@ import aiosqlite as sqlite3 from lyric_search_new import utils from lyric_search_new.constructors import LyricsResult +logger = logging.getLogger() +log_level = logging.getLevelName(logger.level) + class Cache: """Cache Search Module""" def __init__(self): @@ -44,33 +49,39 @@ class Cache: """ artist = artist.strip().lower() song = song.strip().lower() - async with sqlite3.connect(self.cache_db, timeout=2) as db_conn: - await db_conn.enable_load_extension(True) - for ext in self.sqlite_exts: - await db_conn.load_extension(ext) - async with await db_conn.executescript(self.cache_pre_query) as _db_cursor: - search_query = 'SELECT id, artist, song, lyrics, src, confidence FROM lyrics\ - WHERE editdist3((artist || " " || song), (? || " " || ?))\ - <= 410 ORDER BY editdist3((artist || " " || song), ?) ASC LIMIT 10' - search_params = (artist.strip(), song.strip(), - f"{artist.strip()} {song.strip()}") - async with await _db_cursor.execute(search_query, search_params) as db_cursor: - results = await db_cursor.fetchall() - result_tracks = [] - for track in results: - (_id, _artist, _song, _lyrics, _src, _confidence) = track - result_tracks.append((_id, f"{_artist} - {_song}")) - input_track = f"{artist} - {song}" - matcher = utils.TrackMatcher() - best_match = matcher.find_best_match(input_track=input_track, - candidate_tracks=result_tracks) - if not best_match: - return None - (candidate, confidence) = best_match - return self.get_matched(sqlite_rows=results, - matched_candidate=candidate, - confidence=confidence) - + try: + async with sqlite3.connect(self.cache_db, timeout=2) as db_conn: + await db_conn.enable_load_extension(True) + for ext in self.sqlite_exts: + await db_conn.load_extension(ext) + async with await db_conn.executescript(self.cache_pre_query) as _db_cursor: + search_query = 'SELECT id, artist, song, lyrics, src, confidence FROM lyrics\ + WHERE editdist3((artist || " " || song), (? || " " || ?))\ + <= 410 ORDER BY editdist3((artist || " " || song), ?) ASC LIMIT 10' + search_params = (artist.strip(), song.strip(), + f"{artist.strip()} {song.strip()}") + async with await _db_cursor.execute(search_query, search_params) as db_cursor: + results = await db_cursor.fetchall() + result_tracks = [] + for track in results: + (_id, _artist, _song, _lyrics, _src, _confidence) = track + result_tracks.append((_id, f"{_artist} - {_song}")) + input_track = f"{artist} - {song}" + matcher = utils.TrackMatcher() + best_match = matcher.find_best_match(input_track=input_track, + candidate_tracks=result_tracks) + if not best_match: + return None + (candidate, confidence) = best_match + logging.info("Result found on %s", self.label) + return self.get_matched(sqlite_rows=results, + matched_candidate=candidate, + confidence=confidence) + except: + if log_level == "DEBUG": + traceback.print_exc() + return + \ No newline at end of file diff --git a/lyric_search_new/sources/genius.py b/lyric_search_new/sources/genius.py index a0e4dca..be96778 100644 --- a/lyric_search_new/sources/genius.py +++ b/lyric_search_new/sources/genius.py @@ -1,9 +1,10 @@ #!/usr/bin/env python3.12 -# pylint: disable=bare-except, broad-exception-caught, wrong-import-position +# pylint: disable=bare-except, broad-exception-caught, wrong-import-order, wrong-import-position import sys sys.path.insert(1,'..') import traceback +import logging from aiohttp import ClientTimeout, ClientSession from bs4 import BeautifulSoup import html as htm @@ -12,8 +13,12 @@ from . import common from lyric_search_new import utils from lyric_search_new.constructors import LyricsResult +logger = logging.getLogger() +log_level = logging.getLevelName(logger.level) + class InvalidResponseException(Exception): """ + InvalidResponseException """ class Genius: @@ -94,6 +99,7 @@ class Genius: returned_lyrics = self.datautils.scrub_lyrics(returned_lyrics) artist = track.split(" - ", maxsplit=1)[0] song = track.split(" - ", maxsplit=1)[1] + logging.info("Result found on %s", self.label) return LyricsResult(artist=artist, song=song, src=self.label, @@ -101,7 +107,8 @@ class Genius: confidence=confidence) except: - traceback.print_exc() + if log_level == "DEBUG": + traceback.print_exc() return diff --git a/lyric_search_new/sources/lrclib.py b/lyric_search_new/sources/lrclib.py index 49a1714..2b82d6c 100644 --- a/lyric_search_new/sources/lrclib.py +++ b/lyric_search_new/sources/lrclib.py @@ -4,11 +4,15 @@ import sys sys.path.insert(1,'..') import traceback +import logging from aiohttp import ClientTimeout, ClientSession from lyric_search_new import utils from lyric_search_new.constructors import LyricsResult from . import common +logger = logging.getLogger() +log_level = logging.getLevelName(logger.level) + class InvalidResponseException(Exception): """ Invalid Response Exception @@ -68,14 +72,15 @@ class LRCLib: candidate_tracks=[(0, returned_track)]) if not confidence: return # No suitable match found - print("Returning!") + logging.info("Result found on %s", self.label) return LyricsResult(artist=returned_artist, song=returned_song, src=self.label, lyrics=returned_lyrics, confidence=confidence) except: - traceback.print_exc() + if log_level == "DEBUG": + traceback.print_exc() return diff --git a/lyric_search_new/utils.py b/lyric_search_new/utils.py index e2b0c59..627e6fc 100644 --- a/lyric_search_new/utils.py +++ b/lyric_search_new/utils.py @@ -33,8 +33,6 @@ class TrackMatcher: # Normalize input track input_track = self._normalize_string(input_track) - - print(f"input_track: {input_track}") best_match = None best_score = 0 @@ -64,7 +62,6 @@ class TrackMatcher: """ # Remove special characters and convert to lowercase text = regex.sub(r'[^\w\s-]', '', text).lower() - print(f"Text: {text}") # Normalize spaces text = ' '.join(text.split()) return text @@ -89,7 +86,7 @@ class DataUtils: Data Utils """ def scrub_lyrics(self, lyrics: str) -> str: - # Regex chain + """Regex Chain""" lyrics = regex.sub(r'(\[.*?\])(\s){0,}(\:){0,1}', '', lyrics) lyrics = regex.sub(r'(\d?)(Embed\b)', '', lyrics, flags=regex.IGNORECASE) lyrics = regex.sub(r'\n{2}', '\n', lyrics) # Gaps between verses