FIX: Python add load/from bytes
This commit is contained in:
3
Cargo.lock
generated
3
Cargo.lock
generated
@@ -783,8 +783,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "pyroncalc"
|
||||
version = "0.5.2"
|
||||
version = "0.5.3"
|
||||
dependencies = [
|
||||
"bitcode",
|
||||
"ironcalc",
|
||||
"pyo3",
|
||||
"serde",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "pyroncalc"
|
||||
version = "0.5.2"
|
||||
version = "0.5.3"
|
||||
edition = "2021"
|
||||
|
||||
|
||||
@@ -14,6 +14,7 @@ serde = { version = "1.0", features = ["derive"] }
|
||||
serde_json = "1.0"
|
||||
xlsx = { package= "ironcalc", path = "../../xlsx", version = "0.5.0" }
|
||||
pyo3 = { version = "0.25", features = ["extension-module"] }
|
||||
bitcode = "0.6.3"
|
||||
|
||||
|
||||
[features]
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
[project]
|
||||
name = "ironcalc"
|
||||
version = "0.5.2"
|
||||
version = "0.5.3"
|
||||
description = "Create, edit and evaluate Excel spreadsheets"
|
||||
requires-python = ">=3.10"
|
||||
keywords = [
|
||||
|
||||
@@ -2,7 +2,7 @@ use pyo3::exceptions::PyException;
|
||||
use pyo3::{create_exception, prelude::*, wrap_pyfunction};
|
||||
|
||||
use types::{PySheetProperty, PyStyle};
|
||||
use xlsx::base::types::Style;
|
||||
use xlsx::base::types::{Style, Workbook};
|
||||
use xlsx::base::{Model, UserModel};
|
||||
|
||||
use xlsx::export::{save_to_icalc, save_to_xlsx};
|
||||
@@ -81,6 +81,12 @@ impl PyModel {
|
||||
save_to_icalc(&self.model, file).map_err(|e| WorkbookError::new_err(e.to_string()))
|
||||
}
|
||||
|
||||
/// To bytes
|
||||
pub fn to_bytes(&self) -> PyResult<Vec<u8>> {
|
||||
let bytes = self.model.to_bytes();
|
||||
Ok(bytes)
|
||||
}
|
||||
|
||||
/// Evaluates the workbook
|
||||
pub fn evaluate(&mut self) {
|
||||
self.model.evaluate()
|
||||
@@ -298,6 +304,15 @@ pub fn load_from_icalc(file_name: &str) -> PyResult<PyModel> {
|
||||
Ok(PyModel { model })
|
||||
}
|
||||
|
||||
#[pyfunction]
|
||||
pub fn load_from_bytes(bytes: &[u8]) -> PyResult<PyModel> {
|
||||
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()))?;
|
||||
Ok(PyModel { model })
|
||||
}
|
||||
|
||||
/// Creates an empty model
|
||||
#[pyfunction]
|
||||
pub fn create(name: &str, locale: &str, tz: &str) -> PyResult<PyModel> {
|
||||
@@ -348,6 +363,7 @@ fn ironcalc(m: &Bound<'_, PyModule>) -> PyResult<()> {
|
||||
m.add_function(wrap_pyfunction!(create, m)?)?;
|
||||
m.add_function(wrap_pyfunction!(load_from_xlsx, m)?)?;
|
||||
m.add_function(wrap_pyfunction!(load_from_icalc, m)?)?;
|
||||
m.add_function(wrap_pyfunction!(load_from_bytes, m)?)?;
|
||||
m.add_function(wrap_pyfunction!(test_panic, m)?)?;
|
||||
|
||||
// User model functions
|
||||
|
||||
@@ -7,6 +7,12 @@ def test_simple():
|
||||
|
||||
assert model.get_formatted_cell_value(0, 1, 1) == "3"
|
||||
|
||||
bytes = model.to_bytes()
|
||||
|
||||
model2 = ic.load_from_bytes(bytes)
|
||||
assert model2.get_formatted_cell_value(0, 1, 1) == "3"
|
||||
|
||||
|
||||
def test_simple_user():
|
||||
model = ic.create_user_model("model", "en", "UTC")
|
||||
model.set_user_input(0, 1, 1, "=1+2")
|
||||
@@ -20,4 +26,4 @@ def test_simple_user():
|
||||
model2 = ic.create_user_model("model", "en", "UTC")
|
||||
model2.apply_external_diffs(diffs)
|
||||
assert model2.get_formatted_cell_value(0, 1, 1) == "3"
|
||||
assert model2.get_formatted_cell_value(0, 1, 2) == "6"
|
||||
assert model2.get_formatted_cell_value(0, 1, 2) == "6"
|
||||
|
||||
4
webapp/IronCalc/package-lock.json
generated
4
webapp/IronCalc/package-lock.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "@ironcalc/workbook",
|
||||
"version": "0.5.4",
|
||||
"version": "0.5.5",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "@ironcalc/workbook",
|
||||
"version": "0.5.4",
|
||||
"version": "0.5.5",
|
||||
"dependencies": {
|
||||
"@emotion/react": "^11.14.0",
|
||||
"@emotion/styled": "^11.14.0",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@ironcalc/workbook",
|
||||
"version": "0.5.4",
|
||||
"version": "0.5.5",
|
||||
"type": "module",
|
||||
"main": "./dist/ironcalc.js",
|
||||
"module": "./dist/ironcalc.js",
|
||||
|
||||
@@ -11,10 +11,6 @@ interface IronCalcProperties {
|
||||
}
|
||||
|
||||
function IronCalc(properties: IronCalcProperties) {
|
||||
properties.model.setUsers([
|
||||
{ id: "john@doe.com", sheet: 0, row: 5, column: 6 },
|
||||
{ id: "micheal@doe.com", sheet: 0, row: 1, column: 6 },
|
||||
]);
|
||||
return (
|
||||
<ThemeProvider theme={theme}>
|
||||
<Workbook model={properties.model} workbookState={new WorkbookState()} />
|
||||
|
||||
@@ -1257,7 +1257,6 @@ export default class WorksheetCanvas {
|
||||
".user-selection-ironcalc",
|
||||
))
|
||||
handle.remove();
|
||||
const colors = [];
|
||||
users.forEach((user, index) => {
|
||||
const { sheet, row, column } = user;
|
||||
if (sheet !== this.model.getSelectedSheet()) {
|
||||
|
||||
Reference in New Issue
Block a user