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.
Files changed (42) hide show
  1. {ducpy-3.2.2 → ducpy-3.3.0}/Cargo.lock +15 -15
  2. {ducpy-3.2.2 → ducpy-3.3.0}/PKG-INFO +1 -1
  3. {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducpy/crate/Cargo.toml +3 -3
  4. {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/build.rs +32 -10
  5. ducpy-3.3.0/packages/ducrs/src/lib.rs +12 -0
  6. {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/src/parse.rs +7 -7
  7. ducpy-3.3.0/packages/ducrs/sst-env.d.ts +10 -0
  8. ducpy-3.3.0/packages/ducrs/tests/common/mod.rs +1008 -0
  9. ducpy-3.3.0/packages/ducrs/tests/parser_assets.rs +227 -0
  10. ducpy-3.3.0/packages/ducrs/tests/synthetic_roundtrip.rs +25 -0
  11. {ducpy-3.2.2 → ducpy-3.3.0}/pyproject.toml +3 -1
  12. ducpy-3.3.0/schema/duc.sql +847 -0
  13. ducpy-3.3.0/schema/migrations/3000000_to_3000001.sql +39 -0
  14. ducpy-3.3.0/schema/migrations/3000001_to_3000002.sql +39 -0
  15. ducpy-3.3.0/schema/migrations/3000002_to_3000003.sql +144 -0
  16. ducpy-3.3.0/schema/migrations/3000003_to_3000004.sql +20 -0
  17. ducpy-3.3.0/schema/search.sql +148 -0
  18. ducpy-3.3.0/schema/version_control.sql +144 -0
  19. ducpy-3.2.2/packages/ducrs/src/lib.rs +0 -298
  20. {ducpy-3.2.2 → ducpy-3.3.0}/Cargo.toml +0 -0
  21. {ducpy-3.2.2 → ducpy-3.3.0}/LICENSE +0 -0
  22. {ducpy-3.2.2 → ducpy-3.3.0}/README.md +0 -0
  23. {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducpy/crate/src/lib.rs +0 -0
  24. {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/.gitignore +0 -0
  25. {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/Cargo.toml +0 -0
  26. {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/LICENSE +0 -0
  27. {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/README.md +0 -0
  28. {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/package.json +0 -0
  29. {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/release.config.cjs +0 -0
  30. {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/src/api/document.rs +0 -0
  31. {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/src/api/meta.rs +0 -0
  32. {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/src/api/mod.rs +0 -0
  33. {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/src/api/version_control.rs +0 -0
  34. {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/src/db/bootstrap.rs +0 -0
  35. {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/src/db/mod.rs +0 -0
  36. {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/src/db/native.rs +0 -0
  37. {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/src/db/wasm.rs +0 -0
  38. {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/src/serde_utils.rs +0 -0
  39. {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/src/serialize.rs +0 -0
  40. {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/src/types.rs +0 -0
  41. {ducpy-3.2.2 → ducpy-3.3.0}/packages/ducrs/tests/.gitignore +0 -0
  42. {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.2.2"
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.23.5"
1370
+ version = "0.24.2"
1371
1371
  source = "registry+https://github.com/rust-lang/crates.io-index"
1372
- checksum = "7778bffd85cf38175ac1f545509665d0b9b92a198ca7941f131f85f7a4f9a872"
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.23.5"
1388
+ version = "0.24.2"
1389
1389
  source = "registry+https://github.com/rust-lang/crates.io-index"
1390
- checksum = "94f6cbe86ef3bf18998d9df6e0f3fc1050a8c5efa409bf712e661a4366e010fb"
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.23.5"
1398
+ version = "0.24.2"
1399
1399
  source = "registry+https://github.com/rust-lang/crates.io-index"
1400
- checksum = "e9f1b4c431c0bb1c8fb0a338709859eed0d030ff6daa34368d3b152a63dfdd8d"
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.23.5"
1408
+ version = "0.24.2"
1409
1409
  source = "registry+https://github.com/rust-lang/crates.io-index"
1410
- checksum = "fbc2201328f63c4710f68abdf653c89d8dbc2858b88c5d88b0ff38a75288a9da"
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.23.5"
1420
+ version = "0.24.2"
1421
1421
  source = "registry+https://github.com/rust-lang/crates.io-index"
1422
- checksum = "fca6726ad0f3da9c9de093d6f116a93c1a38e417ed73bf138472cf4064f72028"
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.23.0"
1433
+ version = "0.24.0"
1434
1434
  source = "registry+https://github.com/rust-lang/crates.io-index"
1435
- checksum = "91a6ee7a084f913f98d70cdc3ebec07e852b735ae3059a1500db2661265da9ff"
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.12.16"
1949
+ version = "0.13.5"
1950
1950
  source = "registry+https://github.com/rust-lang/crates.io-index"
1951
- checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
1951
+ checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca"
1952
1952
 
1953
1953
  [[package]]
1954
1954
  name = "termcolor"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ducpy
3
- Version: 3.2.2
3
+ Version: 3.3.0
4
4
  Classifier: License :: OSI Approved :: MIT License
5
5
  Requires-Dist: nanoid>=2.0.0
6
6
  License-File: LICENSE
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "ducpy-native"
3
- version = "3.2.2"
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.23", features = ["extension-module"] }
15
- pythonize = "0.23"
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.join("..").join("..").join("schema");
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
- match fs::read_to_string(&src) {
38
- Ok(contents) => fs::write(&dst, contents)?,
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 + 4)?;
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 + 5).unwrap_or(0.0),
1380
+ y: row.get::<_, f64>(offset + 4).unwrap_or(0.0),
1381
1381
  });
1382
1382
 
1383
- let pt_idx: Option<i32> = row.get(offset + 6)?;
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 + 7).unwrap_or(0.0),
1386
+ offset: row.get::<_, f64>(offset + 6).unwrap_or(0.0),
1387
1387
  });
1388
1388
 
1389
- let head_type: Option<i32> = row.get(offset + 8)?;
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 + 9).unwrap_or(None),
1393
- size: row.get::<_, f64>(offset + 10).unwrap_or(1.0),
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 {
@@ -0,0 +1,10 @@
1
+ /* This file is auto-generated by SST. Do not edit. */
2
+ /* tslint:disable */
3
+ /* eslint-disable */
4
+ /* deno-fmt-ignore-file */
5
+ /* biome-ignore-all lint: auto-generated */
6
+
7
+ /// <reference path="../../sst-env.d.ts" />
8
+
9
+ import "sst"
10
+ export {}