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 ...@@ -27,6 +27,7 @@ from poetry.utils.patterns import wheel_file_re
from ..inspection.info import PackageInfo from ..inspection.info import PackageInfo
from .auth import Auth from .auth import Auth
from .exceptions import PackageNotFound from .exceptions import PackageNotFound
from .exceptions import RepositoryError
from .pypi_repository import PyPiRepository from .pypi_repository import PyPiRepository
...@@ -361,8 +362,12 @@ class LegacyRepository(PyPiRepository): ...@@ -361,8 +362,12 @@ class LegacyRepository(PyPiRepository):
def _get(self, endpoint): # type: (str) -> Union[Page, None] def _get(self, endpoint): # type: (str) -> Union[Page, None]
url = self._url + endpoint url = self._url + endpoint
try:
response = self.session.get(url) response = self.session.get(url)
if response.status_code == 404: if response.status_code == 404:
return return
response.raise_for_status()
except requests.HTTPError as e:
raise RepositoryError(e)
return Page(url, response.content, response.headers) return Page(url, response.content, response.headers)
...@@ -5,6 +5,7 @@ import pytest ...@@ -5,6 +5,7 @@ import pytest
from poetry.core.packages import Dependency from poetry.core.packages import Dependency
from poetry.repositories.auth import Auth from poetry.repositories.auth import Auth
from poetry.repositories.exceptions import PackageNotFound 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 LegacyRepository
from poetry.repositories.legacy_repository import Page from poetry.repositories.legacy_repository import Page
from poetry.utils._compat import PY35 from poetry.utils._compat import PY35
...@@ -278,3 +279,36 @@ def test_username_password_special_chars(): ...@@ -278,3 +279,36 @@ def test_username_password_special_chars():
repo = MockRepository(auth=auth) repo = MockRepository(auth=auth)
assert "http://user%3A:%2F%252Fp%40ssword@legacy.foo.bar" == repo.authenticated_url 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