Issue #28026: Raise ImportError when exec_module() exists but create_module() is missing.

This commit is contained in:
Eric Snow 2016-09-08 11:12:31 -07:00
parent e58571b7ea
commit f3fd06a2e4
4 changed files with 902 additions and 910 deletions

View File

@ -559,9 +559,8 @@ def module_from_spec(spec):
# module creation should be used.
module = spec.loader.create_module(spec)
elif hasattr(spec.loader, 'exec_module'):
_warnings.warn('starting in Python 3.6, loaders defining exec_module() '
'must also define create_module()',
DeprecationWarning, stacklevel=2)
raise ImportError('loaders that define exec_module() '
'must also define create_module()')
if module is None:
module = _new_module(spec.name)
_init_module_attrs(spec, module)

View File

@ -47,14 +47,8 @@ class ModuleFromSpecTests:
def exec_module(self, module):
pass
spec = self.machinery.ModuleSpec('test', Loader())
with warnings.catch_warnings(record=True) as w:
warnings.simplefilter('always')
with self.assertRaises(ImportError):
module = self.util.module_from_spec(spec)
self.assertEqual(1, len(w))
self.assertTrue(issubclass(w[0].category, DeprecationWarning))
self.assertIn('create_module', str(w[0].message))
self.assertIsInstance(module, types.ModuleType)
self.assertEqual(module.__name__, spec.name)
def test_create_module_returns_None(self):
class Loader(self.abc.Loader):

View File

@ -6968,6 +6968,9 @@ Core and Builtins
- Issue #19369: Optimized the usage of __length_hint__().
- Issue #28026: Raise ImportError when exec_module() exists but
create_module() is missing.
- Issue #18603: Ensure that PyOS_mystricmp and PyOS_mystrnicmp are in the
Python executable and not removed by the linker's optimizer.

File diff suppressed because it is too large Load Diff