macro_rules! rumtk_python_exec_module {
( $py:expr, $mod_path:expr) => { ... };
( $py:expr, $mod_path:expr, $func_name:expr ) => { ... };
( $py:expr, $mod_path:expr, $func_name:expr, $args:expr ) => { ... };
}Expand description
Load a Python module and execute contents.
§Example
§Running the Module
use std::fs::write;
use pyo3::Python;
use uuid::Uuid;
use crate::rumtk_core::core::RUMResult;
use crate::rumtk_core::rumtk_python_exec_module;
fn test_module_exec() {
let module_fname = format!("{}_module.py", Uuid::new_v4());
let module_contents = "print(\"Hello World!\")";
write(&module_fname, module_contents).expect("Failed to write file!");
let result = Python::attach(|py| -> RUMResult<()> {
rumtk_python_exec_module!(py, &module_fname);
Ok(())
});
std::fs::remove_file(&module_fname).unwrap();
}
test_module_exec()
§Running A Function
use std::fs::write;
use pyo3::Python;
use uuid::Uuid;
use crate::rumtk_core::core::RUMResult;
use crate::rumtk_core::rumtk_python_exec_module;
fn test_module_exec() {
let module_fname = format!("{}_module.py", Uuid::new_v4());
let module_contents = "def test():\n\tprint(\"Hello World!\")";
write(&module_fname, module_contents).expect("Failed to write file!");
let result = Python::attach(|py| -> RUMResult<()> {
rumtk_python_exec_module!(py, &module_fname, "test");
Ok(())
});
std::fs::remove_file(&module_fname).unwrap();
}
test_module_exec()
§Running A Function With Result
use std::fs::write;
use pyo3::Python;
use uuid::Uuid;
use crate::rumtk_core::core::RUMResult;
use crate::rumtk_core::scripting::python_utils::py_extract_any;
use crate::rumtk_core::rumtk_python_exec_module;
fn test_module_exec() -> usize {
let module_fname = format!("{}_module.py", Uuid::new_v4());
let module_contents = "def test():\n\treturn 5+5";
write(&module_fname, module_contents).expect("Failed to write file!");
let result = Python::attach(|py| -> RUMResult<usize> {
let result = rumtk_python_exec_module!(py, &module_fname, "test");
let val: usize = py_extract_any(py, &result)?;
Ok(val)
});
std::fs::remove_file(&module_fname).unwrap();
result.unwrap()
}
let result = test_module_exec();
assert_eq!(10, result, "Bad value returned from Python snippet!")
§Running A Function With Arguments and Result
use std::fs::write;
use pyo3::Python;
use uuid::Uuid;
use crate::rumtk_core::core::RUMResult;
use crate::rumtk_core::scripting::python_utils::{py_extract_any, py_new_args, py_push_arg};
use crate::rumtk_core::rumtk_python_exec_module;
fn test_module_exec() -> f64 {
let a = 5;
let b = 5.0;
let module_fname = format!("{}_module.py", Uuid::new_v4());
let module_contents = "def test(a,b):\n\treturn a+b";
write(&module_fname, module_contents).expect("Failed to write file!");
let result = Python::attach(|py| -> RUMResult<f64> {
let mut args = py_new_args(py);
py_push_arg(py, &mut args, &a);
py_push_arg(py, &mut args, &b);
let result = rumtk_python_exec_module!(py, &module_fname, "test", &args);
let val: f64 = py_extract_any(py, &result)?;
Ok(val)
});
std::fs::remove_file(&module_fname).unwrap();
result.unwrap()
}
let result = test_module_exec();
assert_eq!(10.0, result, "Bad value returned from Python snippet!")