|
3 | 3 | # license that can be found in the LICENSE file. |
4 | 4 | import decimal |
5 | 5 | import os |
| 6 | +from typing import TypeVar |
6 | 7 |
|
7 | 8 | from m3u8.mixins import BasePathMixin, GroupedBasePathMixin |
8 | 9 | from m3u8.parser import format_date_time, parse |
@@ -449,7 +450,10 @@ def _create_sub_directories(self, filename): |
449 | 450 | os.makedirs(basename, exist_ok=True) |
450 | 451 |
|
451 | 452 |
|
452 | | -class TagList(list): |
| 453 | +T = TypeVar("T") |
| 454 | + |
| 455 | + |
| 456 | +class TagList(list[T]): |
453 | 457 | def __str__(self): |
454 | 458 | output = [str(tag) for tag in self] |
455 | 459 | return "\n".join(output) |
@@ -712,7 +716,7 @@ def base_uri(self, newbase_uri): |
712 | 716 | self.init_section.base_uri = newbase_uri |
713 | 717 |
|
714 | 718 |
|
715 | | -class SegmentList(list, GroupedBasePathMixin): |
| 719 | +class SegmentList(list[Segment], GroupedBasePathMixin): |
716 | 720 | def dumps(self, timespec="milliseconds", infspec="auto"): |
717 | 721 | output = [] |
718 | 722 | last_segment = None |
@@ -827,7 +831,7 @@ def __str__(self): |
827 | 831 | return self.dumps(None) |
828 | 832 |
|
829 | 833 |
|
830 | | -class PartialSegmentList(list, GroupedBasePathMixin): |
| 834 | +class PartialSegmentList(list[PartialSegment], GroupedBasePathMixin): |
831 | 835 | def __str__(self): |
832 | 836 | output = [str(part) for part in self] |
833 | 837 | return "\n".join(output) |
@@ -1015,7 +1019,7 @@ def __str__(self): |
1015 | 1019 | return "#EXT-X-STREAM-INF:" + ",".join(stream_inf) + "\n" + self.uri |
1016 | 1020 |
|
1017 | 1021 |
|
1018 | | -class PlaylistList(TagList, GroupedBasePathMixin): |
| 1022 | +class PlaylistList(TagList[Playlist], GroupedBasePathMixin): |
1019 | 1023 | pass |
1020 | 1024 |
|
1021 | 1025 |
|
@@ -1270,7 +1274,7 @@ def __str__(self): |
1270 | 1274 | return self.dumps() |
1271 | 1275 |
|
1272 | 1276 |
|
1273 | | -class MediaList(TagList, GroupedBasePathMixin): |
| 1277 | +class MediaList(TagList[Media], GroupedBasePathMixin): |
1274 | 1278 | @property |
1275 | 1279 | def uri(self): |
1276 | 1280 | return [media.uri for media in self] |
@@ -1310,7 +1314,7 @@ def __str__(self): |
1310 | 1314 | return self.dumps() |
1311 | 1315 |
|
1312 | 1316 |
|
1313 | | -class RenditionReportList(list, GroupedBasePathMixin): |
| 1317 | +class RenditionReportList(list[RenditionReport], GroupedBasePathMixin): |
1314 | 1318 | def __str__(self): |
1315 | 1319 | output = [str(report) for report in self] |
1316 | 1320 | return "\n".join(output) |
@@ -1439,7 +1443,7 @@ def __str__(self): |
1439 | 1443 | return self.dumps() |
1440 | 1444 |
|
1441 | 1445 |
|
1442 | | -class SessionDataList(TagList): |
| 1446 | +class SessionDataList(TagList[SessionData]): |
1443 | 1447 | pass |
1444 | 1448 |
|
1445 | 1449 |
|
@@ -1498,7 +1502,7 @@ def __str__(self): |
1498 | 1502 | return self.dumps() |
1499 | 1503 |
|
1500 | 1504 |
|
1501 | | -class DateRangeList(TagList): |
| 1505 | +class DateRangeList(TagList[DateRange]): |
1502 | 1506 | pass |
1503 | 1507 |
|
1504 | 1508 |
|
|
0 commit comments