Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Always parse target duration as integer #372

Merged
merged 1 commit into from
Jul 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion m3u8/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -447,7 +447,7 @@ def _parse_byterange(line, state, **kwargs):


def _parse_targetduration(**parse_kwargs):
return _parse_simple_parameter(cast_to=float, **parse_kwargs)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think I understand how this rounds up rather than down?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I understood the problem does not happen when dumps get called. It actually happens when the playlist is parsed. target_duration was indeed being converted to float (as the diff shows)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, I see - in the tests/playlists.py change, you're updating the test data directly.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes! Do you think that’s a bad approach? I changed the test playlist because, after reading the specifications, I believe a playlist should not have a target duration as a float.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it's OK. At first I misunderstood the changes in this PR - I thought the test change was reflecting a new output behavior, but it was changed to reflect what's legal in the spec.

return _parse_simple_parameter(cast_to=int, **parse_kwargs)


def _parse_media_sequence(**parse_kwargs):
Expand Down
2 changes: 1 addition & 1 deletion tests/playlists.py
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@

PLAYLIST_WITH_NON_INTEGER_DURATION = """
#EXTM3U
#EXT-X-TARGETDURATION:5220.5
#EXT-X-TARGETDURATION:5221
#EXTINF:5220.5,
http://media.example.com/entire.ts
"""
Expand Down
2 changes: 1 addition & 1 deletion tests/test_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ def test_should_parse_simple_playlist_from_string():

def test_should_parse_non_integer_duration_from_playlist_string():
data = m3u8.parse(playlists.PLAYLIST_WITH_NON_INTEGER_DURATION)
assert 5220.5 == data["targetduration"]
assert 5221 == data["targetduration"]
assert [5220.5] == [c["duration"] for c in data["segments"]]


Expand Down
Loading