From 5150129f6bad206cdf24f9315fb7405506ecb5c3 Mon Sep 17 00:00:00 2001 From: Jon Dufresne Date: Mon, 28 Dec 2020 21:46:53 -0800 Subject: [PATCH] Replace compat.expanduser() with os.path.expanduser() The upstream bug has been fixed and released in all supported Python version: https://bugs.python.org/issue14768 --- ...fc-938e-457b-ae6e-0905e7443b2f.trivial.rst | 0 src/pip/_internal/configuration.py | 4 ++-- src/pip/_internal/utils/compat.py | 13 ------------ src/pip/_internal/utils/misc.py | 4 ++-- tests/unit/test_collector.py | 2 +- tests/unit/test_compat.py | 20 +------------------ 6 files changed, 6 insertions(+), 37 deletions(-) create mode 100644 news/7edb0afc-938e-457b-ae6e-0905e7443b2f.trivial.rst diff --git a/news/7edb0afc-938e-457b-ae6e-0905e7443b2f.trivial.rst b/news/7edb0afc-938e-457b-ae6e-0905e7443b2f.trivial.rst new file mode 100644 index 000000000..e69de29bb diff --git a/src/pip/_internal/configuration.py b/src/pip/_internal/configuration.py index 559c198c7..9d9a36e80 100644 --- a/src/pip/_internal/configuration.py +++ b/src/pip/_internal/configuration.py @@ -22,7 +22,7 @@ from pip._internal.exceptions import ( ConfigurationFileCouldNotBeLoaded, ) from pip._internal.utils import appdirs -from pip._internal.utils.compat import WINDOWS, expanduser +from pip._internal.utils.compat import WINDOWS from pip._internal.utils.misc import ensure_dir, enum from pip._internal.utils.typing import MYPY_CHECK_RUNNING @@ -80,7 +80,7 @@ def get_configuration_files(): site_config_file = os.path.join(sys.prefix, CONFIG_BASENAME) legacy_config_file = os.path.join( - expanduser('~'), + os.path.expanduser('~'), 'pip' if WINDOWS else '.pip', CONFIG_BASENAME, ) diff --git a/src/pip/_internal/utils/compat.py b/src/pip/_internal/utils/compat.py index dc351b804..0ae0483c8 100644 --- a/src/pip/_internal/utils/compat.py +++ b/src/pip/_internal/utils/compat.py @@ -139,19 +139,6 @@ def get_path_uid(path): return file_uid -def expanduser(path): - # type: (str) -> str - """ - Expand ~ and ~user constructions. - - Includes a workaround for https://bugs.python.org/issue14768 - """ - expanded = os.path.expanduser(path) - if path.startswith('~/') and expanded.startswith('//'): - expanded = expanded[1:] - return expanded - - # packages in the stdlib that may have installation metadata, but should not be # considered 'installed'. this theoretically could be determined based on # dist.location (py27:`sysconfig.get_paths()['stdlib']`, diff --git a/src/pip/_internal/utils/misc.py b/src/pip/_internal/utils/misc.py index 85e26a021..65a8c13bd 100644 --- a/src/pip/_internal/utils/misc.py +++ b/src/pip/_internal/utils/misc.py @@ -28,7 +28,7 @@ from pip._vendor.retrying import retry # type: ignore from pip import __version__ from pip._internal.exceptions import CommandError from pip._internal.locations import get_major_minor_version, site_packages, user_site -from pip._internal.utils.compat import WINDOWS, expanduser, stdlib_pkgs +from pip._internal.utils.compat import WINDOWS, stdlib_pkgs from pip._internal.utils.typing import MYPY_CHECK_RUNNING, cast from pip._internal.utils.virtualenv import ( running_under_virtualenv, @@ -302,7 +302,7 @@ def normalize_path(path, resolve_symlinks=True): Convert a path to its canonical, case-normalized, absolute version. """ - path = expanduser(path) + path = os.path.expanduser(path) if resolve_symlinks: path = os.path.realpath(path) else: diff --git a/tests/unit/test_collector.py b/tests/unit/test_collector.py index 90d8f8d0f..9fb920b32 100644 --- a/tests/unit/test_collector.py +++ b/tests/unit/test_collector.py @@ -733,7 +733,7 @@ def test_link_collector_create( assert search_scope.index_urls == expected_index_urls -@patch('pip._internal.utils.misc.expanduser') +@patch('os.path.expanduser') def test_link_collector_create_find_links_expansion( mock_expanduser, tmpdir, ): diff --git a/tests/unit/test_compat.py b/tests/unit/test_compat.py index c1dee67d2..655e45ab7 100644 --- a/tests/unit/test_compat.py +++ b/tests/unit/test_compat.py @@ -5,12 +5,7 @@ import sys import pytest import pip._internal.utils.compat as pip_compat -from pip._internal.utils.compat import ( - console_to_str, - expanduser, - get_path_uid, - str_to_display, -) +from pip._internal.utils.compat import console_to_str, get_path_uid, str_to_display def test_get_path_uid(): @@ -127,16 +122,3 @@ def test_console_to_str_warning(monkeypatch): monkeypatch.setattr(locale, 'getpreferredencoding', lambda: 'utf-8') monkeypatch.setattr(pip_compat.logger, 'warning', check_warning) console_to_str(some_bytes) - - -@pytest.mark.parametrize("home,path,expanded", [ - ("/Users/test", "~", "/Users/test"), - ("/Users/test", "~/.cache", "/Users/test/.cache"), - # Verify that we are not affected by https://bugs.python.org/issue14768 - ("/", "~", "/"), - ("/", "~/.cache", "/.cache"), -]) -def test_expanduser(home, path, expanded, monkeypatch): - monkeypatch.setenv("HOME", home) - monkeypatch.setenv("USERPROFILE", home) - assert expanduser(path) == expanded