aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--yt_dlp/compat/functools.py12
-rw-r--r--yt_dlp/update.py3
-rw-r--r--yt_dlp/utils.py7
3 files changed, 19 insertions, 3 deletions
diff --git a/yt_dlp/compat/functools.py b/yt_dlp/compat/functools.py
new file mode 100644
index 000000000..36c983642
--- /dev/null
+++ b/yt_dlp/compat/functools.py
@@ -0,0 +1,12 @@
+# flake8: noqa: F405
+from functools import * # noqa: F403
+
+from .compat_utils import passthrough_module
+
+passthrough_module(__name__, 'functools')
+del passthrough_module
+
+try:
+ cache # >= 3.9
+except NameError:
+ cache = lru_cache(maxsize=None)
diff --git a/yt_dlp/update.py b/yt_dlp/update.py
index 8dcf260f5..d627ae269 100644
--- a/yt_dlp/update.py
+++ b/yt_dlp/update.py
@@ -7,11 +7,12 @@ import sys
import traceback
from zipimport import zipimporter
-from .compat import compat_realpath
+from .compat import compat_realpath, functools
from .utils import Popen, encode_compat_str, write_string
from .version import __version__
+@functools.cache
def detect_variant():
if hasattr(sys, 'frozen'):
prefix = 'mac' if sys.platform == 'darwin' else 'win'
diff --git a/yt_dlp/utils.py b/yt_dlp/utils.py
index 41157f5de..0274e330d 100644
--- a/yt_dlp/utils.py
+++ b/yt_dlp/utils.py
@@ -11,7 +11,6 @@ import datetime
import email.header
import email.utils
import errno
-import functools
import gzip
import hashlib
import hmac
@@ -39,8 +38,8 @@ import urllib.parse
import xml.etree.ElementTree
import zlib
+from .compat import asyncio, functools # Modules
from .compat import (
- asyncio,
compat_chr,
compat_cookiejar,
compat_etree_fromstring,
@@ -248,6 +247,7 @@ JSON_LD_RE = r'(?is)<script[^>]+type=(["\']?)application/ld\+json\1[^>]*>(?P<jso
NUMBER_RE = r'\d+(?:\.\d+)?'
+@functools.cache
def preferredencoding():
"""Get preferred encoding.
@@ -1883,6 +1883,7 @@ def platform_name():
return res
+@functools.cache
def get_windows_version():
''' Get Windows version. None if it's not running on Windows '''
if compat_os_name == 'nt':
@@ -2079,6 +2080,7 @@ class locked_file:
return iter(self.f)
+@functools.cache
def get_filesystem_encoding():
encoding = sys.getfilesystemencoding()
return encoding if encoding is not None else 'utf-8'
@@ -5092,6 +5094,7 @@ def jwt_decode_hs256(jwt):
return payload_data
+@functools.cache
def supports_terminal_sequences(stream):
if compat_os_name == 'nt':
from .compat import WINDOWS_VT_MODE # Must be imported locally