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,9 +60,13 @@ class Page:
encoding = params["charset"]
self._content = content
self._parsed = html5lib.parse(
content, transport_encoding=encoding, namespaceHTMLElements=False
)
if encoding is None:
self._parsed = html5lib.parse(content, namespaceHTMLElements=False)
else:
self._parsed = html5lib.parse(
content, transport_encoding=encoding, namespaceHTMLElements=False
)
@property
def versions(self): # type: () -> Generator[Version]
......@@ -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
......@@ -196,7 +205,7 @@ class LegacyRepository(PyPiRepository):
We have to download a package to get the dependencies.
We also need to download every file matching this release
to get the various hashes.
Note that, this will be cached so the subsequent operations
should be much faster.
"""
......@@ -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