ducpy 3.2.2__tar.gz → 3.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ducpy-3.2.2 → ducpy-3.3.0}/Cargo.lock +15 -15
- {ducpy-3.2.2 → ducpy-3.3.0}/PKG-INFO +1 -1
- {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducpy/crate/Cargo.toml +3 -3
- {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/build.rs +32 -10
- ducpy-3.3.0/packages/ducrs/src/lib.rs +12 -0
- {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/src/parse.rs +7 -7
- ducpy-3.3.0/packages/ducrs/sst-env.d.ts +10 -0
- ducpy-3.3.0/packages/ducrs/tests/common/mod.rs +1008 -0
- ducpy-3.3.0/packages/ducrs/tests/parser_assets.rs +227 -0
- ducpy-3.3.0/packages/ducrs/tests/synthetic_roundtrip.rs +25 -0
- {ducpy-3.2.2 → ducpy-3.3.0}/pyproject.toml +3 -1
- ducpy-3.3.0/schema/duc.sql +847 -0
- ducpy-3.3.0/schema/migrations/3000000_to_3000001.sql +39 -0
- ducpy-3.3.0/schema/migrations/3000001_to_3000002.sql +39 -0
- ducpy-3.3.0/schema/migrations/3000002_to_3000003.sql +144 -0
- ducpy-3.3.0/schema/migrations/3000003_to_3000004.sql +20 -0
- ducpy-3.3.0/schema/search.sql +148 -0
- ducpy-3.3.0/schema/version_control.sql +144 -0
- ducpy-3.2.2/packages/ducrs/src/lib.rs +0 -298
- {ducpy-3.2.2 → ducpy-3.3.0}/Cargo.toml +0 -0
- {ducpy-3.2.2 → ducpy-3.3.0}/LICENSE +0 -0
- {ducpy-3.2.2 → ducpy-3.3.0}/README.md +0 -0
- {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducpy/crate/src/lib.rs +0 -0
- {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/.gitignore +0 -0
- {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/Cargo.toml +0 -0
- {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/LICENSE +0 -0
- {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/README.md +0 -0
- {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/package.json +0 -0
- {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/release.config.cjs +0 -0
- {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/src/api/document.rs +0 -0
- {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/src/api/meta.rs +0 -0
- {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/src/api/mod.rs +0 -0
- {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/src/api/version_control.rs +0 -0
- {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/src/db/bootstrap.rs +0 -0
- {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/src/db/mod.rs +0 -0
- {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/src/db/native.rs +0 -0
- {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/src/db/wasm.rs +0 -0
- {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/src/serde_utils.rs +0 -0
- {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/src/serialize.rs +0 -0
- {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/src/types.rs +0 -0
- {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/tests/.gitignore +0 -0
- {ducpy-3.2.2 → ducpy-3.3.0}/src/ducpy_native/__init__.py +0 -0
|
@@ -412,7 +412,7 @@ dependencies = [
|
|
|
412
412
|
|
|
413
413
|
[[package]]
|
|
414
414
|
name = "ducpy-native"
|
|
415
|
-
version = "3.
|
|
415
|
+
version = "3.3.0"
|
|
416
416
|
dependencies = [
|
|
417
417
|
"duc",
|
|
418
418
|
"pyo3",
|
|
@@ -1367,9 +1367,9 @@ dependencies = [
|
|
|
1367
1367
|
|
|
1368
1368
|
[[package]]
|
|
1369
1369
|
name = "pyo3"
|
|
1370
|
-
version = "0.
|
|
1370
|
+
version = "0.24.2"
|
|
1371
1371
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1372
|
-
checksum = "
|
|
1372
|
+
checksum = "e5203598f366b11a02b13aa20cab591229ff0a89fd121a308a5df751d5fc9219"
|
|
1373
1373
|
dependencies = [
|
|
1374
1374
|
"cfg-if",
|
|
1375
1375
|
"indoc",
|
|
@@ -1385,9 +1385,9 @@ dependencies = [
|
|
|
1385
1385
|
|
|
1386
1386
|
[[package]]
|
|
1387
1387
|
name = "pyo3-build-config"
|
|
1388
|
-
version = "0.
|
|
1388
|
+
version = "0.24.2"
|
|
1389
1389
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1390
|
-
checksum = "
|
|
1390
|
+
checksum = "99636d423fa2ca130fa5acde3059308006d46f98caac629418e53f7ebb1e9999"
|
|
1391
1391
|
dependencies = [
|
|
1392
1392
|
"once_cell",
|
|
1393
1393
|
"target-lexicon",
|
|
@@ -1395,9 +1395,9 @@ dependencies = [
|
|
|
1395
1395
|
|
|
1396
1396
|
[[package]]
|
|
1397
1397
|
name = "pyo3-ffi"
|
|
1398
|
-
version = "0.
|
|
1398
|
+
version = "0.24.2"
|
|
1399
1399
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1400
|
-
checksum = "
|
|
1400
|
+
checksum = "78f9cf92ba9c409279bc3305b5409d90db2d2c22392d443a87df3a1adad59e33"
|
|
1401
1401
|
dependencies = [
|
|
1402
1402
|
"libc",
|
|
1403
1403
|
"pyo3-build-config",
|
|
@@ -1405,9 +1405,9 @@ dependencies = [
|
|
|
1405
1405
|
|
|
1406
1406
|
[[package]]
|
|
1407
1407
|
name = "pyo3-macros"
|
|
1408
|
-
version = "0.
|
|
1408
|
+
version = "0.24.2"
|
|
1409
1409
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1410
|
-
checksum = "
|
|
1410
|
+
checksum = "0b999cb1a6ce21f9a6b147dcf1be9ffedf02e0043aec74dc390f3007047cecd9"
|
|
1411
1411
|
dependencies = [
|
|
1412
1412
|
"proc-macro2",
|
|
1413
1413
|
"pyo3-macros-backend",
|
|
@@ -1417,9 +1417,9 @@ dependencies = [
|
|
|
1417
1417
|
|
|
1418
1418
|
[[package]]
|
|
1419
1419
|
name = "pyo3-macros-backend"
|
|
1420
|
-
version = "0.
|
|
1420
|
+
version = "0.24.2"
|
|
1421
1421
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1422
|
-
checksum = "
|
|
1422
|
+
checksum = "822ece1c7e1012745607d5cf0bcb2874769f0f7cb34c4cde03b9358eb9ef911a"
|
|
1423
1423
|
dependencies = [
|
|
1424
1424
|
"heck",
|
|
1425
1425
|
"proc-macro2",
|
|
@@ -1430,9 +1430,9 @@ dependencies = [
|
|
|
1430
1430
|
|
|
1431
1431
|
[[package]]
|
|
1432
1432
|
name = "pythonize"
|
|
1433
|
-
version = "0.
|
|
1433
|
+
version = "0.24.0"
|
|
1434
1434
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1435
|
-
checksum = "
|
|
1435
|
+
checksum = "d5bcac0d0b71821f0d69e42654f1e15e5c94b85196446c4de9588951a2117e7b"
|
|
1436
1436
|
dependencies = [
|
|
1437
1437
|
"pyo3",
|
|
1438
1438
|
"serde",
|
|
@@ -1946,9 +1946,9 @@ dependencies = [
|
|
|
1946
1946
|
|
|
1947
1947
|
[[package]]
|
|
1948
1948
|
name = "target-lexicon"
|
|
1949
|
-
version = "0.
|
|
1949
|
+
version = "0.13.5"
|
|
1950
1950
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1951
|
-
checksum = "
|
|
1951
|
+
checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca"
|
|
1952
1952
|
|
|
1953
1953
|
[[package]]
|
|
1954
1954
|
name = "termcolor"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "ducpy-native"
|
|
3
|
-
version = "3.
|
|
3
|
+
version = "3.3.0"
|
|
4
4
|
edition = "2021"
|
|
5
5
|
description = "Python native extension for the duc file format (used by ducpy)"
|
|
6
6
|
publish = false
|
|
@@ -11,7 +11,7 @@ crate-type = ["cdylib"]
|
|
|
11
11
|
|
|
12
12
|
[dependencies]
|
|
13
13
|
duc = { path = "../../ducrs" }
|
|
14
|
-
pyo3 = { version = "0.
|
|
15
|
-
pythonize = "0.
|
|
14
|
+
pyo3 = { version = "0.24.1", features = ["extension-module"] }
|
|
15
|
+
pythonize = "0.24"
|
|
16
16
|
serde = { version = "1.0", features = ["derive"] }
|
|
17
17
|
serde_json = "1.0"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
use std::env;
|
|
2
2
|
use std::fs;
|
|
3
|
-
use std::path::PathBuf;
|
|
3
|
+
use std::path::{Path, PathBuf};
|
|
4
4
|
|
|
5
5
|
/// Extract raw `PRAGMA user_version = <N>;` from `duc.sql`.
|
|
6
6
|
fn schema_user_version_from_sql(sql: &str) -> u32 {
|
|
@@ -24,23 +24,45 @@ fn decode_user_version_to_semver(user_version: u32) -> String {
|
|
|
24
24
|
format!("{major}.{minor}.{patch}")
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
+
fn find_schema_dir(manifest_dir: &Path) -> Result<PathBuf, Box<dyn std::error::Error>> {
|
|
28
|
+
if let Ok(path) = env::var("DUC_SCHEMA_DIR") {
|
|
29
|
+
let candidate = PathBuf::from(path);
|
|
30
|
+
if candidate.join("duc.sql").is_file() {
|
|
31
|
+
return Ok(candidate);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
for ancestor in manifest_dir.ancestors() {
|
|
36
|
+
for candidate in [
|
|
37
|
+
ancestor.join("schema"),
|
|
38
|
+
ancestor.join("packages").join("ducpy").join("schema"),
|
|
39
|
+
] {
|
|
40
|
+
if candidate.join("duc.sql").is_file() {
|
|
41
|
+
return Ok(candidate);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
Err(format!(
|
|
47
|
+
"Could not locate schema/duc.sql from {}. Set DUC_SCHEMA_DIR to a directory containing duc.sql.",
|
|
48
|
+
manifest_dir.display()
|
|
49
|
+
)
|
|
50
|
+
.into())
|
|
51
|
+
}
|
|
52
|
+
|
|
27
53
|
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|
28
54
|
let manifest_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR")?);
|
|
29
|
-
let schema_dir = manifest_dir
|
|
55
|
+
let schema_dir = find_schema_dir(&manifest_dir)?;
|
|
30
56
|
let out_dir = PathBuf::from(env::var("OUT_DIR")?);
|
|
57
|
+
println!("cargo:rerun-if-env-changed=DUC_SCHEMA_DIR");
|
|
31
58
|
|
|
32
59
|
// Copy schema files into OUT_DIR so bootstrap.rs can include_str! them
|
|
33
60
|
// even when the crate is built from an sdist in a temp directory.
|
|
34
61
|
for name in ["duc.sql", "version_control.sql", "search.sql"] {
|
|
35
62
|
let src = schema_dir.join(name);
|
|
36
63
|
let dst = out_dir.join(name);
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
Err(e) => {
|
|
40
|
-
eprintln!("cargo:warning=Could not read {:?}: {e}. Writing empty stub.", src);
|
|
41
|
-
fs::write(&dst, "")?;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
64
|
+
let contents = fs::read_to_string(&src)?;
|
|
65
|
+
fs::write(&dst, contents)?;
|
|
44
66
|
println!("cargo:rerun-if-changed={}", src.display());
|
|
45
67
|
}
|
|
46
68
|
// Scan schema/migrations/*.sql, parse (from, to) from filenames like
|
|
@@ -127,4 +149,4 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|
|
127
149
|
println!("cargo:rerun-if-changed=build.rs");
|
|
128
150
|
|
|
129
151
|
Ok(())
|
|
130
|
-
}
|
|
152
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#[allow(unused_imports)]
|
|
2
|
+
#[allow(non_camel_case_types)]
|
|
3
|
+
#[allow(non_snake_case)]
|
|
4
|
+
#[allow(non_upper_case_globals)]
|
|
5
|
+
pub mod parse;
|
|
6
|
+
pub mod serde_utils;
|
|
7
|
+
pub mod serialize;
|
|
8
|
+
pub mod types;
|
|
9
|
+
|
|
10
|
+
// SQLite storage layer and high-level document API
|
|
11
|
+
pub mod db;
|
|
12
|
+
pub mod api;
|
|
@@ -1374,23 +1374,23 @@ fn read_binding_from_row(row: &rusqlite::Row, offset: usize) -> rusqlite::Result
|
|
|
1374
1374
|
let elem_id: Option<String> = row.get(offset)?;
|
|
1375
1375
|
let Some(element_id) = elem_id else { return Ok(None) };
|
|
1376
1376
|
|
|
1377
|
-
let fixed_x: Option<f64> = row.get(offset +
|
|
1377
|
+
let fixed_x: Option<f64> = row.get(offset + 3)?;
|
|
1378
1378
|
let fixed_point = fixed_x.map(|x| GeometricPoint {
|
|
1379
1379
|
x,
|
|
1380
|
-
y: row.get::<_, f64>(offset +
|
|
1380
|
+
y: row.get::<_, f64>(offset + 4).unwrap_or(0.0),
|
|
1381
1381
|
});
|
|
1382
1382
|
|
|
1383
|
-
let pt_idx: Option<i32> = row.get(offset +
|
|
1383
|
+
let pt_idx: Option<i32> = row.get(offset + 5)?;
|
|
1384
1384
|
let point = pt_idx.map(|index| PointBindingPoint {
|
|
1385
1385
|
index,
|
|
1386
|
-
offset: row.get::<_, f64>(offset +
|
|
1386
|
+
offset: row.get::<_, f64>(offset + 6).unwrap_or(0.0),
|
|
1387
1387
|
});
|
|
1388
1388
|
|
|
1389
|
-
let head_type: Option<i32> = row.get(offset +
|
|
1389
|
+
let head_type: Option<i32> = row.get(offset + 7)?;
|
|
1390
1390
|
let head = head_type.map(|ht| DucHead {
|
|
1391
1391
|
head_type: Some(int_to_line_head(ht)),
|
|
1392
|
-
block_id: row.get::<_, Option<String>>(offset +
|
|
1393
|
-
size: row.get::<_, f64>(offset +
|
|
1392
|
+
block_id: row.get::<_, Option<String>>(offset + 8).unwrap_or(None),
|
|
1393
|
+
size: row.get::<_, f64>(offset + 9).unwrap_or(1.0),
|
|
1394
1394
|
});
|
|
1395
1395
|
|
|
1396
1396
|
Ok(Some(DucPointBinding {
|