Skip to content

Commit da60d2d

Browse files
committed
test nested importable dynamic submodules.
1 parent 4828874 commit da60d2d

2 files changed

Lines changed: 16 additions & 0 deletions

File tree

tests/cloudpickle_test.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -715,6 +715,13 @@ def test_module_importability(self):
715715
assert _is_importable(m)
716716
assert pickle_depickle(m, protocol=self.protocol) is m
717717

718+
# Do the same for an importable dynamic submodule inside a dynamic
719+
# module inside a file-backed module.
720+
import _cloudpickle_testpkg.mod.dynamic_submodule.dynamic_subsubmodule as sm # noqa
721+
assert _is_dynamic(sm)
722+
assert _is_importable(sm)
723+
assert pickle_depickle(sm, protocol=self.protocol) is sm
724+
718725
expected = "cannot check importability of object instances"
719726
with pytest.raises(TypeError, match=expected):
720727
_is_importable(object())

tests/cloudpickle_testpkg/_cloudpickle_testpkg/mod.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,15 @@
2424
dynamic_submodule = types.ModuleType(submodule_name)
2525
sys.modules[submodule_name] = dynamic_submodule
2626

27+
# What about a dynamic submodule inside a dynamic submodule inside an
28+
# importable module?
29+
subsubmodule_name = (
30+
'_cloudpickle_testpkg.mod.dynamic_submodule.dynamic_subsubmodule'
31+
)
32+
dynamic_subsubmodule = types.ModuleType(subsubmodule_name)
33+
dynamic_submodule.dynamic_subsubmodule = dynamic_subsubmodule
34+
sys.modules[subsubmodule_name] = dynamic_subsubmodule
35+
2736

2837
def module_function():
2938
return "hello from a module!"

0 commit comments

Comments
 (0)