aboutsummaryrefslogtreecommitdiff
path: root/yt_dlp/utils/_utils.py
diff options
context:
space:
mode:
authorSimon Sawicki <contact@grub4k.xyz>2024-10-13 05:14:32 +0200
committerGitHub <noreply@github.com>2024-10-13 05:14:32 +0200
commitd710a6ca7c622705c0c8c8a3615916f531137d5d (patch)
treebed5f0544d32fd5c2003666e6de9479c7f1c3179 /yt_dlp/utils/_utils.py
parent85b87c991af25dcb35630fa94580fd418e78ee33 (diff)
Add extractor helpers (#10653)
Authored by: Grub4K
Diffstat (limited to 'yt_dlp/utils/_utils.py')
-rw-r--r--yt_dlp/utils/_utils.py27
1 files changed, 25 insertions, 2 deletions
diff --git a/yt_dlp/utils/_utils.py b/yt_dlp/utils/_utils.py
index 967f01fdf..dd12466b8 100644
--- a/yt_dlp/utils/_utils.py
+++ b/yt_dlp/utils/_utils.py
@@ -1984,11 +1984,30 @@ def urljoin(base, path):
return urllib.parse.urljoin(base, path)
-def int_or_none(v, scale=1, default=None, get_attr=None, invscale=1):
+def partial_application(func):
+ sig = inspect.signature(func)
+
+ @functools.wraps(func)
+ def wrapped(*args, **kwargs):
+ try:
+ sig.bind(*args, **kwargs)
+ except TypeError:
+ return functools.partial(func, *args, **kwargs)
+ else:
+ return func(*args, **kwargs)
+
+ return wrapped
+
+
+@partial_application
+def int_or_none(v, scale=1, default=None, get_attr=None, invscale=1, base=None):
if get_attr and v is not None:
v = getattr(v, get_attr, None)
+ if invscale == 1 and scale < 1:
+ invscale = int(1 / scale)
+ scale = 1
try:
- return int(v) * invscale // scale
+ return (int(v) if base is None else int(v, base=base)) * invscale // scale
except (ValueError, TypeError, OverflowError):
return default
@@ -2006,9 +2025,13 @@ def str_to_int(int_str):
return int_or_none(int_str)
+@partial_application
def float_or_none(v, scale=1, invscale=1, default=None):
if v is None:
return default
+ if invscale == 1 and scale < 1:
+ invscale = int(1 / scale)
+ scale = 1
try:
return float(v) * invscale / scale
except (ValueError, TypeError):