Skip to content

Commit

Permalink
Move lru_cache shim to utils.compat
Browse files Browse the repository at this point in the history
  • Loading branch information
uranusjr committed Jul 30, 2020
1 parent 31299ee commit 5789e0f
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 24 deletions.
26 changes: 3 additions & 23 deletions src/pip/_internal/index/collector.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
from pip._internal.models.link import Link
from pip._internal.models.search_scope import SearchScope
from pip._internal.network.utils import raise_for_status
from pip._internal.utils.compat import lru_cache
from pip._internal.utils.filetypes import ARCHIVE_EXTENSIONS
from pip._internal.utils.misc import pairwise, redact_auth_from_url
from pip._internal.utils.typing import MYPY_CHECK_RUNNING
Expand All @@ -31,7 +32,7 @@
from optparse import Values
from typing import (
Callable, Iterable, List, MutableMapping, Optional,
Protocol, Sequence, Tuple, TypeVar, Union,
Sequence, Tuple, Union,
)
import xml.etree.ElementTree

Expand All @@ -42,31 +43,10 @@
HTMLElement = xml.etree.ElementTree.Element
ResponseHeaders = MutableMapping[str, str]

# Used in the @lru_cache polyfill.
F = TypeVar('F')

class LruCache(Protocol):
def __call__(self, maxsize=None):
# type: (Optional[int]) -> Callable[[F], F]
raise NotImplementedError


logger = logging.getLogger(__name__)


# Fallback to noop_lru_cache in Python 2
# TODO: this can be removed when python 2 support is dropped!
def noop_lru_cache(maxsize=None):
# type: (Optional[int]) -> Callable[[F], F]
def _wrapper(f):
# type: (F) -> F
return f
return _wrapper


_lru_cache = getattr(functools, "lru_cache", noop_lru_cache) # type: LruCache


def _match_vcs_scheme(url):
# type: (str) -> Optional[str]
"""Look for VCS schemes in the URL.
Expand Down Expand Up @@ -336,7 +316,7 @@ def with_cached_html_pages(
`page` has `page.cache_link_parsing == False`.
"""

@_lru_cache(maxsize=None)
@lru_cache(maxsize=None)
def wrapper(cacheable_page):
# type: (CacheablePageContent) -> List[Link]
return list(fn(cacheable_page.page))
Expand Down
26 changes: 25 additions & 1 deletion src/pip/_internal/utils/compat.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from __future__ import absolute_import, division

import codecs
import functools
import locale
import logging
import os
Expand All @@ -18,7 +19,17 @@
from pip._internal.utils.typing import MYPY_CHECK_RUNNING

if MYPY_CHECK_RUNNING:
from typing import Optional, Text, Tuple, Union
from typing import (
Callable, Optional, Protocol, Text, Tuple, TypeVar, Union,
)

# Used in the @lru_cache polyfill.
F = TypeVar('F')

class LruCache(Protocol):
def __call__(self, maxsize=None):
# type: (Optional[int]) -> Callable[[F], F]
raise NotImplementedError

try:
import ipaddress
Expand All @@ -34,6 +45,7 @@
__all__ = [
"ipaddress", "uses_pycache", "console_to_str",
"get_path_uid", "stdlib_pkgs", "WINDOWS", "samefile", "get_terminal_size",
"lru_cache",
]


Expand Down Expand Up @@ -269,3 +281,15 @@ def ioctl_GWINSZ(fd):
if not cr:
cr = (os.environ.get('LINES', 25), os.environ.get('COLUMNS', 80))
return int(cr[1]), int(cr[0])


# Fallback to noop_lru_cache in Python 2
def noop_lru_cache(maxsize=None):
# type: (Optional[int]) -> Callable[[F], F]
def _wrapper(f):
# type: (F) -> F
return f
return _wrapper


lru_cache = getattr(functools, "lru_cache", noop_lru_cache) # type: LruCache

0 comments on commit 5789e0f

Please sign in to comment.