diff --git a/apis/python/operator/src/lib.rs b/apis/python/operator/src/lib.rs index c4b97e3b..443e3219 100644 --- a/apis/python/operator/src/lib.rs +++ b/apis/python/operator/src/lib.rs @@ -13,7 +13,7 @@ use futures::{Stream, StreamExt}; use futures_concurrency::stream::Merge as _; use pyo3::{ prelude::*, - types::{IntoPyDict, PyBool, PyDict, PyInt, PyString}, + types::{IntoPyDict, PyBool, PyDict, PyInt, PyList, PyString, PyTuple}, }; /// Dora Event @@ -173,6 +173,18 @@ pub fn pydict_to_metadata(dict: Option>) -> Result()?)) } else if value.is_instance_of::() { parameters.insert(key, Parameter::String(value.extract()?)) + } else if value.is_instance_of::() + && value.len()? > 0 + && value.get_item(0)?.is_exact_instance_of::() + { + let list: Vec = value.extract()?; + parameters.insert(key, Parameter::ListInt(list)) + } else if value.is_instance_of::() + && value.len()? > 0 + && value.get_item(0)?.is_exact_instance_of::() + { + let list: Vec = value.extract()?; + parameters.insert(key, Parameter::ListInt(list)) } else { println!("could not convert type {value}"); parameters.insert(key, Parameter::String(value.str()?.to_string())) @@ -198,6 +210,9 @@ pub fn metadata_to_pydict<'a>( Parameter::String(s) => dict .set_item(k, s) .context("Could not insert metadata into python dictionary")?, + Parameter::ListInt(l) => dict + .set_item(k, l) + .context("Could not insert metadata into python dictionary")?, } } diff --git a/libraries/message/src/metadata.rs b/libraries/message/src/metadata.rs index f0328c5c..35c52db1 100644 --- a/libraries/message/src/metadata.rs +++ b/libraries/message/src/metadata.rs @@ -60,6 +60,7 @@ pub enum Parameter { Bool(bool), Integer(i64), String(String), + ListInt(Vec), } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]