-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add initial support for single page repositories
This change allows users to make use of find-links style single page sources that do not present a PEP 503 simple API repository.
- Loading branch information
Showing
4 changed files
with
111 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
from __future__ import annotations | ||
|
||
from poetry.repositories.legacy_repository import LegacyRepository | ||
from poetry.repositories.link_sources.html import SimpleRepositoryPage | ||
|
||
|
||
class SinglePageRepository(LegacyRepository): | ||
def _get_page(self, endpoint: str = None) -> SimpleRepositoryPage | None: | ||
""" | ||
Single page repositories only have one page irrespective of endpoint. | ||
""" | ||
response = self._get_response("") | ||
if not response: | ||
return None | ||
return SimpleRepositoryPage(response.url, response.text) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
<!DOCTYPE html> | ||
<html> | ||
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head> | ||
<body> | ||
<a href="https://storage.googleapis.com/jax-releases/nocuda/jaxlib-0.3.0-cp310-none-manylinux2010_x86_64.whl">nocuda/jaxlib-0.3.0-cp310-none-manylinux2010_x86_64.whl</a><br> | ||
<a href="https://storage.googleapis.com/jax-releases/nocuda/jaxlib-0.3.0-cp37-none-manylinux2010_x86_64.whl">nocuda/jaxlib-0.3.0-cp37-none-manylinux2010_x86_64.whl</a><br> | ||
<a href="https://storage.googleapis.com/jax-releases/nocuda/jaxlib-0.3.0-cp38-none-manylinux2010_x86_64.whl">nocuda/jaxlib-0.3.0-cp38-none-manylinux2010_x86_64.whl</a><br> | ||
<a href="https://storage.googleapis.com/jax-releases/nocuda/jaxlib-0.3.0-cp39-none-manylinux2010_x86_64.whl">nocuda/jaxlib-0.3.0-cp39-none-manylinux2010_x86_64.whl</a><br> | ||
<a href="https://storage.googleapis.com/jax-releases/nocuda/jaxlib-0.3.2-cp310-none-manylinux2010_x86_64.whl">nocuda/jaxlib-0.3.2-cp310-none-manylinux2010_x86_64.whl</a><br> | ||
<a href="https://storage.googleapis.com/jax-releases/nocuda/jaxlib-0.3.2-cp37-none-manylinux2010_x86_64.whl">nocuda/jaxlib-0.3.2-cp37-none-manylinux2010_x86_64.whl</a><br> | ||
<a href="https://storage.googleapis.com/jax-releases/nocuda/jaxlib-0.3.2-cp38-none-manylinux2010_x86_64.whl">nocuda/jaxlib-0.3.2-cp38-none-manylinux2010_x86_64.whl</a><br> | ||
<a href="https://storage.googleapis.com/jax-releases/nocuda/jaxlib-0.3.2-cp39-none-manylinux2010_x86_64.whl">nocuda/jaxlib-0.3.2-cp39-none-manylinux2010_x86_64.whl</a><br> | ||
<a href="https://storage.googleapis.com/jax-releases/nocuda/jaxlib-0.3.5-cp310-none-manylinux2010_x86_64.whl">nocuda/jaxlib-0.3.5-cp310-none-manylinux2010_x86_64.whl</a><br> | ||
<a href="https://storage.googleapis.com/jax-releases/nocuda/jaxlib-0.3.5-cp37-none-manylinux2010_x86_64.whl">nocuda/jaxlib-0.3.5-cp37-none-manylinux2010_x86_64.whl</a><br> | ||
<a href="https://storage.googleapis.com/jax-releases/nocuda/jaxlib-0.3.5-cp38-none-manylinux2010_x86_64.whl">nocuda/jaxlib-0.3.5-cp38-none-manylinux2010_x86_64.whl</a><br> | ||
<a href="https://storage.googleapis.com/jax-releases/nocuda/jaxlib-0.3.5-cp39-none-manylinux2010_x86_64.whl">nocuda/jaxlib-0.3.5-cp39-none-manylinux2010_x86_64.whl</a><br> | ||
<a href="https://storage.googleapis.com/jax-releases/nocuda/jaxlib-0.3.7-cp310-none-manylinux2014_x86_64.whl">nocuda/jaxlib-0.3.7-cp310-none-manylinux2014_x86_64.whl</a><br> | ||
<a href="https://storage.googleapis.com/jax-releases/nocuda/jaxlib-0.3.7-cp37-none-manylinux2014_x86_64.whl">nocuda/jaxlib-0.3.7-cp37-none-manylinux2014_x86_64.whl</a><br> | ||
<a href="https://storage.googleapis.com/jax-releases/nocuda/jaxlib-0.3.7-cp38-none-manylinux2014_x86_64.whl">nocuda/jaxlib-0.3.7-cp38-none-manylinux2014_x86_64.whl</a><br> | ||
<a href="https://storage.googleapis.com/jax-releases/nocuda/jaxlib-0.3.7-cp39-none-manylinux2014_x86_64.whl">nocuda/jaxlib-0.3.7-cp39-none-manylinux2014_x86_64.whl</a><br> | ||
<a href="https://storage.googleapis.com/jax-releases/jax/jax-0.3.0.tar.gz">jax/jax-0.3.0.tar.gz</a><br> | ||
<a href="https://storage.googleapis.com/jax-releases/jax/jax-0.3.2.tar.gz">jax/jax-0.3.2.tar.gz</a><br> | ||
<a href="https://storage.googleapis.com/jax-releases/jax/jax-0.3.5.tar.gz">jax/jax-0.3.5.tar.gz</a><br> | ||
<a href="https://storage.googleapis.com/jax-releases/jax/jax-0.3.6.tar.gz">jax/jax-0.3.6.tar.gz</a><br> | ||
<a href="https://storage.googleapis.com/jax-releases/jax/jax-0.3.7.tar.gz">jax/jax-0.3.7.tar.gz</a><br> | ||
</body> | ||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
from __future__ import annotations | ||
|
||
import re | ||
|
||
from pathlib import Path | ||
|
||
from poetry.core.packages.dependency import Dependency | ||
|
||
from poetry.repositories.link_sources.html import SimpleRepositoryPage | ||
from poetry.repositories.single_page_repository import SinglePageRepository | ||
|
||
|
||
class MockSinglePageRepository(SinglePageRepository): | ||
|
||
FIXTURES = Path(__file__).parent / "fixtures" / "single-page" | ||
|
||
def __init__(self, page: str) -> None: | ||
super().__init__( | ||
"single-page", | ||
url=f"http://single-page.foo.bar/{page}.html", | ||
disable_cache=True, | ||
) | ||
|
||
def _get_page(self, endpoint: str = None) -> SimpleRepositoryPage | None: | ||
fixture = self.FIXTURES / self.url.rsplit("/", 1)[-1] | ||
if not fixture.exists(): | ||
return | ||
|
||
with fixture.open(encoding="utf-8") as f: | ||
return SimpleRepositoryPage(self._url, f.read()) | ||
|
||
def _download(self, url: str, dest: Path) -> None: | ||
raise RuntimeError("Tests are not configured for downloads") | ||
|
||
|
||
def test_single_page_repository_get_page(): | ||
repo = MockSinglePageRepository("jax_releases") | ||
|
||
page = repo._get_page("/ignored") | ||
links = list(page.links) | ||
|
||
assert len(links) == 21 | ||
|
||
for link in links: | ||
assert re.match(r"^(jax|jaxlib)-0\.3\.\d.*\.(whl|tar\.gz)$", link.filename) | ||
assert link.netloc == "storage.googleapis.com" | ||
assert link.path.startswith("/jax-releases/") | ||
|
||
|
||
def test_single_page_repository_find_packages(): | ||
repo = MockSinglePageRepository("jax_releases") | ||
|
||
dep = Dependency("jaxlib", "0.3.7") | ||
|
||
packages = repo.find_packages(dep) | ||
|
||
assert len(packages) == 1 | ||
|
||
package = packages[0] | ||
assert package.name == dep.name | ||
assert package.to_dependency().to_pep_508() == dep.to_pep_508() |