From f8aba35a1ac44461191b0aa66e440cb5dc2a2c9b Mon Sep 17 00:00:00 2001 From: Hudson Brendon Date: Sun, 12 Jan 2025 21:16:59 -0300 Subject: [PATCH] refactor method matcher_lyrics_get --- pymusixmatch/musixmatch.py | 74 +++++--------------------------------- tests/conftest.py | 23 ++++++++++++ tests/test_musixmatch.py | 41 +++------------------ 3 files changed, 37 insertions(+), 101 deletions(-) diff --git a/pymusixmatch/musixmatch.py b/pymusixmatch/musixmatch.py index dea2af8..926df99 100644 --- a/pymusixmatch/musixmatch.py +++ b/pymusixmatch/musixmatch.py @@ -340,68 +340,12 @@ def track_richsync_get( ) return data - def track_lyrics_post(self, track_id, lyrics_body, _format="json"): - """Submit a lyrics to our database. - - It may happen we don’t have the lyrics for a song, - you can ask your users to help us sending the missing - lyrics. We’ll validate every submission and in case, make - it available through our api. - - Please take all the necessary precautions to avoid users - or automatic software to use your website/app to use this - commands, a captcha solution like http://www.google.com/recaptcha - or an equivalent one has to be implemented in every user - interaction that ends in a POST operation on the musixmatch api. - - Parameters: - - track_id - A valid country code (default US) - lyrics_body - The lyrics - formatDecide the output type json or xml (default json) - """ - data = self._request( - self._get_url( - "track.lyrics.post?track_id={}" "&lyrics_body={}&format={}".format( - track_id, lyrics_body, _format - ), - ), - ) - return data - - def track_lyrics_feedback_post(self, track_id, lyrics_id, feedback, _format="json"): - """This API method provides you the opportunity to help - us improving our catalogue. - - We aim to provide you with the best quality service imaginable, - so we are especially interested in your detailed feedback to help - us to continually improve it. - - Please take all the necessary precautions to avoid users or - automatic software to use your website/app to use this commands, - a captcha solution like http://www.google.com/recaptcha or an - equivalent one has to be implemented in every user interaction that - ends in a POST operation on the musixmatch api. - - Parameters: - - lyrics_id - The musiXmatch lyrics id. - track_id - The musiXmatch track id. - feedback - The feedback to be reported, possible values are: - wrong_lyrics, wrong_attribution, bad_characters, - lines_too_long, wrong_verses, wrong_formatting - format - Decide the output type json or xml (default json) - """ - data = self._request( - self._get_url( - "track.lyrics.feedback.post?" - "track_id={}&lyrics_id={}" - "&feedback={}&format={}".format(track_id, lyrics_id, feedback, _format), - ), - ) - return data - - def matcher_lyrics_get(self, q_track, q_artist, _format="json"): + def matcher_lyrics_get( + self, + q_track: str, + q_artist: str, + track_isrc: Optional[str] = "", + ) -> dict: """Get the lyrics for track based on title and artist. Parameters: @@ -410,12 +354,12 @@ def matcher_lyrics_get(self, q_track, q_artist, _format="json"): q_artist - The song artist track_isrc - If you have an available isrc id in your catalogue you can query using this id only (optional) - format - Decide the output type json or xml (default json) + track_isrc - If you have an available musicbrainz recording id """ data = self._request( self._get_url( - "matcher.lyrics.get?" "q_track={}&q_artist={}&format={}".format( - q_track, q_artist, _format + "matcher.lyrics.get?" "q_track={}&q_artist={}&track_isrc={}".format( + q_track, q_artist, track_isrc ), ), ) diff --git a/tests/conftest.py b/tests/conftest.py index 3f34d61..600c6fa 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -155,3 +155,26 @@ def track_subtitle_get() -> dict: }, } } + + +@pytest.fixture +def matcher_lyrics_get() -> dict: + return { + "message": { + "header": {"status_code": 200, "execute_time": 0.19601988792419}, + "body": { + "lyrics": { + "lyrics_id": 6471198, + "restricted": 0, + "instrumental": 0, + "lyrics_body": "When I walk on by, girls be looking like damn he fly\r\nI pay to the beat, walking on the street with in my new lafreak, yeah", + "lyrics_language": "en", + "script_tracking_url": "http:\/\/tracking.musixmatch.com\/t1.0\/5RIyfJ3c", + "pixel_tracking_url": "http:\/\/tracking.musixmatch.com\/t1.0\/5RIyfJ/", + "html_tracking_url": "http:\/\/tracking.musixmatch.com\/t1.0\/5RIyfJ3cC39", + "lyrics_copyright": "Lyrics powered by www.musiXmatch.com", + "updated_time": "2011-06-30T13:31:20Z", + } + }, + } + } diff --git a/tests/test_musixmatch.py b/tests/test_musixmatch.py index 0f8d800..c5dad1b 100644 --- a/tests/test_musixmatch.py +++ b/tests/test_musixmatch.py @@ -169,42 +169,11 @@ def test_track_richsync_get(self, requests_mock, track_richsync_get: dict) -> No request = self.musixmatch.track_richsync_get(114837357) assert track_richsync_get == request - @pytest.mark.skip("Refactor test") - def test_track_lyrics_post(self): - self.assertEqual( - self.musixmatch.track_lyrics_post(1471157, "test")["message"]["header"][ - "status_code" - ], - 200, - ) - self.assertEqual( - self.musixmatch.track_lyrics_post(1471157, "test")["message"]["body"], - "", - ) - - @pytest.mark.skip("Refactor test") - def test_track_lyrics_feedback_post(self): - self.assertEqual( - self.musixmatch.track_lyrics_post(1471157, 4193713, "wrong_verses")[ - "message" - ]["body"], - "", - ) - - @pytest.mark.skip("Refactor test") - def test_matcher_lyrics_get(self): - self.assertEqual( - self.musixmatch.matcher_lyrics_get("Sexy and I know it", "LMFAO")[ - "message" - ]["body"]["lyrics"]["lyrics_language_description"], - "English", - ) - self.assertEqual( - self.musixmatch.matcher_lyrics_get("Sexy and I know it", "LMFAO")[ - "message" - ]["body"]["lyrics"]["lyrics_language"], - "en", - ) + def test_matcher_lyrics_get(self, requests_mock, matcher_lyrics_get) -> None: + url = "https://api.musixmatch.com/ws/1.1/matcher.lyrics.get?q_track=Let%20Me%20Love%20You&q_artist=justinbieber" + requests_mock.get(url=url, json=matcher_lyrics_get) + request = self.musixmatch.matcher_lyrics_get("Let Me Love You", "justinbieber") + assert matcher_lyrics_get == request @pytest.mark.skip("Refactor test") def test_matcher_track_get(self):