Skip to content

Commit e50c07e

Browse files
committed
Merge DictMetadata tests into metadata tests
1 parent 91f7267 commit e50c07e

File tree

3 files changed

+57
-60
lines changed

3 files changed

+57
-60
lines changed

src/pip/_internal/metadata/pkg_resources.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class EntryPoint(NamedTuple):
3333
group: str
3434

3535

36-
class _WheelMetadata:
36+
class WheelMetadata:
3737
"""IMetadataProvider that reads metadata files from a dictionary.
3838
3939
This also maps metadata decoding exceptions to our internal exception type.
@@ -115,7 +115,7 @@ def from_wheel(cls, wheel: Wheel, name: str) -> "Distribution":
115115
raise UnsupportedWheel(f"{name} has an invalid wheel, {e}")
116116
dist = pkg_resources.DistInfoDistribution(
117117
location=wheel.location,
118-
metadata=_WheelMetadata(metadata_text, wheel.location),
118+
metadata=WheelMetadata(metadata_text, wheel.location),
119119
project_name=name,
120120
)
121121
return cls(dist)

tests/unit/metadata/test_metadata_pkg_resources.py

Lines changed: 55 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,18 @@
1+
import email.message
12
import itertools
23
from typing import List, cast
34
from unittest import mock
45

56
import pytest
6-
7-
from pip._internal.metadata.pkg_resources import Distribution, Environment
7+
from pip._vendor.packaging.specifiers import SpecifierSet
8+
from pip._vendor.packaging.version import parse as parse_version
9+
10+
from pip._internal.exceptions import UnsupportedWheel
11+
from pip._internal.metadata.pkg_resources import (
12+
Distribution,
13+
Environment,
14+
WheelMetadata,
15+
)
816

917
pkg_resources = pytest.importorskip("pip._vendor.pkg_resources")
1018

@@ -68,3 +76,48 @@ def test_get_distribution(ws: _MockWorkingSet, req_name: str) -> None:
6876
def test_get_distribution_nonexist() -> None:
6977
dist = Environment(workingset).get_distribution("non-exist")
7078
assert dist is None
79+
80+
81+
def test_wheel_metadata_works() -> None:
82+
name = "simple"
83+
version = "0.1.0"
84+
require_a = "a==1.0"
85+
require_b = 'b==1.1; extra == "also_b"'
86+
requires = [require_a, require_b, 'c==1.2; extra == "also_c"']
87+
extras = ["also_b", "also_c"]
88+
requires_python = ">=3"
89+
90+
metadata = email.message.Message()
91+
metadata["Name"] = name
92+
metadata["Version"] = version
93+
for require in requires:
94+
metadata["Requires-Dist"] = require
95+
for extra in extras:
96+
metadata["Provides-Extra"] = extra
97+
metadata["Requires-Python"] = requires_python
98+
99+
dist = Distribution(
100+
pkg_resources.DistInfoDistribution(
101+
location="<in-memory>",
102+
metadata=WheelMetadata({"METADATA": metadata.as_bytes()}, "<in-memory>"),
103+
project_name=name,
104+
),
105+
)
106+
107+
assert name == dist.canonical_name == dist.raw_name
108+
assert parse_version(version) == dist.version
109+
assert set(extras) == set(dist.iter_provided_extras())
110+
assert [require_a] == [str(r) for r in dist.iter_dependencies()]
111+
assert [require_a, require_b] == [
112+
str(r) for r in dist.iter_dependencies(["also_b"])
113+
]
114+
assert metadata.as_string() == dist.metadata.as_string()
115+
assert SpecifierSet(requires_python) == dist.requires_python
116+
117+
118+
def test_wheel_metadata_throws_on_bad_unicode() -> None:
119+
metadata = WheelMetadata({"METADATA": b"\xff"}, "<in-memory>")
120+
121+
with pytest.raises(UnsupportedWheel) as e:
122+
metadata.get_metadata("METADATA")
123+
assert "METADATA" in str(e.value)

tests/unit/test_utils_pkg_resources.py

Lines changed: 0 additions & 56 deletions
This file was deleted.

0 commit comments

Comments
 (0)