Skip to content

Commit

Permalink
Fix duration parsing for very long videos (#661)
Browse files Browse the repository at this point in the history
* Fix duration parsing for very long videos #660

* parse duration only when digits are present

* explicit return None

* Add test for track dur > 1k hrs
  • Loading branch information
abhishekmj303 authored Oct 15, 2024
1 parent 2b5d19a commit 8f479b1
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 1 deletion.
1 change: 1 addition & 0 deletions tests/mixins/test_playlists.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down
6 changes: 5 additions & 1 deletion ytmusicapi/parsers/_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down

0 comments on commit 8f479b1

Please sign in to comment.