aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/main.rs b/src/main.rs
new file mode 100644
index 0000000..4c28efa
--- /dev/null
+++ b/src/main.rs
@@ -0,0 +1,36 @@
+#![allow(unused)]
+fn main() {
+ use pyo3::prelude::*;
+
+ #[pymodule]
+ fn parent_module(py: Python<'_>, m: &PyModule) -> PyResult<()> {
+ register_child_module(py, m)?;
+ Ok(())
+ }
+
+ fn register_child_module(py: Python<'_>, parent_module: &PyModule) -> PyResult<()> {
+ let child_module = PyModule::new(py, "child_module")?;
+ child_module.add_function(wrap_pyfunction!(func, child_module)?)?;
+ parent_module.add_submodule(child_module)?;
+ Ok(())
+ }
+
+ #[pyfunction]
+ fn func() -> String {
+ "func".to_string()
+ }
+
+ Python::with_gil(|py| {
+ use pyo3::types::IntoPyDict;
+ use pyo3::wrap_pymodule;
+ let parent_module = wrap_pymodule!(parent_module)(py);
+ let ctx = [("parent_module", parent_module)].into_py_dict(py);
+
+ py.run(
+ "assert parent_module.child_module.func() == 'func'",
+ None,
+ Some(&ctx),
+ )
+ .unwrap();
+ })
+}