aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--devscripts/changelog_override.json5
-rw-r--r--test/test_execution.py3
-rw-r--r--yt_dlp/YoutubeDL.py16
-rw-r--r--yt_dlp/update.py25
4 files changed, 37 insertions, 12 deletions
diff --git a/devscripts/changelog_override.json b/devscripts/changelog_override.json
index e7f453acf..9dfbf510f 100644
--- a/devscripts/changelog_override.json
+++ b/devscripts/changelog_override.json
@@ -88,5 +88,10 @@
"when": "59e92b1f1833440bb2190f847eb735cf0f90bc85",
"short": "[rh:urllib] Simplify gzip decoding (#7611)",
"authors": ["Grub4K"]
+ },
+ {
+ "action": "add",
+ "when": "c1d71d0d9f41db5e4306c86af232f5f6220a130b",
+ "short": "[priority] **The minimum *recommended* Python version has been raised to 3.8**\nSince Python 3.7 has reached end-of-life, support for it will be dropped soon. [Read more](https://github.com/yt-dlp/yt-dlp/issues/7803)"
}
]
diff --git a/test/test_execution.py b/test/test_execution.py
index 7a9e800b6..fb2f6e2e9 100644
--- a/test/test_execution.py
+++ b/test/test_execution.py
@@ -45,6 +45,9 @@ class TestExecution(unittest.TestCase):
self.assertTrue(os.path.exists(LAZY_EXTRACTORS))
_, stderr = self.run_yt_dlp(opts=('-s', 'test:'))
+ # `MIN_RECOMMENDED` emits a deprecated feature warning for deprecated python versions
+ if stderr and stderr.startswith('Deprecated Feature: Support for Python'):
+ stderr = ''
self.assertFalse(stderr)
subprocess.check_call([sys.executable, 'test/test_all_urls.py'], cwd=rootDir, stdout=subprocess.DEVNULL)
diff --git a/yt_dlp/YoutubeDL.py b/yt_dlp/YoutubeDL.py
index 39aaf2c2e..f322b12a2 100644
--- a/yt_dlp/YoutubeDL.py
+++ b/yt_dlp/YoutubeDL.py
@@ -60,7 +60,7 @@ from .postprocessor import (
get_postprocessor,
)
from .postprocessor.ffmpeg import resolve_mapping as resolve_recode_mapping
-from .update import REPOSITORY, current_git_head, detect_variant
+from .update import REPOSITORY, _get_system_deprecation, current_git_head, detect_variant
from .utils import (
DEFAULT_OUTTMPL,
IDENTITY,
@@ -640,17 +640,9 @@ class YoutubeDL:
for name, stream in self._out_files.items_ if name != 'console'
})
- # The code is left like this to be reused for future deprecations
- MIN_SUPPORTED, MIN_RECOMMENDED = (3, 7), (3, 7)
- current_version = sys.version_info[:2]
- if current_version < MIN_RECOMMENDED:
- msg = ('Support for Python version %d.%d has been deprecated. '
- 'See https://github.com/yt-dlp/yt-dlp/issues/3764 for more details.'
- '\n You will no longer receive updates on this version')
- if current_version < MIN_SUPPORTED:
- msg = 'Python version %d.%d is no longer supported'
- self.deprecated_feature(
- f'{msg}! Please update to Python %d.%d or above' % (*current_version, *MIN_RECOMMENDED))
+ system_deprecation = _get_system_deprecation()
+ if system_deprecation:
+ self.deprecated_feature(system_deprecation.replace('\n', '\n '))
if self.params.get('allow_unplayable_formats'):
self.report_warning(
diff --git a/yt_dlp/update.py b/yt_dlp/update.py
index d708b09e3..db79df127 100644
--- a/yt_dlp/update.py
+++ b/yt_dlp/update.py
@@ -112,6 +112,31 @@ def is_non_updateable():
detect_variant(), _NON_UPDATEABLE_REASONS['unknown' if VARIANT else 'other'])
+def _get_system_deprecation():
+ MIN_SUPPORTED, MIN_RECOMMENDED = (3, 7), (3, 8)
+
+ if sys.version_info > MIN_RECOMMENDED:
+ return None
+
+ major, minor = sys.version_info[:2]
+ if sys.version_info < MIN_SUPPORTED:
+ msg = f'Python version {major}.{minor} is no longer supported'
+ else:
+ msg = f'Support for Python version {major}.{minor} has been deprecated. '
+ # Temporary until `win_x86_exe` uses 3.8, which will deprecate Vista and Server 2008
+ if detect_variant() == 'win_x86_exe':
+ platform_name = platform.platform()
+ if any(platform_name.startswith(f'Windows-{name}') for name in ('Vista', '2008Server')):
+ msg = 'Support for Windows Vista/Server 2008 has been deprecated. '
+ else:
+ return None
+ msg += ('See https://github.com/yt-dlp/yt-dlp/issues/7803 for details.'
+ '\nYou may stop receiving updates on this version at any time')
+
+ major, minor = MIN_RECOMMENDED
+ return f'{msg}! Please update to Python {major}.{minor} or above'
+
+
def _sha256_file(path):
h = hashlib.sha256()
mv = memoryview(bytearray(128 * 1024))