Skip to content

Commit b26455f

Browse files
radoeringneersighted
authored andcommitted
refactor(repository): always raise PackageNotFound in _get_page instead of returning None; remove unsuccessful attempt to get pretty name via json-based simple API
1 parent b42fa26 commit b26455f

7 files changed

+22
-45
lines changed

Diff for: src/poetry/repositories/http_repository.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -296,8 +296,8 @@ def _get_response(self, endpoint: str) -> requests.Response | None:
296296
)
297297
return response
298298

299-
def _get_page(self, name: NormalizedName) -> LinkSource | None:
299+
def _get_page(self, name: NormalizedName) -> LinkSource:
300300
response = self._get_response(f"/{name}/")
301301
if not response:
302-
return None
302+
raise PackageNotFound(f"Package [{name}] not found.")
303303
return HTMLPage(response.url, response.text)

Diff for: src/poetry/repositories/legacy_repository.py

+8-14
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,9 @@ def package(
7272
return package
7373

7474
def find_links_for_package(self, package: Package) -> list[Link]:
75-
page = self.get_page(package.name)
76-
if page is None:
75+
try:
76+
page = self.get_page(package.name)
77+
except PackageNotFound:
7778
return []
7879

7980
return list(page.links_for_version(package.name, package.version))
@@ -84,14 +85,9 @@ def _find_packages(
8485
"""
8586
Find packages on the remote server.
8687
"""
87-
versions: list[tuple[Version, str | bool]]
88-
89-
key: str = name
90-
if not constraint.is_any():
91-
key = f"{key}:{constraint!s}"
92-
93-
page = self.get_page(name)
94-
if page is None:
88+
try:
89+
page = self.get_page(name)
90+
except PackageNotFound:
9591
self._log(f"No packages found for {name}", level="debug")
9692
return []
9793

@@ -117,8 +113,6 @@ def _get_release_info(
117113
self, name: NormalizedName, version: Version
118114
) -> dict[str, Any]:
119115
page = self.get_page(name)
120-
if page is None:
121-
raise PackageNotFound(f'No package named "{name}"')
122116

123117
links = list(page.links_for_version(name, version))
124118
yanked = page.yanked(name, version)
@@ -138,8 +132,8 @@ def _get_release_info(
138132
),
139133
)
140134

141-
def _get_page(self, name: NormalizedName) -> SimpleRepositoryPage | None:
135+
def _get_page(self, name: NormalizedName) -> SimpleRepositoryPage:
142136
response = self._get_response(f"/{name}/")
143137
if not response:
144-
return None
138+
raise PackageNotFound(f"Package [{name}] not found.")
145139
return SimpleRepositoryPage(response.url, response.text)

Diff for: src/poetry/repositories/pypi_repository.py

+1-13
Original file line numberDiff line numberDiff line change
@@ -115,26 +115,14 @@ def _find_packages(
115115
except PackageNotFound:
116116
self._log(f"No packages found for {name}", level="debug")
117117
return []
118-
assert isinstance(json_page, SimpleJsonPage)
119-
120-
versions: list[tuple[Version, str | bool]]
121-
122-
key: str = name
123-
if not constraint.is_any():
124-
key = f"{key}:{constraint!s}"
125118

126119
versions = [
127120
(version, json_page.yanked(name, version))
128121
for version in json_page.versions(name)
129122
if constraint.allows(version)
130123
]
131124

132-
pretty_name = json_page.content["name"]
133-
packages = [
134-
Package(pretty_name, version, yanked=yanked) for version, yanked in versions
135-
]
136-
137-
return packages
125+
return [Package(name, version, yanked=yanked) for version, yanked in versions]
138126

139127
def _get_package_info(self, name: str) -> dict[str, Any]:
140128
headers = {"Accept": "application/vnd.pypi.simple.v1+json"}

Diff for: src/poetry/repositories/single_page_repository.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from typing import TYPE_CHECKING
44

5+
from poetry.repositories.exceptions import PackageNotFound
56
from poetry.repositories.legacy_repository import LegacyRepository
67
from poetry.repositories.link_sources.html import SimpleRepositoryPage
78

@@ -11,11 +12,11 @@
1112

1213

1314
class SinglePageRepository(LegacyRepository):
14-
def _get_page(self, name: NormalizedName) -> SimpleRepositoryPage | None:
15+
def _get_page(self, name: NormalizedName) -> SimpleRepositoryPage:
1516
"""
1617
Single page repositories only have one page irrespective of endpoint.
1718
"""
1819
response = self._get_response("")
1920
if not response:
20-
return None
21+
raise PackageNotFound(f"Package [{name}] not found.")
2122
return SimpleRepositoryPage(response.url, response.text)

Diff for: tests/repositories/test_legacy_repository.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,10 @@ class MockRepository(LegacyRepository):
4646
def __init__(self) -> None:
4747
super().__init__("legacy", url="http://legacy.foo.bar", disable_cache=True)
4848

49-
def _get_page(self, name: NormalizedName) -> SimpleRepositoryPage | None:
49+
def _get_page(self, name: NormalizedName) -> SimpleRepositoryPage:
5050
fixture = self.FIXTURES / (name + ".html")
5151
if not fixture.exists():
52-
return None
52+
raise PackageNotFound(f"Package [{name}] not found.")
5353

5454
with fixture.open(encoding="utf-8") as f:
5555
return SimpleRepositoryPage(self._url + f"/{name}/", f.read())
@@ -432,7 +432,7 @@ def test_package_yanked(
432432

433433
def test_package_partial_yank():
434434
class SpecialMockRepository(MockRepository):
435-
def _get_page(self, name: NormalizedName) -> SimpleRepositoryPage | None:
435+
def _get_page(self, name: NormalizedName) -> SimpleRepositoryPage:
436436
return super()._get_page(canonicalize_name(f"{name}-partial-yank"))
437437

438438
repo = MockRepository()
@@ -490,7 +490,8 @@ def test_get_40x_and_returns_none(
490490
) -> None:
491491
repo = MockHttpRepository({"/foo/": status_code}, http)
492492

493-
assert repo.get_page("foo") is None
493+
with pytest.raises(PackageNotFound):
494+
repo.get_page("foo")
494495

495496

496497
def test_get_5xx_raises(http: type[httpretty.httpretty]) -> None:

Diff for: tests/repositories/test_pypi_repository.py

-8
Original file line numberDiff line numberDiff line change
@@ -332,14 +332,6 @@ def test_urls() -> None:
332332
assert repository.authenticated_url == "https://pypi.org/simple/"
333333

334334

335-
def test_use_pypi_pretty_name() -> None:
336-
repo = MockRepository(fallback=True)
337-
338-
package = repo.find_packages(Factory.create_dependency("twisted", "*"))
339-
assert len(package) == 1
340-
assert package[0].pretty_name == "Twisted"
341-
342-
343335
def test_find_links_for_package_of_supported_types():
344336
repo = MockRepository()
345337
package = repo.find_packages(Factory.create_dependency("hbmqtt", "0.9.6"))

Diff for: tests/repositories/test_single_page_repository.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
from poetry.core.packages.dependency import Dependency
99

10+
from poetry.repositories.exceptions import PackageNotFound
1011
from poetry.repositories.link_sources.html import SimpleRepositoryPage
1112
from poetry.repositories.single_page_repository import SinglePageRepository
1213

@@ -25,10 +26,10 @@ def __init__(self, page: str) -> None:
2526
disable_cache=True,
2627
)
2728

28-
def _get_page(self, name: NormalizedName) -> SimpleRepositoryPage | None:
29+
def _get_page(self, name: NormalizedName) -> SimpleRepositoryPage:
2930
fixture = self.FIXTURES / self.url.rsplit("/", 1)[-1]
3031
if not fixture.exists():
31-
return
32+
raise PackageNotFound(f"Package [{name}] not found.")
3233

3334
with fixture.open(encoding="utf-8") as f:
3435
return SimpleRepositoryPage(self._url, f.read())

0 commit comments

Comments
 (0)