From 91a69a58a37f54c18950378f49fa1957e551f137 Mon Sep 17 00:00:00 2001 From: Pradyun Gedam Date: Thu, 22 Feb 2024 20:45:32 +0000 Subject: [PATCH 1/2] Cache the user agent This does not need to be computed multiple times in the same process. --- src/pip/_internal/network/session.py | 2 ++ 1 file changed, 2 insertions(+) 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. From 4f2ccfc28d0d666d7728c47eb512b8a3bdd5c0cc Mon Sep 17 00:00:00 2001 From: Pradyun Gedam Date: Mon, 8 Apr 2024 22:21:28 +0100 Subject: [PATCH 2/2] Invalidate the user agent cache in tests --- tests/unit/test_network_session.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) 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: