Skip to content

Commit a542188

Browse files
committed
Extract method to encapsulate the validation.
1 parent 74f308a commit a542188

File tree

2 files changed

+18
-7
lines changed

2 files changed

+18
-7
lines changed

importlib_resources/_common.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,19 @@ def is_wrapper(frame_info):
105105
return next(callers).frame
106106

107107

108+
def _assert_spec(package: types.ModuleType) -> None:
109+
"""
110+
Provide a nicer error message when package is ``__main__``
111+
and its ``__spec__`` is ``None``
112+
(https://docs.python.org/3/reference/import.html#main-spec).
113+
"""
114+
if package.__spec__ is None:
115+
raise TypeError(
116+
f"Cannot access resources for '{package.__name__}' "
117+
"as it does not appear to correspond to an importable module (its __spec__ is None)."
118+
)
119+
120+
108121
def from_package(package: types.ModuleType):
109122
"""
110123
Return a Traversable object for the given package.
@@ -113,12 +126,7 @@ def from_package(package: types.ModuleType):
113126
# deferred for performance (python/cpython#109829)
114127
from .future.adapters import wrap_spec
115128

116-
if package.__spec__ is None:
117-
raise TypeError(
118-
f"Cannot access resources for '{package.__name__ or package!r}' "
119-
"as it does not appear to correspond to an importable module (its __spec__ is None)."
120-
)
121-
129+
_assert_spec(package)
122130
spec = wrap_spec(package)
123131
reader = spec.loader.get_resource_reader(spec.name)
124132
return reader.files()

importlib_resources/tests/test_resource.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,10 @@ def test_main_module_with_none_spec(self):
243243

244244
self.assertIsNone(mainmodule.__spec__)
245245

246-
with self.assertRaises(TypeError, msg="Cannot access resources for '__main__' as it does not appear to correspond to an importable module (its __spec__ is None)."):
246+
with self.assertRaises(
247+
TypeError,
248+
msg="Cannot access resources for '__main__' as it does not appear to correspond to an importable module (its __spec__ is None).",
249+
):
247250
resources.files(mainmodule)
248251

249252

0 commit comments

Comments
 (0)