aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpukkandan <pukkandan.ytdlp@gmail.com>2022-06-03 17:25:05 +0530
committerpukkandan <pukkandan.ytdlp@gmail.com>2022-06-03 17:25:20 +0530
commitc4910024f3dbb9798554f02d935d0b0604f51182 (patch)
tree3601e7dfe08dfa907b26aee5afd6abf457cd3215
parentc7a7baaa130099aa283dae1f8e583d14ec540ad3 (diff)
downloadhypervideo-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.py28
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):