mirror of
https://github.com/yt-dlp/yt-dlp.git
synced 2025-12-08 23:22:49 +01:00
[ie/youtube] Allow ejs patch version to differ (#15263)
Authored by: Grub4K
This commit is contained in:
@@ -1403,6 +1403,9 @@ class TestUtil(unittest.TestCase):
|
|||||||
self.assertEqual(version_tuple('1'), (1,))
|
self.assertEqual(version_tuple('1'), (1,))
|
||||||
self.assertEqual(version_tuple('10.23.344'), (10, 23, 344))
|
self.assertEqual(version_tuple('10.23.344'), (10, 23, 344))
|
||||||
self.assertEqual(version_tuple('10.1-6'), (10, 1, 6)) # avconv style
|
self.assertEqual(version_tuple('10.1-6'), (10, 1, 6)) # avconv style
|
||||||
|
self.assertEqual(version_tuple('invalid', lenient=True), (-1,))
|
||||||
|
self.assertEqual(version_tuple('1.2.3', lenient=True), (1, 2, 3))
|
||||||
|
self.assertEqual(version_tuple('12.34-something', lenient=True), (12, 34, -1))
|
||||||
|
|
||||||
def test_detect_exe_version(self):
|
def test_detect_exe_version(self):
|
||||||
self.assertEqual(detect_exe_version('''ffmpeg version 1.2.1
|
self.assertEqual(detect_exe_version('''ffmpeg version 1.2.1
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ from yt_dlp.extractor.youtube.jsc.provider import (
|
|||||||
)
|
)
|
||||||
from yt_dlp.extractor.youtube.pot._provider import configuration_arg
|
from yt_dlp.extractor.youtube.pot._provider import configuration_arg
|
||||||
from yt_dlp.extractor.youtube.pot.provider import provider_bug_report_message
|
from yt_dlp.extractor.youtube.pot.provider import provider_bug_report_message
|
||||||
|
from yt_dlp.utils import version_tuple
|
||||||
from yt_dlp.utils._jsruntime import JsRuntimeInfo
|
from yt_dlp.utils._jsruntime import JsRuntimeInfo
|
||||||
|
|
||||||
if _has_ejs:
|
if _has_ejs:
|
||||||
@@ -223,7 +224,8 @@ class EJSBaseJCP(JsChallengeProvider):
|
|||||||
skipped_components.append(script)
|
skipped_components.append(script)
|
||||||
continue
|
continue
|
||||||
if not self.is_dev:
|
if not self.is_dev:
|
||||||
if script.version != self._SCRIPT_VERSION:
|
# Matching patch version is expected to have same hash
|
||||||
|
if version_tuple(script.version, lenient=True)[:2] != version_tuple(self._SCRIPT_VERSION, lenient=True)[:2]:
|
||||||
self.logger.warning(
|
self.logger.warning(
|
||||||
f'Challenge solver {script_type.value} script version {script.version} '
|
f'Challenge solver {script_type.value} script version {script.version} '
|
||||||
f'is not supported (source: {script.source.value}, variant: {script.variant}, supported version: {self._SCRIPT_VERSION})')
|
f'is not supported (source: {script.source.value}, variant: {script.variant}, supported version: {self._SCRIPT_VERSION})')
|
||||||
|
|||||||
@@ -6,12 +6,7 @@ import functools
|
|||||||
import os.path
|
import os.path
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from ._utils import _get_exe_version_output, detect_exe_version, int_or_none
|
from ._utils import _get_exe_version_output, detect_exe_version, version_tuple
|
||||||
|
|
||||||
|
|
||||||
def _runtime_version_tuple(v):
|
|
||||||
# NB: will return (0,) if `v` is an invalid version string
|
|
||||||
return tuple(int_or_none(x, default=0) for x in v.split('.'))
|
|
||||||
|
|
||||||
|
|
||||||
_FALLBACK_PATHEXT = ('.COM', '.EXE', '.BAT', '.CMD')
|
_FALLBACK_PATHEXT = ('.COM', '.EXE', '.BAT', '.CMD')
|
||||||
@@ -92,7 +87,7 @@ class DenoJsRuntime(JsRuntime):
|
|||||||
if not out:
|
if not out:
|
||||||
return None
|
return None
|
||||||
version = detect_exe_version(out, r'^deno (\S+)', 'unknown')
|
version = detect_exe_version(out, r'^deno (\S+)', 'unknown')
|
||||||
vt = _runtime_version_tuple(version)
|
vt = version_tuple(version, lenient=True)
|
||||||
return JsRuntimeInfo(
|
return JsRuntimeInfo(
|
||||||
name='deno', path=path, version=version, version_tuple=vt,
|
name='deno', path=path, version=version, version_tuple=vt,
|
||||||
supported=vt >= self.MIN_SUPPORTED_VERSION)
|
supported=vt >= self.MIN_SUPPORTED_VERSION)
|
||||||
@@ -107,7 +102,7 @@ class BunJsRuntime(JsRuntime):
|
|||||||
if not out:
|
if not out:
|
||||||
return None
|
return None
|
||||||
version = detect_exe_version(out, r'^(\S+)', 'unknown')
|
version = detect_exe_version(out, r'^(\S+)', 'unknown')
|
||||||
vt = _runtime_version_tuple(version)
|
vt = version_tuple(version, lenient=True)
|
||||||
return JsRuntimeInfo(
|
return JsRuntimeInfo(
|
||||||
name='bun', path=path, version=version, version_tuple=vt,
|
name='bun', path=path, version=version, version_tuple=vt,
|
||||||
supported=vt >= self.MIN_SUPPORTED_VERSION)
|
supported=vt >= self.MIN_SUPPORTED_VERSION)
|
||||||
@@ -122,7 +117,7 @@ class NodeJsRuntime(JsRuntime):
|
|||||||
if not out:
|
if not out:
|
||||||
return None
|
return None
|
||||||
version = detect_exe_version(out, r'^v(\S+)', 'unknown')
|
version = detect_exe_version(out, r'^v(\S+)', 'unknown')
|
||||||
vt = _runtime_version_tuple(version)
|
vt = version_tuple(version, lenient=True)
|
||||||
return JsRuntimeInfo(
|
return JsRuntimeInfo(
|
||||||
name='node', path=path, version=version, version_tuple=vt,
|
name='node', path=path, version=version, version_tuple=vt,
|
||||||
supported=vt >= self.MIN_SUPPORTED_VERSION)
|
supported=vt >= self.MIN_SUPPORTED_VERSION)
|
||||||
@@ -140,7 +135,7 @@ class QuickJsRuntime(JsRuntime):
|
|||||||
is_ng = 'QuickJS-ng' in out
|
is_ng = 'QuickJS-ng' in out
|
||||||
|
|
||||||
version = detect_exe_version(out, r'^QuickJS(?:-ng)?\s+version\s+(\S+)', 'unknown')
|
version = detect_exe_version(out, r'^QuickJS(?:-ng)?\s+version\s+(\S+)', 'unknown')
|
||||||
vt = _runtime_version_tuple(version.replace('-', '.'))
|
vt = version_tuple(version, lenient=True)
|
||||||
if is_ng:
|
if is_ng:
|
||||||
return JsRuntimeInfo(
|
return JsRuntimeInfo(
|
||||||
name='quickjs-ng', path=path, version=version, version_tuple=vt,
|
name='quickjs-ng', path=path, version=version, version_tuple=vt,
|
||||||
|
|||||||
@@ -2895,8 +2895,9 @@ def limit_length(s, length):
|
|||||||
return s
|
return s
|
||||||
|
|
||||||
|
|
||||||
def version_tuple(v):
|
def version_tuple(v, *, lenient=False):
|
||||||
return tuple(int(e) for e in re.split(r'[-.]', v))
|
parse = int_or_none(default=-1) if lenient else int
|
||||||
|
return tuple(parse(e) for e in re.split(r'[-.]', v))
|
||||||
|
|
||||||
|
|
||||||
def is_outdated_version(version, limit, assume_new=True):
|
def is_outdated_version(version, limit, assume_new=True):
|
||||||
|
|||||||
Reference in New Issue
Block a user