[utils] Support traversal helper functions require, value, unpack

Thx: yt-dlp/yt-dlp#10653
This commit is contained in:
dirkf
2025-10-31 13:36:55 +00:00
parent 96419fa706
commit 68fe8c1781
3 changed files with 63 additions and 4 deletions

View File

@@ -5,6 +5,9 @@
from .utils import (
dict_get,
get_first,
require,
T,
traverse_obj,
unpack,
value,
)

View File

@@ -6543,6 +6543,31 @@ def traverse_obj(obj, *paths, **kwargs):
return None if default is NO_DEFAULT else default
def value(value):
return lambda _: value
class require(ExtractorError):
def __init__(self, name, expected=False):
super(require, self).__init__(
'Unable to extract {0}'.format(name), expected=expected)
def __call__(self, value):
if value is None:
raise self
return value
def unpack(func, **kwargs):
"""Make a function that applies `partial(func, **kwargs)` to its argument as *args"""
@functools.wraps(func)
def inner(items):
return func(*items, **kwargs)
return inner
def T(*x):
""" For use in yt-dl instead of {type, ...} or set((type, ...)) """
return set(x)