From 9effd8e4b59e997b76c95b1cd9718344f04d31c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Hatcher?= Date: Tue, 3 Jun 2025 11:48:37 +0200 Subject: [PATCH] FIX: adds create user_model_from_bytes --- Cargo.lock | 2 +- bindings/python/Cargo.toml | 2 +- bindings/python/pyproject.toml | 2 +- bindings/python/src/lib.rs | 11 +++++++++++ 4 files changed, 14 insertions(+), 3 deletions(-) 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)?)?;