diff options
author | pukkandan <pukkandan.ytdlp@gmail.com> | 2022-06-03 17:25:05 +0530 |
---|---|---|
committer | pukkandan <pukkandan.ytdlp@gmail.com> | 2022-06-03 17:25:20 +0530 |
commit | c4910024f3dbb9798554f02d935d0b0604f51182 (patch) | |
tree | 3601e7dfe08dfa907b26aee5afd6abf457cd3215 | |
parent | c7a7baaa130099aa283dae1f8e583d14ec540ad3 (diff) | |
download | hypervideo-pre-c4910024f3dbb9798554f02d935d0b0604f51182.tar.lz hypervideo-pre-c4910024f3dbb9798554f02d935d0b0604f51182.tar.xz hypervideo-pre-c4910024f3dbb9798554f02d935d0b0604f51182.zip |
[extractor] Fix bug in 617f658b7ec1193749848c1b7343acab125dbc46
While the function signature don't enforce it, some IEs that override
`_download_webpage_handle` assume all optional arguments to be keyword-only
Closes #3954
-rw-r--r-- | yt_dlp/extractor/common.py | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/yt_dlp/extractor/common.py b/yt_dlp/extractor/common.py index 71e982f02..c1a160e82 100644 --- a/yt_dlp/extractor/common.py +++ b/yt_dlp/extractor/common.py @@ -962,16 +962,18 @@ class InfoExtractor: # parser is fetched by name so subclasses can override it return getattr(ie, parser)(content, *args, **kwargs) - def download_handle(self, url_or_request, video_id, note=note, errnote=errnote, - transform_source=None, fatal=True, *args, **kwargs): - res = self._download_webpage_handle(url_or_request, video_id, note, errnote, fatal, *args, **kwargs) + def download_handle(self, url_or_request, video_id, note=note, errnote=errnote, transform_source=None, + fatal=True, encoding=None, data=None, headers={}, query={}, expected_status=None): + res = self._download_webpage_handle( + url_or_request, video_id, note=note, errnote=errnote, fatal=fatal, encoding=encoding, + data=data, headers=headers, query=query, expected_status=expected_status) if res is False: return res content, urlh = res - return parse(self, content, video_id, transform_source, fatal), urlh + return parse(self, content, video_id, transform_source=transform_source, fatal=fatal), urlh def download_content(self, url_or_request, video_id, note=note, errnote=errnote, transform_source=None, - fatal=True, encoding=None, data=None, headers={}, query={}, *args, **kwargs): + fatal=True, encoding=None, data=None, headers={}, query={}, expected_status=None): if self.get_param('load_pages'): url_or_request = self._create_request(url_or_request, data, headers, query) filename = self._request_dump_filename(url_or_request.full_url, video_id) @@ -984,11 +986,21 @@ class InfoExtractor: else: content = self.__decode_webpage(webpage_bytes, encoding, url_or_request.headers) return parse(self, content, video_id, transform_source, fatal) - args = [url_or_request, video_id, note, errnote, transform_source, fatal, encoding, data, headers, query, *args] + kwargs = { + 'note': note, + 'errnote': errnote, + 'transform_source': transform_source, + 'fatal': fatal, + 'encoding': encoding, + 'data': data, + 'headers': headers, + 'query': query, + 'expected_status': expected_status, + } if parser is None: - args.pop(4) # transform_source + kwargs.pop('transform_source') # The method is fetched by name so subclasses can override _download_..._handle - res = getattr(self, download_handle.__name__)(*args, **kwargs) + res = getattr(self, download_handle.__name__)(url_or_request, video_id, **kwargs) return res if res is False else res[0] def impersonate(func, name, return_value): |