File tree Expand file tree Collapse file tree 3 files changed +22
-3
lines changed
Expand file tree Collapse file tree 3 files changed +22
-3
lines changed Original file line number Diff line number Diff line change @@ -160,9 +160,9 @@ def files(self):
160160 return CompatibilityFiles .SpecPath (self .spec , self ._reader )
161161
162162
163- def wrap_spec (package ):
163+ def wrap_spec (spec ):
164164 """
165165 Construct a package spec with traversable compatibility
166166 on the spec/loader/reader.
167167 """
168- return SpecLoaderAdapter (package . __spec__ , TraversableResourcesLoader )
168+ return SpecLoaderAdapter (spec , TraversableResourcesLoader )
Original file line number Diff line number Diff line change @@ -79,7 +79,13 @@ def from_package(package: types.ModuleType):
7979 # deferred for performance (python/cpython#109829)
8080 from .future .adapters import wrap_spec
8181
82- spec = wrap_spec (package )
82+ if package .__spec__ is None :
83+ raise TypeError (
84+ f"Cannot access resources for '{ package .__name__ or package !r} ' "
85+ "as it does not appear to correspond to an importable module (its __spec__ is None)."
86+ )
87+
88+ spec = wrap_spec (package .__spec__ )
8389 reader = spec .loader .get_resource_reader (spec .name )
8490 return reader .files ()
8591
Original file line number Diff line number Diff line change 1+ import types
12import unittest
23from importlib import import_module
34
@@ -219,5 +220,17 @@ class ResourceFromNamespaceZipTests(
219220 MODULE = 'namespacedata01'
220221
221222
223+ class ResourceFromMainModuleWithNoneSpecTests (unittest .TestCase ):
224+ # `__main__.__spec__` can be `None` depending on how it is populated.
225+ # https://docs.python.org/3/reference/import.html#main-spec
226+ def test_main_module_with_none_spec (self ):
227+ mainmodule = types .ModuleType ("__main__" )
228+
229+ self .assertIsNone (mainmodule .__spec__ )
230+
231+ 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)." ):
232+ resources .files (mainmodule )
233+
234+
222235if __name__ == '__main__' :
223236 unittest .main ()
You can’t perform that action at this time.
0 commit comments