mirror of
https://github.com/yt-dlp/yt-dlp
synced 2024-11-16 07:48:01 +01:00
[compat] Fix compat.WINDOWS_VT_MODE
This commit is contained in:
parent
bc40160883
commit
3c5386cd71
3 changed files with 24 additions and 16 deletions
|
@ -26,6 +26,9 @@ class TestCompat(unittest.TestCase):
|
||||||
with self.assertWarns(DeprecationWarning):
|
with self.assertWarns(DeprecationWarning):
|
||||||
compat.compat_basestring
|
compat.compat_basestring
|
||||||
|
|
||||||
|
with self.assertWarns(DeprecationWarning):
|
||||||
|
compat.WINDOWS_VT_MODE
|
||||||
|
|
||||||
compat.asyncio.events # Must not raise error
|
compat.asyncio.events # Must not raise error
|
||||||
|
|
||||||
def test_compat_getenv(self):
|
def test_compat_getenv(self):
|
||||||
|
|
|
@ -14,6 +14,7 @@ import urllib
|
||||||
import xml.etree.ElementTree as etree
|
import xml.etree.ElementTree as etree
|
||||||
from subprocess import DEVNULL
|
from subprocess import DEVNULL
|
||||||
|
|
||||||
|
from .compat_utils import passthrough_module
|
||||||
from .asyncio import run as compat_asyncio_run # noqa: F401
|
from .asyncio import run as compat_asyncio_run # noqa: F401
|
||||||
from .re import Pattern as compat_Pattern # noqa: F401
|
from .re import Pattern as compat_Pattern # noqa: F401
|
||||||
from .re import match as compat_Match # noqa: F401
|
from .re import match as compat_Match # noqa: F401
|
||||||
|
@ -22,6 +23,9 @@ from ..dependencies import brotli as compat_brotli # noqa: F401
|
||||||
from ..dependencies import websockets as compat_websockets # noqa: F401
|
from ..dependencies import websockets as compat_websockets # noqa: F401
|
||||||
|
|
||||||
|
|
||||||
|
passthrough_module(__name__, '...utils', ('WINDOWS_VT_MODE', 'windows_enable_vt_mode'))
|
||||||
|
|
||||||
|
|
||||||
# compat_ctypes_WINFUNCTYPE = ctypes.WINFUNCTYPE
|
# compat_ctypes_WINFUNCTYPE = ctypes.WINFUNCTYPE
|
||||||
# will not work since ctypes.WINFUNCTYPE does not exist in UNIX machines
|
# will not work since ctypes.WINFUNCTYPE does not exist in UNIX machines
|
||||||
def compat_ctypes_WINFUNCTYPE(*args, **kwargs):
|
def compat_ctypes_WINFUNCTYPE(*args, **kwargs):
|
||||||
|
@ -55,10 +59,3 @@ compat_xml_parse_error = etree.ParseError
|
||||||
compat_xpath = lambda xpath: xpath
|
compat_xpath = lambda xpath: xpath
|
||||||
compat_zip = zip
|
compat_zip = zip
|
||||||
workaround_optparse_bug9161 = lambda: None
|
workaround_optparse_bug9161 = lambda: None
|
||||||
|
|
||||||
|
|
||||||
def __getattr__(name):
|
|
||||||
if name in ('WINDOWS_VT_MODE', 'windows_enable_vt_mode'):
|
|
||||||
from .. import utils
|
|
||||||
return getattr(utils, name)
|
|
||||||
raise AttributeError(name)
|
|
||||||
|
|
|
@ -31,7 +31,7 @@ def _is_package(module):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
def passthrough_module(parent, child, *, callback=lambda _: None):
|
def passthrough_module(parent, child, allowed_attributes=None, *, callback=lambda _: None):
|
||||||
parent_module = importlib.import_module(parent)
|
parent_module = importlib.import_module(parent)
|
||||||
child_module = None # Import child module only as needed
|
child_module = None # Import child module only as needed
|
||||||
|
|
||||||
|
@ -41,22 +41,30 @@ def passthrough_module(parent, child, *, callback=lambda _: None):
|
||||||
with contextlib.suppress(ImportError):
|
with contextlib.suppress(ImportError):
|
||||||
return importlib.import_module(f'.{attr}', parent)
|
return importlib.import_module(f'.{attr}', parent)
|
||||||
|
|
||||||
|
ret = self.__from_child(attr)
|
||||||
|
if ret is _NO_ATTRIBUTE:
|
||||||
|
raise AttributeError(f'module {parent} has no attribute {attr}')
|
||||||
|
callback(attr)
|
||||||
|
return ret
|
||||||
|
|
||||||
|
def __from_child(self, attr):
|
||||||
|
if allowed_attributes is None:
|
||||||
|
if attr.startswith('__') and attr.endswith('__'):
|
||||||
|
return _NO_ATTRIBUTE
|
||||||
|
elif attr not in allowed_attributes:
|
||||||
|
return _NO_ATTRIBUTE
|
||||||
|
|
||||||
nonlocal child_module
|
nonlocal child_module
|
||||||
child_module = child_module or importlib.import_module(child, parent)
|
child_module = child_module or importlib.import_module(child, parent)
|
||||||
|
|
||||||
ret = _NO_ATTRIBUTE
|
|
||||||
with contextlib.suppress(AttributeError):
|
with contextlib.suppress(AttributeError):
|
||||||
ret = getattr(child_module, attr)
|
return getattr(child_module, attr)
|
||||||
|
|
||||||
if _is_package(child_module):
|
if _is_package(child_module):
|
||||||
with contextlib.suppress(ImportError):
|
with contextlib.suppress(ImportError):
|
||||||
ret = importlib.import_module(f'.{attr}', child)
|
return importlib.import_module(f'.{attr}', child)
|
||||||
|
|
||||||
if ret is _NO_ATTRIBUTE:
|
return _NO_ATTRIBUTE
|
||||||
raise AttributeError(f'module {parent} has no attribute {attr}')
|
|
||||||
|
|
||||||
callback(attr)
|
|
||||||
return ret
|
|
||||||
|
|
||||||
# Python 3.6 does not have module level __getattr__
|
# Python 3.6 does not have module level __getattr__
|
||||||
# https://peps.python.org/pep-0562/
|
# https://peps.python.org/pep-0562/
|
||||||
|
|
Loading…
Reference in a new issue