1
0
mirror of https://github.com/yt-dlp/yt-dlp.git synced 2025-12-21 07:28:52 +00:00

split and fixes for phantom

This commit is contained in:
c-basalt
2024-12-30 05:41:09 -05:00
parent 6d622d5481
commit 8c6d01f757
3 changed files with 147 additions and 118 deletions

View File

@@ -4,8 +4,14 @@ import abc
import typing
import functools
from ..utils import classproperty, format_field, variadic, ExtractorError
from ..extractor.common import InfoExtractor
from ..utils import (
classproperty,
format_field,
get_exe_version,
variadic,
ExtractorError,
)
_JSI_HANDLERS: dict[str, type[JSI]] = {}
@@ -220,6 +226,22 @@ class JSI(abc.ABC):
return cls.__name__[:-3]
class ExternalJSI(JSI, abc.ABC):
_EXE_NAME: str
@classproperty(cache=True)
def exe_version(cls):
return get_exe_version(cls._EXE_NAME, args=getattr(cls, 'V_ARGS', ['--version']), version_re=r'([0-9.]+)')
@classproperty
def exe(cls):
return cls._EXE_NAME if cls.exe_version else None
@classmethod
def is_available(cls):
return bool(cls.exe)
def register_jsi(jsi_cls: JsiClass) -> JsiClass:
"""Register a JS interpreter class"""
assert issubclass(jsi_cls, JSI), f'{jsi_cls} must be a subclass of JSI'