Skip to content

Commit 56aee03

Browse files
FFY00jaraco
authored andcommitted
Add missing modules to packages_distributions
Signed-off-by: Filipe Laíns <[email protected]>
1 parent b944c37 commit 56aee03

File tree

2 files changed

+40
-5
lines changed

2 files changed

+40
-5
lines changed

importlib_metadata/__init__.py

Lines changed: 9 additions & 5 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,11 @@ 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
902-
for f in always_iterable(dist.files)
903-
if f.suffix == ".py"
904-
}
901+
return filter(
902+
None,
903+
{
904+
# this logic relies on the assumption that dist.files only contains files (not directories)
905+
inspect.getmodulename(f) if len(f.parts) == 1 else f.parts[0]
906+
for f in always_iterable(dist.files)
907+
},
908+
)

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)