Skip to content

Commit 6148a7a

Browse files
committed
feat: support private sub-packages
1 parent f7b469e commit 6148a7a

5 files changed

Lines changed: 13 additions & 17 deletions

File tree

pybind/pybind.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ PYBIND11_MODULE(pybind, m) {
1919

2020
auto subM = m.def_submodule("sub", "submodule");
2121
subM.def("second_func", &second_func, "");
22-
auto subSubM = subM.def_submodule("sub_sub", "sub submodule");
22+
auto subSubM = subM.def_submodule("_sub_private", "sub submodule");
2323
subSubM.def("sub_sub_func", &sub_sub_func, "");
24-
subSubM.def("_sub_sub_private_func", &sub_sub_func, "private sub func");
24+
subSubM.def("_sub_private_private_func", &sub_sub_func, "private sub func");
2525
}

pybind/pybind_py_test.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
from pybind.pybind_copy import _EXTRA_SYMBOL as REGULAR_COPY_EXTRA_SYMBOL
99
from pybind.pybind.sub import second_func as sub_second_func
1010
import pybind.pybind.sub
11-
from pybind.pybind.sub.sub_sub import *
12-
from pybind.pybind.sub.sub_sub import _sub_sub_private_func
11+
from pybind.pybind.sub._sub_private import *
12+
from pybind.pybind.sub._sub_private import _sub_private_private_func
1313
from pybind.sub_pybind.relative_import_lib import call_nested_pyind_func
1414
from pybind.sub_pybind.relative_import_lib import sub_sub_private_func
1515

@@ -56,8 +56,8 @@ def test_pybind_first(self):
5656
print("14: Submodules")
5757
self.assertEqual(sub_second_func(1), 5)
5858
self.assertEqual(pybind.pybind.sub.second_func(1), 6)
59-
self.assertEqual(pybind.pybind.sub.sub_sub.sub_sub_func(3), 6)
60-
self.assertEqual(_sub_sub_private_func(5), 10)
59+
self.assertEqual(pybind.pybind.sub._sub_private.sub_sub_func(3), 6)
60+
self.assertEqual(_sub_private_private_func(5), 10)
6161

6262
print("15: Nested pybinds and relative imports")
6363
self.assertEqual(call_nested_pyind_func(6), 3)
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
from .nested_pybind import nested_pybind_func
2-
from ..pybind.sub.sub_sub import _sub_sub_private_func
2+
from ..pybind.sub._sub_private import _sub_private_private_func
33

44
def call_nested_pyind_func(x):
55
return nested_pybind_func(x)
66

77
def sub_sub_private_func(x):
8-
return _sub_sub_private_func(x)
8+
return _sub_private_private_func(x)

pybind_external/pybind_external_py_test.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
from pybind.pybind_copy import _EXTRA_SYMBOL as REGULAR_COPY_EXTRA_SYMBOL
99
from pybind.pybind.sub import second_func as sub_second_func
1010
import pybind.pybind.sub
11-
from pybind.pybind.sub.sub_sub import *
12-
from pybind.pybind.sub.sub_sub import _sub_sub_private_func
11+
from pybind.pybind.sub._sub_private import *
12+
from pybind.pybind.sub._sub_private import _sub_private_private_func
1313
from pybind.sub_pybind.relative_import_lib import call_nested_pyind_func
1414
from pybind.sub_pybind.relative_import_lib import sub_sub_private_func
1515

@@ -56,8 +56,8 @@ def test_pybind_first(self):
5656
print("14: Submodules")
5757
self.assertEqual(sub_second_func(1), 5)
5858
self.assertEqual(pybind.pybind.sub.second_func(1), 6)
59-
self.assertEqual(pybind.pybind.sub.sub_sub.sub_sub_func(3), 6)
60-
self.assertEqual(_sub_sub_private_func(5), 10)
59+
self.assertEqual(pybind.pybind.sub._sub_private.sub_sub_func(3), 6)
60+
self.assertEqual(_sub_private_private_func(5), 10)
6161

6262
print("15: Nested pybinds and relative imports")
6363
self.assertEqual(call_nested_pyind_func(6), 3)

rules_pywrap/pybind_extension.py.tpl

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,7 @@ from sys import modules
22
from types import ModuleType
33

44
def __update_globals(new_import_path, pywrap_m):
5-
if hasattr(pywrap_m, '__all__'):
6-
all_names = pywrap_m.__all__
7-
else:
8-
all_names = [name for name in dir(pywrap_m) if not name.startswith('_')]
9-
5+
all_names = pywrap_m.__all__ if hasattr(pywrap_m, '__all__') else dir(pywrap_m)
106
modules[new_import_path] = pywrap_m
117
for name in all_names:
128
sub_pywrap = getattr(pywrap_m, name)

0 commit comments

Comments
 (0)