Skip to content

Commit

Permalink
Extract _topmost and _get_toplevel_name functions.
Browse files Browse the repository at this point in the history
  • Loading branch information
jaraco committed Jun 18, 2023
1 parent 4ebe490 commit 851b921
Showing 1 changed file with 27 additions and 4 deletions.
31 changes: 27 additions & 4 deletions importlib_metadata/__init__.py
Expand Up @@ -973,11 +973,34 @@ def _top_level_declared(dist):
return (dist.read_text('top_level.txt') or '').split()


def _topmost(name: PackagePath) -> Optional[str]:
"""
Return the top-most parent as long as there is a parent.
"""
top, *rest = name.parts
return top if rest else None


def _get_toplevel_name(name: PackagePath) -> str:
"""
Infer a possibly importable module name from a name presumed on
sys.path.
>>> _get_toplevel_name(PackagePath('foo.py'))
'foo'
>>> _get_toplevel_name(PackagePath('foo.pyc'))
'foo'
>>> _get_toplevel_name(PackagePath('foo/__init__.py'))
'foo'
"""
return _topmost(name) or (
# python/typeshed#10328
inspect.getmodulename(name) # type: ignore
)


def _top_level_inferred(dist):
opt_names = {
f.parts[0] if len(f.parts) > 1 else inspect.getmodulename(f)
for f in always_iterable(dist.files)
}
opt_names = set(map(_get_toplevel_name, always_iterable(dist.files)))

@pass_none
def importable_name(name):
Expand Down

0 comments on commit 851b921

Please sign in to comment.