Skip to content

Commit 5a1c8fb

Browse files
authored
Merge pull request #22 from explosion/backport/packages-distributions
Backport packages_distributions from importlib_metadata v3.7.0
2 parents 8973785 + e696008 commit 5a1c8fb

1 file changed

Lines changed: 16 additions & 1 deletion

File tree

catalogue/_importlib_metadata/__init__.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
from importlib import import_module
2525
from importlib.abc import MetaPathFinder
2626
from itertools import starmap
27-
from typing import Any, List, TypeVar, Union
27+
from typing import Any, List, Mapping, TypeVar, Union
2828

2929

3030
__all__ = [
@@ -645,3 +645,18 @@ def requires(distribution_name):
645645
packaging.requirement.Requirement.
646646
"""
647647
return distribution(distribution_name).requires
648+
649+
650+
def packages_distributions() -> Mapping[str, List[str]]:
651+
"""
652+
Return a mapping of top-level packages to their
653+
distributions.
654+
>>> pkgs = packages_distributions()
655+
>>> all(isinstance(dist, collections.abc.Sequence) for dist in pkgs.values())
656+
True
657+
"""
658+
pkg_to_dist = collections.defaultdict(list)
659+
for dist in distributions():
660+
for pkg in (dist.read_text('top_level.txt') or '').split():
661+
pkg_to_dist[pkg].append(dist.metadata['Name'])
662+
return dict(pkg_to_dist)

0 commit comments

Comments
 (0)