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:
@@ -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'
|
||||
|
||||
Reference in New Issue
Block a user