Skip to content

Commit 66e8e9b

Browse files
authored
Merge pull request #432 from FFY00/gh-428
Add missing modules to packages_distributions
2 parents b944c37 + df7824b commit 66e8e9b

File tree

3 files changed

+42
-3
lines changed

3 files changed

+42
-3
lines changed

CHANGES.rst

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
v6.1.0
2+
======
3+
4+
* #428: ``packages_distributions`` now honors packages and modules
5+
with Python modules that not ``.py`` sources (e.g. ``.pyc``,
6+
``.so``).
7+
18
v6.0.1
29
======
310

importlib_metadata/__init__.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import itertools
1414
import posixpath
1515
import collections
16+
import inspect
1617

1718
from . import _adapters, _meta, _py39compat
1819
from ._collections import FreezableDefaultDict, Pair
@@ -897,8 +898,8 @@ def _top_level_declared(dist):
897898

898899

899900
def _top_level_inferred(dist):
900-
return {
901-
f.parts[0] if len(f.parts) > 1 else f.with_suffix('').name
901+
opt_names = {
902+
f.parts[0] if len(f.parts) > 1 else inspect.getmodulename(f)
902903
for f in always_iterable(dist.files)
903-
if f.suffix == ".py"
904904
}
905+
return filter(None, opt_names)

tests/test_main.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,3 +322,34 @@ def test_packages_distributions_neither_toplevel_nor_files(self):
322322
prefix=self.site_dir,
323323
)
324324
packages_distributions()
325+
326+
def test_packages_distributions_all_module_types(self):
327+
"""
328+
Test top-level modules detected on a package without 'top-level.txt'.
329+
"""
330+
suffixes = importlib.machinery.all_suffixes()
331+
fixtures.build_files(
332+
{
333+
'all_distributions-1.0.0.dist-info': {
334+
'METADATA': """
335+
Name: all_distributions
336+
Version: 1.0.0
337+
""",
338+
'RECORD': ''.join(
339+
f'{i}-top-level{suffix},,\n'
340+
f'{i}-in-namespace/mod{suffix},,\n'
341+
f'{i}-in-package/__init__.py,,\n'
342+
f'{i}-in-package/mod{suffix},,\n'
343+
for i, suffix in enumerate(suffixes)
344+
),
345+
},
346+
},
347+
prefix=self.site_dir,
348+
)
349+
350+
distributions = packages_distributions()
351+
352+
for i in range(len(suffixes)):
353+
assert distributions[f'{i}-top-level'] == ['all_distributions']
354+
assert distributions[f'{i}-in-namespace'] == ['all_distributions']
355+
assert distributions[f'{i}-in-package'] == ['all_distributions']

0 commit comments

Comments
 (0)