MCPcopy
hub / github.com/cloudpipe/cloudpickle / _check_dynamic_module

Method _check_dynamic_module

tests/cloudpickle_test.py:542–577  ·  view source on GitHub ↗
(self, mod)

Source from the content-addressed store, hash-verified

540 self.assertEqual(pickle, pickle_clone)
541
542 def _check_dynamic_module(self, mod):
543 mod = types.ModuleType("mod")
544 code = """
545 x = 1
546 def f(y):
547 return x + y
548
549 class Foo:
550 def method(self, x):
551 return f(x)
552 """
553 exec(textwrap.dedent(code), mod.__dict__)
554 mod2 = pickle_depickle(mod, protocol=self.protocol)
555 self.assertEqual(mod.x, mod2.x)
556 self.assertEqual(mod.f(5), mod2.f(5))
557 self.assertEqual(mod.Foo().method(5), mod2.Foo().method(5))
558
559 if platform.python_implementation() != "PyPy":
560 # XXX: this fails with excessive recursion on PyPy.
561 mod3 = subprocess_pickle_echo(mod, protocol=self.protocol)
562 self.assertEqual(mod.x, mod3.x)
563 self.assertEqual(mod.f(5), mod3.f(5))
564 self.assertEqual(mod.Foo().method(5), mod3.Foo().method(5))
565
566 # Test dynamic modules when imported back are singletons
567 mod1, mod2 = pickle_depickle([mod, mod])
568 self.assertEqual(id(mod1), id(mod2))
569
570 # Ensure proper pickling of mod's functions when module "looks" like a
571 # file-backed module even though it is not:
572 try:
573 sys.modules["mod"] = mod
574 depickled_f = pickle_depickle(mod.f, protocol=self.protocol)
575 self.assertEqual(mod.f(5), depickled_f(5))
576 finally:
577 sys.modules.pop("mod", None)
578
579 def test_dynamic_module(self):
580 mod = types.ModuleType("mod")

Callers 2

test_dynamic_moduleMethod · 0.95

Calls 4

pickle_depickleFunction · 0.85
subprocess_pickle_echoFunction · 0.85
fMethod · 0.45
methodMethod · 0.45

Tested by

no test coverage detected