From a69e1abbaaa94c6a32408db176101b1c50b155b9 Mon Sep 17 00:00:00 2001 From: Kapil Thangavelu Date: Wed, 24 Nov 2021 05:29:48 -0500 Subject: [PATCH 1/4] remove use of cache control on pypi --- src/poetry/repositories/legacy_repository.py | 8 ++++--- src/poetry/repositories/pypi_repository.py | 21 +++---------------- .../demo/demo/demo.egg-info/PKG-INFO | 5 +++-- tests/repositories/test_legacy_repository.py | 15 ------------- tests/repositories/test_pypi_repository.py | 21 ------------------- 5 files changed, 11 insertions(+), 59 deletions(-) diff --git a/src/poetry/repositories/legacy_repository.py b/src/poetry/repositories/legacy_repository.py index ad46daa4b2a..ef5678c2492 100644 --- a/src/poetry/repositories/legacy_repository.py +++ b/src/poetry/repositories/legacy_repository.py @@ -8,8 +8,6 @@ from html import unescape from pathlib import Path from typing import TYPE_CHECKING -from typing import Any -from typing import Dict from typing import Iterator from typing import List from typing import Optional @@ -42,6 +40,8 @@ if TYPE_CHECKING: + import requests.structures + from poetry.core.packages.dependency import Dependency with warnings.catch_warnings(): @@ -62,7 +62,9 @@ class Page: ".tar", ] - def __init__(self, url: str, content: str, headers: Dict[str, Any]) -> None: + def __init__( + self, url: str, content: bytes, headers: requests.structures.CaseInsensitiveDict + ) -> None: if not url.endswith("/"): url += "/" diff --git a/src/poetry/repositories/pypi_repository.py b/src/poetry/repositories/pypi_repository.py index 524fdeebaca..0deaab86d6c 100644 --- a/src/poetry/repositories/pypi_repository.py +++ b/src/poetry/repositories/pypi_repository.py @@ -11,7 +11,6 @@ import requests -from cachecontrol import CacheControl from cachecontrol.caches.file_cache import FileCache from cachecontrol.controller import logger as cache_control_logger from cachy import CacheManager @@ -72,18 +71,11 @@ def __init__( ) self._cache_control_cache = FileCache(str(release_cache_dir / "_http")) - self._session = CacheControl( - requests.session(), cache=self._cache_control_cache - ) - self._name = "PyPI" @property - def session(self) -> CacheControl: - return self._session - - def __del__(self) -> None: - self._session.close() + def session(self) -> requests.Session: + return requests.session() def find_packages(self, dependency: Dependency) -> List[Package]: """ @@ -323,14 +315,7 @@ def _get_release_info(self, name: str, version: str) -> dict: return data.asdict() def _get(self, endpoint: str) -> Union[dict, None]: - try: - json_response = self.session.get(self._base_url + endpoint) - except requests.exceptions.TooManyRedirects: - # Cache control redirect loop. - # We try to remove the cache and try again - self._cache_control_cache.delete(self._base_url + endpoint) - json_response = self.session.get(self._base_url + endpoint) - + json_response = self.session.get(self._base_url + endpoint) if json_response.status_code == 404: return None diff --git a/tests/fixtures/git/github.com/demo/demo/demo.egg-info/PKG-INFO b/tests/fixtures/git/github.com/demo/demo/demo.egg-info/PKG-INFO index 7f543c49cb3..c6b21bb585c 100644 --- a/tests/fixtures/git/github.com/demo/demo/demo.egg-info/PKG-INFO +++ b/tests/fixtures/git/github.com/demo/demo/demo.egg-info/PKG-INFO @@ -6,7 +6,8 @@ Home-page: https://github.com/demo/demo Author: Sébastien Eustace Author-email: sebastien@eustace.io License: MIT -Description: UNKNOWN Platform: UNKNOWN -Provides-Extra: bar Provides-Extra: foo +Provides-Extra: bar + +UNKNOWN diff --git a/tests/repositories/test_legacy_repository.py b/tests/repositories/test_legacy_repository.py index 0a714680ad6..1067b13782e 100644 --- a/tests/repositories/test_legacy_repository.py +++ b/tests/repositories/test_legacy_repository.py @@ -3,7 +3,6 @@ from pathlib import Path import pytest -import requests from poetry.core.packages.dependency import Dependency from poetry.factory import Factory @@ -346,17 +345,3 @@ def test_get_5xx_raises(http): with pytest.raises(RepositoryError): repo._get_page("/foo") - - -def test_get_redirected_response_url(http, monkeypatch): - repo = MockHttpRepository({"/foo": 200}, http) - redirect_url = "http://legacy.redirect.bar" - - def get_mock(url): - response = requests.Response() - response.status_code = 200 - response.url = redirect_url + "/foo" - return response - - monkeypatch.setattr(repo.session, "get", get_mock) - assert repo._get_page("/foo")._url == "http://legacy.redirect.bar/foo/" diff --git a/tests/repositories/test_pypi_repository.py b/tests/repositories/test_pypi_repository.py index aca06b3c144..3f1f6ab5ad0 100644 --- a/tests/repositories/test_pypi_repository.py +++ b/tests/repositories/test_pypi_repository.py @@ -1,18 +1,13 @@ import json import shutil -from io import BytesIO from pathlib import Path import pytest -from requests.exceptions import TooManyRedirects -from requests.models import Response - from poetry.core.packages.dependency import Dependency from poetry.factory import Factory from poetry.repositories.pypi_repository import PyPiRepository -from poetry.utils._compat import encode class MockRepository(PyPiRepository): @@ -204,22 +199,6 @@ def test_invalid_versions_ignored(): assert len(packages) == 1 -def test_get_should_invalid_cache_on_too_many_redirects_error(mocker): - delete_cache = mocker.patch("cachecontrol.caches.file_cache.FileCache.delete") - - response = Response() - response.encoding = "utf-8" - response.raw = BytesIO(encode('{"foo": "bar"}')) - mocker.patch( - "cachecontrol.adapter.CacheControlAdapter.send", - side_effect=[TooManyRedirects(), response], - ) - repository = PyPiRepository() - repository._get("https://pypi.org/pypi/async-timeout/json") - - assert delete_cache.called - - def test_urls(): repository = PyPiRepository() From 584f0b472899ac608195518406dfcef761954c23 Mon Sep 17 00:00:00 2001 From: Kapil Thangavelu Date: Wed, 24 Nov 2021 05:45:44 -0500 Subject: [PATCH 2/4] lint clean --- tests/repositories/test_legacy_repository.py | 3 --- tests/repositories/test_pypi_repository.py | 6 +----- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/tests/repositories/test_legacy_repository.py b/tests/repositories/test_legacy_repository.py index 50948a44af2..3f207bf2716 100644 --- a/tests/repositories/test_legacy_repository.py +++ b/tests/repositories/test_legacy_repository.py @@ -24,8 +24,6 @@ if TYPE_CHECKING: import httpretty - from _pytest.monkeypatch import MonkeyPatch - class MockRepository(LegacyRepository): @@ -356,4 +354,3 @@ def test_get_5xx_raises(http: Type["httpretty.httpretty"]): with pytest.raises(RepositoryError): repo._get_page("/foo") - diff --git a/tests/repositories/test_pypi_repository.py b/tests/repositories/test_pypi_repository.py index 83f45b37792..b5333b268fb 100644 --- a/tests/repositories/test_pypi_repository.py +++ b/tests/repositories/test_pypi_repository.py @@ -2,7 +2,6 @@ import shutil from pathlib import Path -from typing import TYPE_CHECKING from typing import Dict from typing import Optional @@ -13,10 +12,6 @@ from poetry.repositories.pypi_repository import PyPiRepository -if TYPE_CHECKING: - from pytest_mock import MockerFixture - - class MockRepository(PyPiRepository): JSON_FIXTURES = Path(__file__).parent / "fixtures" / "pypi.org" / "json" @@ -207,6 +202,7 @@ def test_invalid_versions_ignored(): packages = repo.find_packages(Factory.create_dependency("pygame-music-grid", "*")) assert len(packages) == 1 + def test_urls(): repository = PyPiRepository() From 1f8b4ad44e6d863f5ffb40b3db84371d235a2ded Mon Sep 17 00:00:00 2001 From: Kapil Thangavelu Date: Thu, 25 Nov 2021 05:29:33 -0500 Subject: [PATCH 3/4] revert incidental change from test writing to test data --- .../fixtures/git/github.com/demo/demo/demo.egg-info/PKG-INFO | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tests/fixtures/git/github.com/demo/demo/demo.egg-info/PKG-INFO b/tests/fixtures/git/github.com/demo/demo/demo.egg-info/PKG-INFO index c6b21bb585c..7f543c49cb3 100644 --- a/tests/fixtures/git/github.com/demo/demo/demo.egg-info/PKG-INFO +++ b/tests/fixtures/git/github.com/demo/demo/demo.egg-info/PKG-INFO @@ -6,8 +6,7 @@ Home-page: https://github.com/demo/demo Author: Sébastien Eustace Author-email: sebastien@eustace.io License: MIT +Description: UNKNOWN Platform: UNKNOWN -Provides-Extra: foo Provides-Extra: bar - -UNKNOWN +Provides-Extra: foo From ae695aa4abe4f2288cbc78f39999ccc6f7933220 Mon Sep 17 00:00:00 2001 From: Kapil Thangavelu Date: Thu, 25 Nov 2021 05:31:49 -0500 Subject: [PATCH 4/4] type check with a mapping instead of request.structures --- src/poetry/repositories/legacy_repository.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/poetry/repositories/legacy_repository.py b/src/poetry/repositories/legacy_repository.py index ef5678c2492..fc7388e8517 100644 --- a/src/poetry/repositories/legacy_repository.py +++ b/src/poetry/repositories/legacy_repository.py @@ -10,6 +10,7 @@ from typing import TYPE_CHECKING from typing import Iterator from typing import List +from typing import Mapping from typing import Optional from urllib.parse import quote @@ -40,8 +41,6 @@ if TYPE_CHECKING: - import requests.structures - from poetry.core.packages.dependency import Dependency with warnings.catch_warnings(): @@ -62,9 +61,7 @@ class Page: ".tar", ] - def __init__( - self, url: str, content: bytes, headers: requests.structures.CaseInsensitiveDict - ) -> None: + def __init__(self, url: str, content: bytes, headers: Mapping) -> None: if not url.endswith("/"): url += "/"