File tree Expand file tree Collapse file tree 1 file changed +28
-0
lines changed Expand file tree Collapse file tree 1 file changed +28
-0
lines changed Original file line number Diff line number Diff line change @@ -196,6 +196,34 @@ def test_lazy_self_referential_modules(self):
196
196
test_load = module .loads ('{}' )
197
197
self .assertEqual (test_load , {})
198
198
199
+ def test_lazy_module_type_override (self ):
200
+ # Verify that lazy loading works with a module that modifies
201
+ # its __class__ to be a custom type.
202
+
203
+ # Example module from PEP 726
204
+ module = self .new_module (source_code = """\
205
+ import sys
206
+ from types import ModuleType
207
+
208
+ CONSTANT = 3.14
209
+
210
+ class ImmutableModule(ModuleType):
211
+ def __setattr__(self, name, value):
212
+ raise AttributeError('Read-only attribute!')
213
+
214
+ def __delattr__(self, name):
215
+ raise AttributeError('Read-only attribute!')
216
+
217
+ sys.modules[__name__].__class__ = ImmutableModule
218
+ """ )
219
+ sys .modules [TestingImporter .module_name ] = module
220
+ self .assertIsInstance (module , util ._LazyModule )
221
+ self .assertEqual (module .CONSTANT , 3.14 )
222
+ with self .assertRaises (AttributeError ):
223
+ module .CONSTANT = 2.71
224
+ with self .assertRaises (AttributeError ):
225
+ del module .CONSTANT
226
+
199
227
200
228
if __name__ == '__main__' :
201
229
unittest .main ()
You can’t perform that action at this time.
0 commit comments