Commit 19006330 by Sébastien Eustace

Fix error when listing distribution links for private repositories.

parent 2013f668
......@@ -9,6 +9,7 @@
- Fixed Python requirements not properly set when resolving dependencies.
- Fixed terminal coloring being activated even if not supported.
- Fixed wrong executable being picked up on Windows in `poetry run`.
- Fixed error when listing distribution links for private repositories.
## [0.10.1] - 2018-05-28
......
......@@ -48,6 +48,9 @@ class Page:
VERSION_REGEX = re.compile("(?i)([a-z0-9_\-.]+?)-(?=\d)([a-z0-9_.!+-]+)")
def __init__(self, url, content, headers):
if not url.endswith("/"):
url += "/"
self._url = url
encoding = None
if headers and "Content-Type" in headers:
......@@ -57,6 +60,10 @@ class Page:
encoding = params["charset"]
self._content = content
if encoding is None:
self._parsed = html5lib.parse(content, namespaceHTMLElements=False)
else:
self._parsed = html5lib.parse(
content, transport_encoding=encoding, namespaceHTMLElements=False
)
......@@ -122,7 +129,7 @@ class Page:
class LegacyRepository(PyPiRepository):
def __init__(self, name, url):
def __init__(self, name, url, disable_cache=False):
if name == "pypi":
raise ValueError("The name [pypi] is reserved for repositories")
......@@ -147,6 +154,8 @@ class LegacyRepository(PyPiRepository):
requests.session(), cache=FileCache(str(self._cache_dir / "_http"))
)
self._disable_cache = disable_cache
@property
def name(self):
return self._name
......@@ -252,17 +261,6 @@ class LegacyRepository(PyPiRepository):
return package
def get_release_info(self, name, version): # type: (str, str) -> dict
"""
Return the release information given a package name and a version.
The information is returned from the cache if it exists
or retrieved from the remote server.
"""
return self._cache.store("releases").remember_forever(
"{}:{}".format(name, version), lambda: self._get_release_info(name, version)
)
def _get_release_info(self, name, version): # type: (str, str) -> dict
page = self._get("/{}".format(canonicalize_name(name).replace(".", "-")))
if page is None:
......
<!DOCTYPE html>
<html>
<head>
<title>Links for poetry</title>
</head>
<body>
<h1>Links for poetry</h1>
<a href="https://files.pythonhosted.org/packages/e9/df/0ab4afa9c5d9e6b690c5c27c9f50330b98a7ecfe1185ce2dc1b19188b064/poetry-0.1.0-py3-none-any.whl#sha256=1d85132efab8ead3c6f69202843da40a03823992091c29f8d65a31af68940163" data-requires-python="&gt;=3.6.0">poetry-0.1.0-py3-none-any.whl</a><br/>
<a href="https://files.pythonhosted.org/packages/d5/c5/4efe096ce56505435ccbe8aeefcd5c8c3bb0da211ef8fe58934d087daef2/poetry-0.1.0.tar.gz#sha256=db33179244321b0b86c6c3645225ff2062ed3495ca16d0d64b3a5df804a82273" data-requires-python="&gt;=3.6.0">poetry-0.1.0.tar.gz</a><br/>
</body>
</html>
<!--SERIAL 3907384-->
<!DOCTYPE html>
<html>
<head>
<title>Links for poetry</title>
</head>
<body>
<h1>Links for poetry</h1>
<a href="poetry-0.1.0-py3-none-any.whl#sha256=1d85132efab8ead3c6f69202843da40a03823992091c29f8d65a31af68940163" data-requires-python="&gt;=3.6.0">poetry-0.1.0-py3-none-any.whl</a><br/>
<a href="poetry-0.1.0.tar.gz#sha256=db33179244321b0b86c6c3645225ff2062ed3495ca16d0d64b3a5df804a82273" data-requires-python="&gt;=3.6.0">poetry-0.1.0.tar.gz</a><br/>
</body>
</html>
<!--SERIAL 3907384-->
import pytest
from poetry.repositories.legacy_repository import LegacyRepository
from poetry.repositories.legacy_repository import Page
from poetry.utils._compat import Path
from poetry.utils._compat import decode
class MockRepository(LegacyRepository):
FIXTURES = Path(__file__).parent / "fixtures" / "legacy"
def __init__(self):
super(MockRepository, self).__init__(
"legacy", url="http://foo.bar", disable_cache=True
)
def _get(self, endpoint):
parts = endpoint.split("/")
name = parts[1]
fixture = self.FIXTURES / (name + ".html")
with fixture.open() as f:
return Page(self._url + endpoint, f.read(), {})
def test_page_relative_links_path_are_correct():
repo = MockRepository()
page = repo._get("/relative")
for link in page.links:
assert link.netloc == "foo.bar"
assert link.path.startswith("/relative/poetry")
def test_page_absolute_links_path_are_correct():
repo = MockRepository()
page = repo._get("/absolute")
for link in page.links:
assert link.netloc == "files.pythonhosted.org"
assert link.path.startswith("/packages/")
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