From 8f479b1b5bae0101655160fd332384c136055cd6 Mon Sep 17 00:00:00 2001 From: Abhishek M J <85760664+abhishekmj303@users.noreply.github.com> Date: Tue, 15 Oct 2024 20:28:31 +0530 Subject: [PATCH] Fix duration parsing for very long videos (#661) * Fix duration parsing for very long videos sigma67#660 * parse duration only when digits are present * explicit return None * Add test for track dur > 1k hrs --- tests/mixins/test_playlists.py | 1 + ytmusicapi/parsers/_utils.py | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/tests/mixins/test_playlists.py b/tests/mixins/test_playlists.py index b7ed2dc2..20dc627c 100644 --- a/tests/mixins/test_playlists.py +++ b/tests/mixins/test_playlists.py @@ -49,6 +49,7 @@ def test_get_playlist_2024(self, yt, test_file, owned): ("PLj4BSJLnVpNyIjbCWXWNAmybc97FXLlTk", 200, 0), # no related tracks ("PL6bPxvf5dW5clc3y9wAoslzqUrmkZ5c-u", 1000, 10), # very large ("PLZ6Ih9wLHQ2Hm2d3Cb0iV48Z2hQjGRyNz", 300, 10), # runs in subtitle, not title + ("PL5ZNf-B8WWSZFIvpJWRjgt7iRqWT7_KF1", 10, 10), # track duration > 1k hours ], ) def test_get_playlist_foreign(self, yt_oauth, playlist_id, tracks_len, related_len): diff --git a/ytmusicapi/parsers/_utils.py b/ytmusicapi/parsers/_utils.py index 1131dd54..4df215b5 100644 --- a/ytmusicapi/parsers/_utils.py +++ b/ytmusicapi/parsers/_utils.py @@ -67,7 +67,11 @@ def parse_duration(duration): # duration may be falsy or a single space: ' ' if not duration or not duration.strip(): return duration - mapped_increments = zip([1, 60, 3600], reversed(duration.split(":"))) + duration_split = duration.strip().split(":") + for d in duration_split: + if not d.isdigit(): # For e.g: "2,343" + return None + mapped_increments = zip([1, 60, 3600], reversed(duration_split)) seconds = sum(multiplier * int(time) for multiplier, time in mapped_increments) return seconds