Skip to content

Commit 0b4953e

Browse files
committed
gh-92525: make inspect.getfile PEP 420 compliant
1 parent 392fd27 commit 0b4953e

File tree

3 files changed

+10
-0
lines changed

3 files changed

+10
-0
lines changed

Lib/inspect.py

+3
Original file line numberDiff line numberDiff line change
@@ -898,6 +898,9 @@ def getfile(object):
898898
if ismodule(object):
899899
if getattr(object, '__file__', None):
900900
return object.__file__
901+
if getattr(object, '__path__', None):
902+
# Implicit namespace package. See PEP 420.
903+
return object.__path__[0]
901904
raise TypeError('{!r} is a built-in module'.format(object))
902905
if isclass(object):
903906
if hasattr(object, '__module__'):

Lib/test/test_inspect.py

+6
Original file line numberDiff line numberDiff line change
@@ -620,6 +620,12 @@ def __repr__(self):
620620
with self.assertRaises(TypeError):
621621
inspect.getfile(er)
622622

623+
def test_getfile_implicit_namespace_package(self):
624+
import test_importlib.namespace_pkgs.module_and_namespace_package as pkg
625+
path = inspect.getfile(pkg)
626+
self.assertIn("test_importlib/namespace_pkgs/module_and_namespace_package", path)
627+
self.assertNotIn("built-in", path)
628+
623629
def test_getmodule_recursion(self):
624630
from types import ModuleType
625631
name = '__inspect_dummy'
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Make ``inspect.getfile`` understand PEP 420 implicit namespace packages

0 commit comments

Comments
 (0)