From 48e7bb8a36feebbbc5fb18bfc87e947557dbe1c6 Mon Sep 17 00:00:00 2001 From: Atsushi Watanabe Date: Mon, 28 Aug 2023 20:32:20 +0900 Subject: [PATCH 1/4] [extractor/TwitCasting] fix: Use UserNotLive To make --wait-for-video work. --- test/test_download.py | 20 ++++++++++++++++++++ yt_dlp/extractor/twitcasting.py | 6 +++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/test/test_download.py b/test/test_download.py index 6f00a4dedad..d58620897da 100755 --- a/test/test_download.py +++ b/test/test_download.py @@ -31,6 +31,7 @@ DownloadError, ExtractorError, UnavailableVideoError, + YoutubeDLError, format_bytes, join_nonempty, ) @@ -100,6 +101,8 @@ def print_skipping(reason): print_skipping('IE marked as not _WORKING') for tc in test_cases: + if tc.get('expected_exception', None): + continue info_dict = tc.get('info_dict', {}) params = tc.get('params', {}) if not info_dict.get('id'): @@ -139,6 +142,17 @@ def get_tc_filename(tc): res_dict = None + def match_exception(self, err): + expected_exception = test_case.get('expected_exception', None) + if not expected_exception: + return False + if err.__class__.__name__ == expected_exception: + return True + for exc in err.exc_info: + if exc.__class__.__name__ == expected_exception: + return True + return False + def try_rm_tcs_files(tcs=None): if tcs is None: tcs = test_cases @@ -161,6 +175,8 @@ def try_rm_tcs_files(tcs=None): except (DownloadError, ExtractorError) as err: # Check if the exception is not a network related one if not isinstance(err.exc_info[1], (TransportError, UnavailableVideoError)) or (isinstance(err.exc_info[1], HTTPError) and err.exc_info[1].status == 503): + if match_exception(self, err): + return err.msg = f'{getattr(err, "msg", err)} ({tname})' raise @@ -171,6 +187,10 @@ def try_rm_tcs_files(tcs=None): print(f'Retrying: {try_num} failed tries\n\n##########\n\n') try_num += 1 + except YoutubeDLError as err: + if match_exception(self, err): + return + raise else: break diff --git a/yt_dlp/extractor/twitcasting.py b/yt_dlp/extractor/twitcasting.py index dff353a4f9e..1254cb7d143 100644 --- a/yt_dlp/extractor/twitcasting.py +++ b/yt_dlp/extractor/twitcasting.py @@ -7,6 +7,7 @@ from ..utils import ( clean_html, ExtractorError, + UserNotLive, float_or_none, get_element_by_class, get_element_by_id, @@ -235,6 +236,9 @@ class TwitCastingLiveIE(InfoExtractor): _TESTS = [{ 'url': 'https://twitcasting.tv/ivetesangalo', 'only_matching': True, + }, { + 'url': 'https://twitcasting.tv/c:unusedlive', + 'expected_exception': 'UserNotLive', }] def _real_extract(self, url): @@ -260,7 +264,7 @@ def _real_extract(self, url): r'(?s)\d+)"\s*>.+?', webpage, 'current live ID 2', default=None, group='video_id') if not current_live: - raise ExtractorError('The user is not currently live') + raise UserNotLive(video_id=uploader_id) return self.url_result('https://twitcasting.tv/%s/movie/%s' % (uploader_id, current_live)) From e562305a1449dac647ad064e9fc1bcb6cf6a7e08 Mon Sep 17 00:00:00 2001 From: bashonly <88596187+bashonly@users.noreply.github.com> Date: Thu, 21 Sep 2023 22:26:03 +0000 Subject: [PATCH 2/4] Apply suggestions from code review --- test/test_download.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/test_download.py b/test/test_download.py index d58620897da..3a0e1567d1e 100755 --- a/test/test_download.py +++ b/test/test_download.py @@ -101,7 +101,7 @@ def print_skipping(reason): print_skipping('IE marked as not _WORKING') for tc in test_cases: - if tc.get('expected_exception', None): + if tc.get('expected_exception'): continue info_dict = tc.get('info_dict', {}) params = tc.get('params', {}) @@ -142,7 +142,7 @@ def get_tc_filename(tc): res_dict = None - def match_exception(self, err): + def match_exception(err): expected_exception = test_case.get('expected_exception', None) if not expected_exception: return False @@ -175,7 +175,7 @@ def try_rm_tcs_files(tcs=None): except (DownloadError, ExtractorError) as err: # Check if the exception is not a network related one if not isinstance(err.exc_info[1], (TransportError, UnavailableVideoError)) or (isinstance(err.exc_info[1], HTTPError) and err.exc_info[1].status == 503): - if match_exception(self, err): + if match_exception(err): return err.msg = f'{getattr(err, "msg", err)} ({tname})' raise @@ -188,7 +188,7 @@ def try_rm_tcs_files(tcs=None): try_num += 1 except YoutubeDLError as err: - if match_exception(self, err): + if match_exception(err): return raise else: From 9f28897e94a6f43db055b1636c344073f7684f9d Mon Sep 17 00:00:00 2001 From: bashonly <88596187+bashonly@users.noreply.github.com> Date: Thu, 21 Sep 2023 22:26:36 +0000 Subject: [PATCH 3/4] Update yt_dlp/extractor/twitcasting.py --- yt_dlp/extractor/twitcasting.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yt_dlp/extractor/twitcasting.py b/yt_dlp/extractor/twitcasting.py index 1254cb7d143..443802c0970 100644 --- a/yt_dlp/extractor/twitcasting.py +++ b/yt_dlp/extractor/twitcasting.py @@ -5,9 +5,9 @@ from .common import InfoExtractor from ..dependencies import websockets from ..utils import ( - clean_html, ExtractorError, UserNotLive, + clean_html, float_or_none, get_element_by_class, get_element_by_id, From b8037ae2f4c4fa5694c6c5d487c139429f22a414 Mon Sep 17 00:00:00 2001 From: bashonly <88596187+bashonly@users.noreply.github.com> Date: Thu, 21 Sep 2023 22:27:24 +0000 Subject: [PATCH 4/4] Update test/test_download.py --- test/test_download.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_download.py b/test/test_download.py index 3a0e1567d1e..2530792493a 100755 --- a/test/test_download.py +++ b/test/test_download.py @@ -143,7 +143,7 @@ def get_tc_filename(tc): res_dict = None def match_exception(err): - expected_exception = test_case.get('expected_exception', None) + expected_exception = test_case.get('expected_exception') if not expected_exception: return False if err.__class__.__name__ == expected_exception: