]> jfr.im git - yt-dlp.git/commitdiff
[compat] Add `functools.cached_property`
authorpukkandan <redacted>
Fri, 20 May 2022 15:25:21 +0000 (20:55 +0530)
committerpukkandan <redacted>
Fri, 20 May 2022 15:36:37 +0000 (21:06 +0530)
yt_dlp/compat/functools.py
yt_dlp/downloader/common.py
yt_dlp/downloader/external.py
yt_dlp/extractor/common.py
yt_dlp/extractor/youtube.py

index 36c983642df1fa494815ce72ec6de77838e5f9d1..c3c4d8f486af3ffa5ec0a50550ed5d65e241e0f2 100644 (file)
     cache  # >= 3.9
 except NameError:
     cache = lru_cache(maxsize=None)
+
+try:
+    cached_property  # >= 3.8
+except NameError:
+    class cached_property:
+        def __init__(self, func):
+            update_wrapper(self, func)
+            self.func = func
+
+        def __get__(self, instance, _):
+            setattr(instance, self.func.__name__, self.func(instance))
+            return getattr(instance, self.func.__name__)
index 276675532f97eabd3cb768f595bef8902b260d22..d74692130db68eec96342b46bd87a2ba3bf7cff1 100644 (file)
@@ -11,6 +11,7 @@
     MultilinePrinter,
     QuietMultilinePrinter,
 )
+from ..compat import functools
 from ..utils import (
     NUMBER_RE,
     LockingUnsupportedError,
@@ -102,7 +103,7 @@ def to_screen(self, *args, **kargs):
 
     __to_screen = to_screen
 
-    @property
+    @functools.cached_property
     def FD_NAME(self):
         return re.sub(r'(?<!^)(?=[A-Z])', '_', type(self).__name__[:-2]).lower()
 
index 812eb45b437b84aaad96ea071772d7a52a79f826..a9da966709a7856ef4ea81eb4bc6aeae4658d11f 100644 (file)
@@ -5,6 +5,7 @@
 import time
 
 from .fragment import FragmentFD
+from ..compat import functools
 from ..compat import compat_setenv, compat_str
 from ..postprocessor.ffmpeg import EXT_TO_OUT_FORMATS, FFmpegPostProcessor
 from ..utils import (
@@ -74,7 +75,7 @@ def get_basename(cls):
     def EXE_NAME(cls):
         return cls.get_basename()
 
-    @property
+    @functools.cached_property
     def exe(self):
         return self.EXE_NAME
 
index 6a451c20bba2c8e65ae9f483d7a8ff16ea5e1342..d222fa7efde9698868ff2f3ce8d533f6c0cc4fa9 100644 (file)
@@ -11,6 +11,7 @@
 import time
 import xml.etree.ElementTree
 
+from ..compat import functools, re
 from ..compat import (
     compat_cookiejar_Cookie,
     compat_cookies_SimpleCookie,
@@ -25,7 +26,6 @@
     compat_urllib_parse_urlencode,
     compat_urllib_request,
     compat_urlparse,
-    re,
 )
 from ..downloader import FileDownloader
 from ..downloader.f4m import get_base_url, remove_encrypted_media
@@ -3748,7 +3748,7 @@ def extract_automatic_captions(self, *args, **kwargs):
     def _get_automatic_captions(self, *args, **kwargs):
         raise NotImplementedError('This method must be implemented by subclasses')
 
-    @property
+    @functools.cached_property
     def _cookies_passed(self):
         """Whether cookies have been passed to YoutubeDL"""
         return self.get_param('cookiefile') is not None or self.get_param('cookiesfrombrowser') is not None
index 5546aa9a34f196f45071511c10fdc353a05625b5..3f68861315895ad28a4c4b12dfe2608dc9b9d1ef 100644 (file)
@@ -2,7 +2,6 @@
 import calendar
 import copy
 import datetime
-import functools
 import hashlib
 import itertools
 import json
@@ -16,6 +15,7 @@
 import traceback
 
 from .common import InfoExtractor, SearchInfoExtractor
+from ..compat import functools
 from ..compat import (
     compat_chr,
     compat_HTTPError,
@@ -534,7 +534,7 @@ def _extract_visitor_data(*args):
             args, [('VISITOR_DATA', ('INNERTUBE_CONTEXT', 'client', 'visitorData'), ('responseContext', 'visitorData'))],
             expected_type=str)
 
-    @property
+    @functools.cached_property
     def is_authenticated(self):
         return bool(self._generate_sapisidhash_header())
 
@@ -4402,7 +4402,7 @@ def _reload_with_unavailable_videos(self, item_id, data, ytcfg):
             check_get_keys='contents', fatal=False, ytcfg=ytcfg,
             note='Downloading API JSON with unavailable videos')
 
-    @property
+    @functools.cached_property
     def skip_webpage(self):
         return 'webpage' in self._configuration_arg('skip', ie_key=YoutubeTabIE.ie_key())