Skip to content

Commit b6e2355

Browse files
committed
Ad method to access the raw project name
1 parent e11c182 commit b6e2355

File tree

5 files changed

+22
-17
lines changed

5 files changed

+22
-17
lines changed

news/9825.process.rst

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

src/pip/_internal/commands/list.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -252,10 +252,10 @@ def output_package_listing(self, packages, options):
252252
elif options.list_format == 'freeze':
253253
for dist in packages:
254254
if options.verbose >= 1:
255-
write_output("%s==%s (%s)", dist.canonical_name,
255+
write_output("%s==%s (%s)", dist.raw_name,
256256
dist.version, dist.location)
257257
else:
258-
write_output("%s==%s", dist.canonical_name, dist.version)
258+
write_output("%s==%s", dist.raw_name, dist.version)
259259
elif options.list_format == 'json':
260260
write_output(format_for_json(packages, options))
261261

@@ -297,7 +297,7 @@ def format_for_columns(pkgs, options):
297297
for proj in pkgs:
298298
# if we're working on the 'outdated' list, separate out the
299299
# latest_version and type
300-
row = [proj.canonical_name, str(proj.version)]
300+
row = [proj.raw_name, str(proj.version)]
301301

302302
if running_outdated:
303303
row.append(str(proj.latest_version))
@@ -318,7 +318,7 @@ def format_for_json(packages, options):
318318
data = []
319319
for dist in packages:
320320
info = {
321-
'name': dist.canonical_name,
321+
'name': dist.raw_name,
322322
'version': str(dist.version),
323323
}
324324
if options.verbose >= 1:

src/pip/_internal/commands/show.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@ def search_packages_info(query: List[str]) -> Iterator[_PackageInfo]:
9090

9191
def _get_requiring_packages(current_dist: BaseDistribution) -> List[str]:
9292
return [
93-
dist.canonical_name
94-
for dist in env.iter_distributions()
93+
dist.metadata["Name"] or "UNKNOWN"
94+
for dist in installed.values()
9595
if current_dist.canonical_name in {
9696
canonicalize_name(d.name) for d in dist.iter_dependencies()
9797
}
@@ -132,7 +132,7 @@ def _files_from_installed_files(dist: BaseDistribution) -> Optional[Iterator[str
132132
metadata = dist.metadata
133133

134134
yield _PackageInfo(
135-
name=dist.canonical_name,
135+
name=dist.raw_name,
136136
version=str(dist.version),
137137
location=dist.location or "",
138138
requires=[req.name for req in dist.iter_dependencies()],

src/pip/_internal/metadata/base.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,16 @@ def metadata(self) -> email.message.Message:
9595

9696
@property
9797
def metadata_version(self) -> Optional[str]:
98-
"""Value of "Metadata-Version:" in the distribution, if available."""
98+
"""Value of "Metadata-Version:" in distribution metadata, if available."""
9999
return self.metadata.get("Metadata-Version")
100100

101+
@property
102+
def raw_name(self) -> str:
103+
"""Value of "Name:" in distribution metadata."""
104+
# The metadata should NEVER be missing the Name: key, but if it somehow
105+
# does not, fall back to the known canonical name.
106+
return self.metadata.get("Name", self.canonical_name)
107+
101108
def iter_dependencies(self, extras: Collection[str] = ()) -> Iterable[Requirement]:
102109
raise NotImplementedError()
103110

tests/functional/test_list.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -96,14 +96,14 @@ def test_local_columns_flag(simple_script):
9696

9797
def test_multiple_exclude_and_normalization(script, tmpdir):
9898
req_path = wheel.make_wheel(
99-
name="Normalizable_Name", version="1.0").save_to_dir(tmpdir)
99+
name="Normalizable-Name", version="1.0").save_to_dir(tmpdir)
100100
script.pip("install", "--no-index", req_path)
101101
result = script.pip("list")
102102
print(result.stdout)
103-
assert "normalizable-name" in result.stdout
103+
assert "Normalizable-Name" in result.stdout
104104
assert "pip" in result.stdout
105105
result = script.pip("list", "--exclude", "normalizablE-namE", "--exclude", "pIp")
106-
assert "normalizable-name" not in result.stdout
106+
assert "Normalizable-Name" not in result.stdout
107107
assert "pip" not in result.stdout
108108

109109

@@ -477,10 +477,10 @@ def test_not_required_flag(script, data):
477477
'install', '-f', data.find_links, '--no-index', 'TopoRequires4'
478478
)
479479
result = script.pip('list', '--not-required', expect_stderr=True)
480-
assert 'toporequires4 ' in result.stdout, str(result)
481-
assert 'toporequires ' not in result.stdout
482-
assert 'toporequires2 ' not in result.stdout
483-
assert 'toporequires3 ' not in result.stdout
480+
assert 'TopoRequires4 ' in result.stdout, str(result)
481+
assert 'TopoRequires ' not in result.stdout
482+
assert 'TopoRequires2 ' not in result.stdout
483+
assert 'TopoRequires3 ' not in result.stdout
484484

485485

486486
def test_list_freeze(simple_script):

0 commit comments

Comments
 (0)