diff --git a/Cargo.lock b/Cargo.lock index afbd843..8868581 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -783,7 +783,7 @@ dependencies = [ [[package]] name = "pyroncalc" -version = "0.5.5" +version = "0.5.6" dependencies = [ "bitcode", "ironcalc", diff --git a/bindings/python/Cargo.toml b/bindings/python/Cargo.toml index 6ed1a03..a7e3e77 100644 --- a/bindings/python/Cargo.toml +++ b/bindings/python/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "pyroncalc" -version = "0.5.5" +version = "0.5.6" edition = "2021" diff --git a/bindings/python/pyproject.toml b/bindings/python/pyproject.toml index ab5edf9..b86b237 100644 --- a/bindings/python/pyproject.toml +++ b/bindings/python/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "ironcalc" -version = "0.5.5" +version = "0.5.6" description = "Create, edit and evaluate Excel spreadsheets" requires-python = ">=3.10" keywords = [ diff --git a/bindings/python/src/lib.rs b/bindings/python/src/lib.rs index bcd1db6..bb15d03 100644 --- a/bindings/python/src/lib.rs +++ b/bindings/python/src/lib.rs @@ -353,6 +353,16 @@ pub fn create_user_model_from_icalc(file_name: &str) -> PyResult { Ok(PyUserModel { model }) } +#[pyfunction] +pub fn create_user_model_from_bytes(bytes: &[u8]) -> PyResult { + let workbook: Workbook = + bitcode::decode(bytes).map_err(|e| WorkbookError::new_err(e.to_string()))?; + let model = + Model::from_workbook(workbook).map_err(|e| WorkbookError::new_err(e.to_string()))?; + let user_model = UserModel::from_model(model); + Ok(PyUserModel { model: user_model }) +} + #[pyfunction] #[allow(clippy::panic)] pub fn test_panic() { @@ -373,6 +383,7 @@ fn ironcalc(m: &Bound<'_, PyModule>) -> PyResult<()> { // User model functions m.add_function(wrap_pyfunction!(create_user_model, m)?)?; + m.add_function(wrap_pyfunction!(create_user_model_from_bytes, m)?)?; m.add_function(wrap_pyfunction!(create_user_model_from_xlsx, m)?)?; m.add_function(wrap_pyfunction!(create_user_model_from_icalc, m)?)?;