aboutsummaryrefslogtreecommitdiffstats
path: root/yt_dlp/utils.py
diff options
context:
space:
mode:
authorpukkandan <pukkandan.ytdlp@gmail.com>2023-03-04 01:13:05 +0530
committerpukkandan <pukkandan.ytdlp@gmail.com>2023-03-04 01:18:54 +0530
commitfe2ce85aff0aa03735fc0152bb8cb9c3d4ef0753 (patch)
tree4051b33dac3182818d22c97e05a36a9b822a9baf /yt_dlp/utils.py
parentd21056f4cf0a1623daa107f9181074f5725ac436 (diff)
downloadhypervideo-pre-fe2ce85aff0aa03735fc0152bb8cb9c3d4ef0753.tar.lz
hypervideo-pre-fe2ce85aff0aa03735fc0152bb8cb9c3d4ef0753.tar.xz
hypervideo-pre-fe2ce85aff0aa03735fc0152bb8cb9c3d4ef0753.zip
Add option `--break-match-filters`
* Deprecates `--break-on-reject` Closes #5962
Diffstat (limited to 'yt_dlp/utils.py')
-rw-r--r--yt_dlp/utils.py15
1 files changed, 10 insertions, 5 deletions
diff --git a/yt_dlp/utils.py b/yt_dlp/utils.py
index bf2eb6b38..e9b889447 100644
--- a/yt_dlp/utils.py
+++ b/yt_dlp/utils.py
@@ -1230,8 +1230,8 @@ class ExistingVideoReached(DownloadCancelled):
class RejectedVideoReached(DownloadCancelled):
- """ --break-on-reject triggered """
- msg = 'Encountered a video that did not match filter, stopping due to --break-on-reject'
+ """ --break-match-filter triggered """
+ msg = 'Encountered a video that did not match filter, stopping due to --break-match-filter'
class MaxDownloadsReached(DownloadCancelled):
@@ -3911,16 +3911,21 @@ def match_str(filter_str, dct, incomplete=False):
for filter_part in re.split(r'(?<!\\)&', filter_str))
-def match_filter_func(filters):
- if not filters:
+def match_filter_func(filters, breaking_filters=None):
+ if not filters and not breaking_filters:
return None
- filters = set(variadic(filters))
+ breaking_filters = match_filter_func(breaking_filters) or (lambda _, __: None)
+ filters = set(variadic(filters or []))
interactive = '-' in filters
if interactive:
filters.remove('-')
def _match_func(info_dict, incomplete=False):
+ ret = breaking_filters(info_dict, incomplete)
+ if ret is not None:
+ raise RejectedVideoReached(ret)
+
if not filters or any(match_str(f, info_dict, incomplete) for f in filters):
return NO_DEFAULT if interactive and not incomplete else None
else: