Skip to content

Commit 3150ed4

Browse files
committed
Merge branch 'bugfix/110-attribute-error' into 'master'
Accommodate finders with to __module__ attribute. Closes #110 See merge request python-devs/importlib_metadata!112
2 parents bf25257 + 53fa219 commit 3150ed4

File tree

4 files changed

+38
-2
lines changed

4 files changed

+38
-2
lines changed

importlib_metadata/_compat.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ def disable_stdlib_finder():
7373
"""
7474
def matches(finder):
7575
return (
76-
finder.__module__ == '_frozen_importlib_external'
76+
getattr(finder, '__module__', None) == '_frozen_importlib_external'
7777
and hasattr(finder, 'find_distributions')
7878
)
7979
for finder in filter(matches, sys.meta_path): # pragma: nocover

importlib_metadata/docs/changelog.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ v1.5.0
77

88
* Additional performance optimizations in FastPath now
99
saves an additional 20% on a typical call.
10+
* Correct for issue where PyOxidizer finder has no
11+
``__module__`` attribute. Closes #110.
1012

1113
v1.4.0
1214
======

importlib_metadata/tests/fixtures.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,15 @@ def tempdir_as_cwd():
4747
yield tmp
4848

4949

50+
@contextlib.contextmanager
51+
def install_finder(finder):
52+
sys.meta_path.append(finder)
53+
try:
54+
yield
55+
finally:
56+
sys.meta_path.remove(finder)
57+
58+
5059
class Fixtures:
5160
def setUp(self):
5261
self.fixtures = ExitStack()
@@ -203,3 +212,8 @@ def build_files(file_defs, prefix=pathlib.Path()):
203212
def DALS(str):
204213
"Dedent and left-strip"
205214
return textwrap.dedent(str).lstrip()
215+
216+
217+
class NullFinder:
218+
def find_module(self, name):
219+
pass

importlib_metadata/tests/test_integration.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
import packaging.version
44

55
from . import fixtures
6-
from .. import version
6+
from .. import (
7+
_compat,
8+
version,
9+
)
710

811

912
class IntegrationTests(fixtures.DistInfoPkg, unittest.TestCase):
@@ -20,3 +23,20 @@ def is_installed(package_spec):
2023
assert is_installed('distinfo-pkg==1.0')
2124
assert is_installed('distinfo-pkg>=1.0,<2.0')
2225
assert not is_installed('distinfo-pkg<1.0')
26+
27+
28+
class FinderTests(fixtures.Fixtures, unittest.TestCase):
29+
30+
def test_finder_without_module(self):
31+
class ModuleFreeFinder(fixtures.NullFinder):
32+
"""
33+
A finder without an __module__ attribute
34+
"""
35+
def __getattribute__(self, name):
36+
if name == '__module__':
37+
raise AttributeError(name)
38+
return super().__getattribute__(name)
39+
40+
self.fixtures.enter_context(
41+
fixtures.install_finder(ModuleFreeFinder()))
42+
_compat.disable_stdlib_finder()

0 commit comments

Comments
 (0)