diff --git a/src/pip/_internal/network/session.py b/src/pip/_internal/network/session.py index e07b795b461..1765b4f6bd7 100644 --- a/src/pip/_internal/network/session.py +++ b/src/pip/_internal/network/session.py @@ -3,6 +3,7 @@ """ import email.utils +import functools import io import ipaddress import json @@ -106,6 +107,7 @@ def looks_like_ci() -> bool: return any(name in os.environ for name in CI_ENVIRONMENT_VARIABLES) +@functools.lru_cache(maxsize=1) def user_agent() -> str: """ Return a string representing the user agent. diff --git a/tests/unit/test_network_session.py b/tests/unit/test_network_session.py index 2bb9317b762..3f1a596ad8e 100644 --- a/tests/unit/test_network_session.py +++ b/tests/unit/test_network_session.py @@ -10,10 +10,17 @@ from pip import __version__ from pip._internal.models.link import Link -from pip._internal.network.session import CI_ENVIRONMENT_VARIABLES, PipSession +from pip._internal.network.session import ( + CI_ENVIRONMENT_VARIABLES, + PipSession, + user_agent, +) def get_user_agent() -> str: + # These tests are testing the computation of the user agent, so we want to + # avoid reusing cached values. + user_agent.cache_clear() return PipSession().headers["User-Agent"] @@ -58,7 +65,7 @@ def test_user_agent__ci( def test_user_agent_user_data(monkeypatch: pytest.MonkeyPatch) -> None: monkeypatch.setenv("PIP_USER_AGENT_USER_DATA", "some_string") - assert "some_string" in PipSession().headers["User-Agent"] + assert "some_string" in get_user_agent() class TestPipSession: