aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpukkandan <pukkandan.ytdlp@gmail.com>2021-04-09 17:44:23 +0530
committerpukkandan <pukkandan.ytdlp@gmail.com>2021-04-10 20:57:27 +0530
commit3ffc7c89b001f0b64f812121627229238b84f418 (patch)
treebb49faca634f86ffab9122ae056a63ada9f59a1f
parentf1823403b0fdd965ca584f7cd352a6914b6b6960 (diff)
downloadhypervideo-pre-3ffc7c89b001f0b64f812121627229238b84f418.tar.lz
hypervideo-pre-3ffc7c89b001f0b64f812121627229238b84f418.tar.xz
hypervideo-pre-3ffc7c89b001f0b64f812121627229238b84f418.zip
[youtube] Fix _extract_alerts
* Sometimes one warning is split between multiple runs * Also simplified code
-rw-r--r--yt_dlp/extractor/youtube.py23
1 files changed, 12 insertions, 11 deletions
diff --git a/yt_dlp/extractor/youtube.py b/yt_dlp/extractor/youtube.py
index c3d06b967..67321e6c7 100644
--- a/yt_dlp/extractor/youtube.py
+++ b/yt_dlp/extractor/youtube.py
@@ -3222,25 +3222,26 @@ class YoutubeTabIE(YoutubeBaseInfoExtractor):
alert_type = alert.get('type')
if not alert_type:
continue
- message = try_get(alert, lambda x: x['text']['simpleText'], compat_str)
+ message = try_get(alert, lambda x: x['text']['simpleText'], compat_str) or ''
if message:
yield alert_type, message
for run in try_get(alert, lambda x: x['text']['runs'], list) or []:
- message = try_get(run, lambda x: x['text'], compat_str)
- if message:
- yield alert_type, message
+ message += try_get(run, lambda x: x['text'], compat_str)
+ if message:
+ yield alert_type, message
- err_msg = None
+ errors = []
+ warnings = []
for alert_type, alert_message in _real_extract_alerts():
if alert_type.lower() == 'error':
- if err_msg:
- self._downloader.report_warning('YouTube said: %s - %s' % ('ERROR', err_msg))
- err_msg = alert_message
+ errors.append([alert_type, alert_message])
else:
- self._downloader.report_warning('YouTube said: %s - %s' % (alert_type, alert_message))
+ warnings.append([alert_type, alert_message])
- if err_msg:
- raise ExtractorError('YouTube said: %s' % err_msg, expected=expected)
+ for alert_type, alert_message in (warnings + errors[:-1]):
+ self._downloader.report_warning('YouTube said: %s - %s' % (alert_type, alert_message))
+ if errors:
+ raise ExtractorError('YouTube said: %s' % errors[-1][1], expected=expected)
def _extract_webpage(self, url, item_id):
retries = self._downloader.params.get('extractor_retries', 3)