From a250b247334ce9f641e709cbb64974da6034a2b3 Mon Sep 17 00:00:00 2001 From: pukkandan Date: Sat, 22 Jul 2023 17:56:53 +0530 Subject: [PATCH] [compat] Ensure submodules are imported correctly Closes #7663 --- test/test_compat.py | 6 +++--- yt_dlp/compat/__init__.py | 7 ++----- yt_dlp/compat/_deprecated.py | 8 ++++++++ yt_dlp/compat/urllib/__init__.py | 3 +++ yt_dlp/utils/__init__.py | 6 ++---- 5 files changed, 18 insertions(+), 12 deletions(-) diff --git a/test/test_compat.py b/test/test_compat.py index 003a97abf73..71ca7f99f10 100644 --- a/test/test_compat.py +++ b/test/test_compat.py @@ -9,15 +9,16 @@ import struct -import urllib.parse from yt_dlp import compat +from yt_dlp.compat import urllib # isort: split from yt_dlp.compat import ( compat_etree_fromstring, compat_expanduser, compat_urllib_parse_unquote, compat_urllib_parse_urlencode, ) +from yt_dlp.compat.urllib.request import getproxies class TestCompat(unittest.TestCase): @@ -28,8 +29,7 @@ def test_compat_passthrough(self): with self.assertWarns(DeprecationWarning): compat.WINDOWS_VT_MODE - # TODO: Test submodule - # compat.asyncio.events # Must not raise error + self.assertEqual(urllib.request.getproxies, getproxies) with self.assertWarns(DeprecationWarning): compat.compat_pycrypto_AES # Must not raise error diff --git a/yt_dlp/compat/__init__.py b/yt_dlp/compat/__init__.py index a41a80ebb6c..832a9138d39 100644 --- a/yt_dlp/compat/__init__.py +++ b/yt_dlp/compat/__init__.py @@ -1,14 +1,11 @@ import os import sys -import warnings import xml.etree.ElementTree as etree -from ._deprecated import * # noqa: F401, F403 from .compat_utils import passthrough_module -# XXX: Implement this the same way as other DeprecationWarnings without circular import -passthrough_module(__name__, '._legacy', callback=lambda attr: warnings.warn( - DeprecationWarning(f'{__name__}.{attr} is deprecated'), stacklevel=5)) +passthrough_module(__name__, '._deprecated') +del passthrough_module # HTMLParseError has been deprecated in Python 3.3 and removed in diff --git a/yt_dlp/compat/_deprecated.py b/yt_dlp/compat/_deprecated.py index 14d37b23672..607bae99999 100644 --- a/yt_dlp/compat/_deprecated.py +++ b/yt_dlp/compat/_deprecated.py @@ -1,4 +1,12 @@ """Deprecated - New code should avoid these""" +import warnings + +from .compat_utils import passthrough_module + +# XXX: Implement this the same way as other DeprecationWarnings without circular import +passthrough_module(__name__, '.._legacy', callback=lambda attr: warnings.warn( + DeprecationWarning(f'{__name__}.{attr} is deprecated'), stacklevel=6)) +del passthrough_module import base64 import urllib.error diff --git a/yt_dlp/compat/urllib/__init__.py b/yt_dlp/compat/urllib/__init__.py index 6b6b8e103df..b27cc6133c4 100644 --- a/yt_dlp/compat/urllib/__init__.py +++ b/yt_dlp/compat/urllib/__init__.py @@ -1,6 +1,9 @@ # flake8: noqa: F405 from urllib import * # noqa: F403 +del request +from . import request # noqa: F401 + from ..compat_utils import passthrough_module passthrough_module(__name__, 'urllib') diff --git a/yt_dlp/utils/__init__.py b/yt_dlp/utils/__init__.py index 0b00adddb4e..c267e326f06 100644 --- a/yt_dlp/utils/__init__.py +++ b/yt_dlp/utils/__init__.py @@ -1,6 +1,4 @@ -# flake8: noqa: F401, F403 -import warnings - +# flake8: noqa: F403 from ..compat.compat_utils import passthrough_module passthrough_module(__name__, '._deprecated') @@ -9,4 +7,4 @@ # isort: off from .traversal import * from ._utils import * -from ._utils import _configuration_args, _get_exe_version_output +from ._utils import _configuration_args, _get_exe_version_output # noqa: F401