Skip to content

Commit

Permalink
pythongh-117182: Test interaction between lazy modules and self-modif…
Browse files Browse the repository at this point in the history
…ying modules
  • Loading branch information
effigies committed Mar 29, 2024
1 parent 2e9be80 commit 933c646
Showing 1 changed file with 28 additions and 0 deletions.
28 changes: 28 additions & 0 deletions Lib/test/test_importlib/test_lazy.py
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,34 @@ def test_lazy_self_referential_modules(self):
test_load = module.loads('{}')
self.assertEqual(test_load, {})

def test_lazy_module_type_override(self):
# Verify that lazy loading works with a module that modifies
# its __class__ to be a custom type.

# Example module from PEP 726
module = self.new_module(source_code="""\
import sys
from types import ModuleType
CONSTANT = 3.14
class ImmutableModule(ModuleType):
def __setattr__(self, name, value):
raise AttributeError('Read-only attribute!')
def __delattr__(self, name):
raise AttributeError('Read-only attribute!')
sys.modules[__name__].__class__ = ImmutableModule
""")
sys.modules[TestingImporter.module_name] = module
self.assertIsInstance(module, util._LazyModule)
self.assertEqual(module.CONSTANT, 3.14)
with self.assertRaises(AttributeError):
module.CONSTANT = 2.71
with self.assertRaises(AttributeError):
del module.CONSTANT


if __name__ == '__main__':
unittest.main()

0 comments on commit 933c646

Please sign in to comment.