[utils] Improve performance using functools.cache

Closes #3786
This commit is contained in:
pukkandan 2022-05-19 19:36:31 +05:30
parent 2f97cc615b
commit 0b9c08b47b
No known key found for this signature in database
GPG Key ID: 7EEE9E1E817D0A39
3 changed files with 19 additions and 3 deletions

View File

@ -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)

View File

@ -7,11 +7,12 @@ import sys
import traceback import traceback
from zipimport import zipimporter 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 .utils import Popen, encode_compat_str, write_string
from .version import __version__ from .version import __version__
@functools.cache
def detect_variant(): def detect_variant():
if hasattr(sys, 'frozen'): if hasattr(sys, 'frozen'):
prefix = 'mac' if sys.platform == 'darwin' else 'win' prefix = 'mac' if sys.platform == 'darwin' else 'win'

View File

@ -11,7 +11,6 @@ import datetime
import email.header import email.header
import email.utils import email.utils
import errno import errno
import functools
import gzip import gzip
import hashlib import hashlib
import hmac import hmac
@ -39,8 +38,8 @@ import urllib.parse
import xml.etree.ElementTree import xml.etree.ElementTree
import zlib import zlib
from .compat import asyncio, functools # Modules
from .compat import ( from .compat import (
asyncio,
compat_chr, compat_chr,
compat_cookiejar, compat_cookiejar,
compat_etree_fromstring, 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+)?' NUMBER_RE = r'\d+(?:\.\d+)?'
@functools.cache
def preferredencoding(): def preferredencoding():
"""Get preferred encoding. """Get preferred encoding.
@ -1883,6 +1883,7 @@ def platform_name():
return res return res
@functools.cache
def get_windows_version(): def get_windows_version():
''' Get Windows version. None if it's not running on Windows ''' ''' Get Windows version. None if it's not running on Windows '''
if compat_os_name == 'nt': if compat_os_name == 'nt':
@ -2079,6 +2080,7 @@ class locked_file:
return iter(self.f) return iter(self.f)
@functools.cache
def get_filesystem_encoding(): def get_filesystem_encoding():
encoding = sys.getfilesystemencoding() encoding = sys.getfilesystemencoding()
return encoding if encoding is not None else 'utf-8' return encoding if encoding is not None else 'utf-8'
@ -5092,6 +5094,7 @@ def jwt_decode_hs256(jwt):
return payload_data return payload_data
@functools.cache
def supports_terminal_sequences(stream): def supports_terminal_sequences(stream):
if compat_os_name == 'nt': if compat_os_name == 'nt':
from .compat import WINDOWS_VT_MODE # Must be imported locally from .compat import WINDOWS_VT_MODE # Must be imported locally