Commit 9fb6c95d by Randy Döring Committed by Bjorn Neergaard

repository: keep (uncanonicalized) pretty_name

parent 4392bd6e
......@@ -528,7 +528,7 @@ class Provider:
dependency_package = DependencyPackage(
dependency,
self._pool.package(
package.name,
package.pretty_name,
package.version,
extras=list(dependency.extras),
repository=dependency.source_name,
......
......@@ -6,6 +6,7 @@ from typing import TYPE_CHECKING
from typing import Any
from cachy import CacheManager
from packaging.utils import canonicalize_name
from poetry.core.semver.helpers import parse_constraint
from poetry.config.config import Config
......@@ -78,8 +79,10 @@ class CachedRepository(Repository, ABC):
def package(
self,
name: NormalizedName,
name: str,
version: Version,
extras: list[str] | None = None,
) -> Package:
return self.get_release_info(name, version).to_package(name=name, extras=extras)
return self.get_release_info(canonicalize_name(name), version).to_package(
name=name, extras=extras
)
......@@ -34,7 +34,7 @@ class LegacyRepository(HTTPRepository):
super().__init__(name, url.rstrip("/"), config, disable_cache)
def package(
self, name: NormalizedName, version: Version, extras: list[str] | None = None
self, name: str, version: Version, extras: list[str] | None = None
) -> Package:
"""
Retrieve the release information.
......
......@@ -7,7 +7,6 @@ from poetry.repositories.repository import Repository
if TYPE_CHECKING:
from packaging.utils import NormalizedName
from poetry.core.packages.dependency import Dependency
from poetry.core.packages.package import Package
from poetry.core.semver.version import Version
......@@ -134,7 +133,7 @@ class Pool(Repository):
def package(
self,
name: NormalizedName,
name: str,
version: Version,
extras: list[str] | None = None,
repository: str | None = None,
......
......@@ -4,6 +4,7 @@ import logging
from typing import TYPE_CHECKING
from packaging.utils import canonicalize_name
from poetry.core.semver.helpers import parse_constraint
from poetry.core.semver.version import Version
from poetry.core.semver.version_constraint import VersionConstraint
......@@ -139,10 +140,11 @@ class Repository:
return []
def package(
self, name: NormalizedName, version: Version, extras: list[str] | None = None
self, name: str, version: Version, extras: list[str] | None = None
) -> Package:
canonicalized_name = canonicalize_name(name)
for package in self.packages:
if name == package.name and package.version == version:
if canonicalized_name == package.name and package.version == version:
return package.clone()
raise PackageNotFound(f"Package {name} ({version}) not found.")
......@@ -12,7 +12,6 @@ import pytest
from cleo.io.null_io import NullIO
from deepdiff import DeepDiff
from packaging.utils import canonicalize_name
from poetry.core.semver.version import Version
from poetry.factory import Factory
......@@ -243,9 +242,7 @@ def test_builder_setup_generation_runs_with_pip_editable(tmp_dir: str) -> None:
# is the package installed?
repository = InstalledRepository.load(venv)
package = repository.package(
canonicalize_name("extended-project"), Version.parse("1.2.3")
)
package = repository.package("extended-project", Version.parse("1.2.3"))
assert package.name == "extended-project"
# check for the module built by build.py
......
<!DOCTYPE html>
<html>
<head>
<title>Links for discord-py</title>
<body>
<h1>Links for discord-py</h1>
<a href="https://files.pythonhosted.org/packages/0e/d9/7b057cab41c16144925ba4f96dab576a8ebb7b80a98d40e06bd94298eb3b/discord.py-2.0.0-py3-none-any.whl#sha256=18b06870bdc85d29e0d55f4a4b2abe9d7cdae2b197e23d49f82886ba27ba1aec" data-requires-python="&gt;=3.8.0" >discord.py-2.0.0-py3-none-any.whl</a><br />
<a href="https://files.pythonhosted.org/packages/4c/73/fb89115b07588bf7a46e9eca972b89dd62b5856abd52297fe130b41d9d63/discord.py-2.0.0.tar.gz#sha256=c36f26935938194c3465c2abf8ecfbbf5560c50b189f1b746d6f00d1e78c0d3b" data-requires-python="&gt;=3.8.0" >discord.py-2.0.0.tar.gz</a><br />
</body>
</html>
<!--SERIAL 14796560-->
{
"info": {
"author": "Rapptz",
"author_email": "",
"bugtrack_url": null,
"classifiers": [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Natural Language :: English",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Topic :: Internet",
"Topic :: Software Development :: Libraries",
"Topic :: Software Development :: Libraries :: Python Modules",
"Topic :: Utilities",
"Typing :: Typed"
],
"description": "",
"description_content_type": "text/x-rst",
"docs_url": null,
"download_url": "",
"downloads": {
"last_day": -1,
"last_month": -1,
"last_week": -1
},
"home_page": "https://github.com/Rapptz/discord.py",
"keywords": "",
"license": "MIT",
"maintainer": "",
"maintainer_email": "",
"name": "discord.py",
"package_url": "https://pypi.org/project/discord.py/",
"platform": null,
"project_url": "https://pypi.org/project/discord.py/",
"project_urls": {
"Documentation": "https://discordpy.readthedocs.io/en/latest/",
"Homepage": "https://github.com/Rapptz/discord.py",
"Issue tracker": "https://github.com/Rapptz/discord.py/issues"
},
"release_url": "https://pypi.org/project/discord.py/2.0.0/",
"requires_dist": [
"PyNaCl (<1.6,>=1.3.0) ; extra == 'voice'",
"typing-extensions (<5,>=4.3) ; extra == 'test'",
"pytest-mock ; extra == 'test'",
"pytest-cov ; extra == 'test'",
"pytest-asyncio ; extra == 'test'",
"pytest ; extra == 'test'",
"coverage[toml] ; extra == 'test'",
"cchardet ; extra == 'speed'",
"Brotli ; extra == 'speed'",
"aiodns (>=1.1) ; extra == 'speed'",
"orjson (>=3.5.4) ; extra == 'speed'",
"typing-extensions (<5,>=4.3) ; extra == 'docs'",
"sphinxcontrib-websupport ; extra == 'docs'",
"sphinxcontrib-trio (==1.1.2) ; extra == 'docs'",
"sphinx (==4.4.0) ; extra == 'docs'",
"aiohttp (<4,>=3.7.4)"
],
"requires_python": ">=3.8.0",
"summary": "A Python wrapper for the Discord API",
"version": "2.0.0",
"yanked": false,
"yanked_reason": null
},
"last_serial": 14796560,
"urls": [
{
"comment_text": "",
"digests": {
"md5": "4df2fceef99934d1fdac5a9b0aa94173",
"sha256": "18b06870bdc85d29e0d55f4a4b2abe9d7cdae2b197e23d49f82886ba27ba1aec"
},
"downloads": -1,
"filename": "discord.py-2.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "4df2fceef99934d1fdac5a9b0aa94173",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8.0",
"size": 1059049,
"upload_time": "2022-08-18T03:47:52",
"upload_time_iso_8601": "2022-08-18T03:47:52.438785Z",
"url": "https://files.pythonhosted.org/packages/0e/d9/7b057cab41c16144925ba4f96dab576a8ebb7b80a98d40e06bd94298eb3b/discord.py-2.0.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "3aaca51997210bd2ae4d4b5401c00ab7",
"sha256": "c36f26935938194c3465c2abf8ecfbbf5560c50b189f1b746d6f00d1e78c0d3b"
},
"downloads": -1,
"filename": "discord.py-2.0.0.tar.gz",
"has_sig": false,
"md5_digest": "3aaca51997210bd2ae4d4b5401c00ab7",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8.0",
"size": 955054,
"upload_time": "2022-08-18T03:47:54",
"upload_time_iso_8601": "2022-08-18T03:47:54.173712Z",
"url": "https://files.pythonhosted.org/packages/4c/73/fb89115b07588bf7a46e9eca972b89dd62b5856abd52297fe130b41d9d63/discord.py-2.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"vulnerabilities": []
}
......@@ -148,7 +148,7 @@ def test_missing_version() -> None:
def test_get_package_information_fallback_read_setup() -> None:
repo = MockRepository()
package = repo.package(canonicalize_name("jupyter"), Version.parse("1.0.0"))
package = repo.package("jupyter", Version.parse("1.0.0"))
assert package.source_type == "legacy"
assert package.source_reference == repo.name
......@@ -164,9 +164,7 @@ def test_get_package_information_fallback_read_setup() -> None:
def test_get_package_information_skips_dependencies_with_invalid_constraints() -> None:
repo = MockRepository()
package = repo.package(
canonicalize_name("python-language-server"), Version.parse("0.21.2")
)
package = repo.package("python-language-server", Version.parse("0.21.2"))
assert package.name == "python-language-server"
assert package.version.text == "0.21.2"
......@@ -199,6 +197,15 @@ def test_get_package_information_skips_dependencies_with_invalid_constraints() -
]
def test_package_not_canonicalized() -> None:
repo = MockRepository()
package = repo.package("discord.py", Version.parse("2.0.0"))
assert package.name == "discord-py"
assert package.pretty_name == "discord.py"
def test_find_packages_no_prereleases() -> None:
repo = MockRepository()
......@@ -255,7 +262,7 @@ def test_find_packages_yanked(constraint: str, expected: list[str]) -> None:
def test_get_package_information_chooses_correct_distribution() -> None:
repo = MockRepository()
package = repo.package(canonicalize_name("isort"), Version.parse("4.3.4"))
package = repo.package("isort", Version.parse("4.3.4"))
assert package.name == "isort"
assert package.version.text == "4.3.4"
......@@ -268,7 +275,7 @@ def test_get_package_information_chooses_correct_distribution() -> None:
def test_get_package_information_includes_python_requires() -> None:
repo = MockRepository()
package = repo.package(canonicalize_name("futures"), Version.parse("3.2.0"))
package = repo.package("futures", Version.parse("3.2.0"))
assert package.name == "futures"
assert package.version.text == "3.2.0"
......@@ -280,7 +287,7 @@ def test_get_package_information_sets_appropriate_python_versions_if_wheels_only
):
repo = MockRepository()
package = repo.package(canonicalize_name("futures"), Version.parse("3.2.0"))
package = repo.package("futures", Version.parse("3.2.0"))
assert package.name == "futures"
assert package.version.text == "3.2.0"
......@@ -290,7 +297,7 @@ def test_get_package_information_sets_appropriate_python_versions_if_wheels_only
def test_get_package_from_both_py2_and_py3_specific_wheels() -> None:
repo = MockRepository()
package = repo.package(canonicalize_name("ipython"), Version.parse("5.7.0"))
package = repo.package("ipython", Version.parse("5.7.0"))
assert package.name == "ipython"
assert package.version.text == "5.7.0"
......@@ -328,9 +335,7 @@ def test_get_package_from_both_py2_and_py3_specific_wheels() -> None:
def test_get_package_from_both_py2_and_py3_specific_wheels_python_constraint() -> None:
repo = MockRepository()
package = repo.package(
canonicalize_name("poetry-test-py2-py3-metadata-merge"), Version.parse("0.1.0")
)
package = repo.package("poetry-test-py2-py3-metadata-merge", Version.parse("0.1.0"))
assert package.name == "poetry-test-py2-py3-metadata-merge"
assert package.version.text == "0.1.0"
......@@ -340,7 +345,7 @@ def test_get_package_from_both_py2_and_py3_specific_wheels_python_constraint() -
def test_get_package_with_dist_and_universal_py3_wheel() -> None:
repo = MockRepository()
package = repo.package(canonicalize_name("ipython"), Version.parse("7.5.0"))
package = repo.package("ipython", Version.parse("7.5.0"))
assert package.name == "ipython"
assert package.version.text == "7.5.0"
......@@ -368,7 +373,7 @@ def test_get_package_with_dist_and_universal_py3_wheel() -> None:
def test_get_package_retrieves_non_sha256_hashes() -> None:
repo = MockRepository()
package = repo.package(canonicalize_name("ipython"), Version.parse("7.5.0"))
package = repo.package("ipython", Version.parse("7.5.0"))
expected = [
{
......@@ -387,7 +392,7 @@ def test_get_package_retrieves_non_sha256_hashes() -> None:
def test_get_package_retrieves_non_sha256_hashes_mismatching_known_hash() -> None:
repo = MockRepository()
package = repo.package(canonicalize_name("ipython"), Version.parse("5.7.0"))
package = repo.package("ipython", Version.parse("5.7.0"))
expected = [
{
......@@ -410,7 +415,7 @@ def test_get_package_retrieves_non_sha256_hashes_mismatching_known_hash() -> Non
def test_get_package_retrieves_packages_with_no_hashes() -> None:
repo = MockRepository()
package = repo.package(canonicalize_name("jupyter"), Version.parse("1.0.0"))
package = repo.package("jupyter", Version.parse("1.0.0"))
assert [
{
......@@ -432,7 +437,7 @@ def test_package_yanked(
) -> None:
repo = MockRepository()
package = repo.package(canonicalize_name(package_name), Version.parse(version))
package = repo.package(package_name, Version.parse(version))
assert package.name == package_name
assert str(package.version) == version
......@@ -446,11 +451,11 @@ def test_package_partial_yank():
return super()._get_page(f"/{endpoint.strip('/')}_partial_yank/")
repo = MockRepository()
package = repo.package(canonicalize_name("futures"), Version.parse("3.2.0"))
package = repo.package("futures", Version.parse("3.2.0"))
assert len(package.files) == 2
repo = SpecialMockRepository()
package = repo.package(canonicalize_name("futures"), Version.parse("3.2.0"))
package = repo.package("futures", Version.parse("3.2.0"))
assert len(package.files) == 1
assert package.files[0]["file"].endswith(".tar.gz")
......@@ -467,7 +472,7 @@ def test_find_links_for_package_yanked(
) -> None:
repo = MockRepository()
package = repo.package(canonicalize_name(package_name), Version.parse(version))
package = repo.package(package_name, Version.parse(version))
links = repo.find_links_for_package(package)
assert len(links) == 1
......
......@@ -2,7 +2,6 @@ from __future__ import annotations
import pytest
from packaging.utils import canonicalize_name
from poetry.core.semver.version import Version
from poetry.repositories import Pool
......@@ -16,7 +15,7 @@ def test_pool_raises_package_not_found_when_no_package_is_found() -> None:
pool.add_repository(Repository("repo"))
with pytest.raises(PackageNotFound):
pool.package(canonicalize_name("foo"), Version.parse("1.0.0"))
pool.package("foo", Version.parse("1.0.0"))
def test_pool():
......
......@@ -9,7 +9,6 @@ from typing import TYPE_CHECKING
import pytest
from packaging.utils import canonicalize_name
from poetry.core.packages.dependency import Dependency
from poetry.core.semver.version import Version
from requests.exceptions import TooManyRedirects
......@@ -117,7 +116,7 @@ def test_find_packages_yanked(constraint: str, expected: list[str]) -> None:
def test_package() -> None:
repo = MockRepository()
package = repo.package(canonicalize_name("requests"), Version.parse("2.18.4"))
package = repo.package("requests", Version.parse("2.18.4"))
assert package.name == "requests"
assert len(package.requires) == 9
......@@ -158,7 +157,7 @@ def test_package_yanked(
) -> None:
repo = MockRepository()
package = repo.package(package_name, version)
package = repo.package(package_name, Version.parse(version))
assert package.name == package_name
assert str(package.version) == version
......@@ -166,6 +165,15 @@ def test_package_yanked(
assert package.yanked_reason == yanked_reason
def test_package_not_canonicalized() -> None:
repo = MockRepository()
package = repo.package("discord.py", Version.parse("2.0.0"))
assert package.name == "discord-py"
assert package.pretty_name == "discord.py"
@pytest.mark.parametrize(
"package_name, version, yanked, yanked_reason",
[
......@@ -178,7 +186,7 @@ def test_find_links_for_package_yanked(
) -> None:
repo = MockRepository()
package = repo.package(package_name, version)
package = repo.package(package_name, Version.parse(version))
links = repo.find_links_for_package(package)
assert len(links) == 2
......@@ -190,7 +198,7 @@ def test_find_links_for_package_yanked(
def test_fallback_on_downloading_packages() -> None:
repo = MockRepository(fallback=True)
package = repo.package(canonicalize_name("jupyter"), Version.parse("1.0.0"))
package = repo.package("jupyter", Version.parse("1.0.0"))
assert package.name == "jupyter"
assert len(package.requires) == 6
......@@ -209,7 +217,7 @@ def test_fallback_on_downloading_packages() -> None:
def test_fallback_inspects_sdist_first_if_no_matching_wheels_can_be_found() -> None:
repo = MockRepository(fallback=True)
package = repo.package(canonicalize_name("isort"), Version.parse("4.3.4"))
package = repo.package("isort", Version.parse("4.3.4"))
assert package.name == "isort"
assert len(package.requires) == 1
......@@ -222,7 +230,7 @@ def test_fallback_inspects_sdist_first_if_no_matching_wheels_can_be_found() -> N
def test_fallback_can_read_setup_to_get_dependencies() -> None:
repo = MockRepository(fallback=True)
package = repo.package(canonicalize_name("sqlalchemy"), Version.parse("1.2.12"))
package = repo.package("sqlalchemy", Version.parse("1.2.12"))
assert package.name == "sqlalchemy"
assert len(package.requires) == 9
......@@ -244,7 +252,7 @@ def test_fallback_can_read_setup_to_get_dependencies() -> None:
def test_pypi_repository_supports_reading_bz2_files() -> None:
repo = MockRepository(fallback=True)
package = repo.package(canonicalize_name("twisted"), Version.parse("18.9.0"))
package = repo.package("twisted", Version.parse("18.9.0"))
assert package.name == "twisted"
assert len(package.requires) == 71
......
......@@ -2,7 +2,6 @@ from __future__ import annotations
import pytest
from packaging.utils import canonicalize_name
from poetry.core.packages.package import Package
from poetry.core.semver.version import Version
......@@ -53,11 +52,18 @@ def test_package_yanked(
yanked: bool,
yanked_reason: str,
) -> None:
package = black_repository.package(
canonicalize_name(package_name), Version.parse(version)
)
package = black_repository.package(package_name, Version.parse(version))
assert package.name == package_name
assert str(package.version) == version
assert package.yanked is yanked
assert package.yanked_reason == yanked_reason
def test_package_pretty_name_is_kept() -> None:
pretty_name = "Not_canoni-calized.name"
repo = Repository("repo")
repo.add_package(Package(pretty_name, "1.0"))
package = repo.package(pretty_name, Version.parse("1.0"))
assert package.pretty_name == pretty_name
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