aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--yt_dlp/YoutubeDL.py4
-rw-r--r--yt_dlp/compat/__init__.py16
-rw-r--r--yt_dlp/compat/_legacy.py7
-rw-r--r--yt_dlp/utils.py19
4 files changed, 27 insertions, 19 deletions
diff --git a/yt_dlp/YoutubeDL.py b/yt_dlp/YoutubeDL.py
index 749cf9402..3dc11463c 100644
--- a/yt_dlp/YoutubeDL.py
+++ b/yt_dlp/YoutubeDL.py
@@ -33,7 +33,6 @@ from .compat import (
compat_str,
compat_urllib_error,
compat_urllib_request,
- windows_enable_vt_mode,
)
from .cookies import load_cookies
from .downloader import FFmpegFD, get_suitable_downloader, shorten_protocol_name
@@ -142,6 +141,7 @@ from .utils import (
url_basename,
variadic,
version_tuple,
+ windows_enable_vt_mode,
write_json_file,
write_string,
)
@@ -3605,7 +3605,7 @@ class YoutubeDL:
def get_encoding(stream):
ret = str(getattr(stream, 'encoding', 'missing (%s)' % type(stream).__name__))
if not supports_terminal_sequences(stream):
- from .compat import WINDOWS_VT_MODE # Must be imported locally
+ from .utils import WINDOWS_VT_MODE # Must be imported locally
ret += ' (No VT)' if WINDOWS_VT_MODE is False else ' (No ANSI)'
return ret
diff --git a/yt_dlp/compat/__init__.py b/yt_dlp/compat/__init__.py
index a0cd62110..c02e843d4 100644
--- a/yt_dlp/compat/__init__.py
+++ b/yt_dlp/compat/__init__.py
@@ -1,6 +1,4 @@
-import contextlib
import os
-import subprocess
import sys
import warnings
import xml.etree.ElementTree as etree
@@ -74,17 +72,3 @@ if compat_os_name in ('nt', 'ce'):
return userhome + path[i:]
else:
compat_expanduser = os.path.expanduser
-
-
-WINDOWS_VT_MODE = False if compat_os_name == 'nt' else None
-
-
-def windows_enable_vt_mode(): # TODO: Do this the proper way https://bugs.python.org/issue30075
- if compat_os_name != 'nt':
- return
- global WINDOWS_VT_MODE
- startupinfo = subprocess.STARTUPINFO()
- startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
- with contextlib.suppress(Exception):
- subprocess.Popen('', shell=True, startupinfo=startupinfo).wait()
- WINDOWS_VT_MODE = True
diff --git a/yt_dlp/compat/_legacy.py b/yt_dlp/compat/_legacy.py
index ce24760e5..c4d95e1fb 100644
--- a/yt_dlp/compat/_legacy.py
+++ b/yt_dlp/compat/_legacy.py
@@ -55,3 +55,10 @@ compat_xml_parse_error = etree.ParseError
compat_xpath = lambda xpath: xpath
compat_zip = zip
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)
diff --git a/yt_dlp/utils.py b/yt_dlp/utils.py
index 0274e330d..78789b1c5 100644
--- a/yt_dlp/utils.py
+++ b/yt_dlp/utils.py
@@ -5094,10 +5094,12 @@ def jwt_decode_hs256(jwt):
return payload_data
+WINDOWS_VT_MODE = False if compat_os_name == 'nt' else None
+
+
@functools.cache
def supports_terminal_sequences(stream):
if compat_os_name == 'nt':
- from .compat import WINDOWS_VT_MODE # Must be imported locally
if not WINDOWS_VT_MODE or get_windows_version() < (10, 0, 10586):
return False
elif not os.getenv('TERM'):
@@ -5108,6 +5110,21 @@ def supports_terminal_sequences(stream):
return False
+def windows_enable_vt_mode(): # TODO: Do this the proper way https://bugs.python.org/issue30075
+ if compat_os_name != 'nt':
+ return
+ global WINDOWS_VT_MODE
+ startupinfo = subprocess.STARTUPINFO()
+ startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
+ try:
+ subprocess.Popen('', shell=True, startupinfo=startupinfo).wait()
+ except Exception:
+ return
+
+ WINDOWS_VT_MODE = True
+ supports_terminal_sequences.cache_clear()
+
+
_terminal_sequences_re = re.compile('\033\\[[^m]+m')