Commit 3f7545d6 by Dan Hipschman Committed by finswimmer

Display better messages on legacy repo HTTP errors

parent 5dd5411e
......@@ -27,6 +27,7 @@ from poetry.utils.patterns import wheel_file_re
from ..inspection.info import PackageInfo
from .auth import Auth
from .exceptions import PackageNotFound
from .exceptions import RepositoryError
from .pypi_repository import PyPiRepository
......@@ -361,8 +362,12 @@ class LegacyRepository(PyPiRepository):
def _get(self, endpoint): # type: (str) -> Union[Page, None]
url = self._url + endpoint
response = self.session.get(url)
if response.status_code == 404:
return
try:
response = self.session.get(url)
if response.status_code == 404:
return
response.raise_for_status()
except requests.HTTPError as e:
raise RepositoryError(e)
return Page(url, response.content, response.headers)
......@@ -5,6 +5,7 @@ import pytest
from poetry.core.packages import Dependency
from poetry.repositories.auth import Auth
from poetry.repositories.exceptions import PackageNotFound
from poetry.repositories.exceptions import RepositoryError
from poetry.repositories.legacy_repository import LegacyRepository
from poetry.repositories.legacy_repository import Page
from poetry.utils._compat import PY35
......@@ -278,3 +279,36 @@ def test_username_password_special_chars():
repo = MockRepository(auth=auth)
assert "http://user%3A:%2F%252Fp%40ssword@legacy.foo.bar" == repo.authenticated_url
class MockHttpRepository(LegacyRepository):
def __init__(self, endpoint_responses, http):
base_url = "http://legacy.foo.bar"
super(MockHttpRepository, self).__init__(
"legacy", url=base_url, auth=None, disable_cache=True
)
for endpoint, response in endpoint_responses.items():
url = base_url + endpoint
http.register_uri(http.GET, url, status=response)
def test_get_200_returns_page(http):
repo = MockHttpRepository({"/foo": 200}, http)
assert repo._get("/foo")
def test_get_404_returns_none(http):
repo = MockHttpRepository({"/foo": 404}, http)
assert repo._get("/foo") is None
def test_get_4xx_and_5xx_raises(http):
endpoints = {"/{}".format(code): code for code in {401, 403, 500}}
repo = MockHttpRepository(endpoints, http)
for endpoint in endpoints:
with pytest.raises(RepositoryError):
repo._get(endpoint)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment