jsonatapy 2.2.3__tar.gz → 2.2.4__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.
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/CHANGELOG.md +40 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/Cargo.lock +5 -5
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/Cargo.toml +1 -1
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/PKG-INFO +1 -1
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/pyproject.toml +1 -1
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/src/evaluator.rs +531 -77
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/src/functions.rs +109 -3
- jsonatapy-2.2.4/src/lazy.rs +232 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/src/lib.rs +24 -62
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/src/signature.rs +4 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/src/value.rs +76 -1
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/src/vm.rs +4 -2
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/tests/datetime_picture_suite.rs +2 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/tests/parent_and_focus_binding_suite.rs +2 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/.gitignore +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/.gitmodules +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/.serena/.gitignore +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/.serena/memories/architecture.md +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/.serena/memories/conventions.md +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/.serena/memories/core.md +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/.serena/memories/memory_maintenance.md +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/.serena/memories/suggested_commands.md +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/.serena/memories/task_completion.md +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/.serena/memories/tech_stack.md +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/.serena/project.yml +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/LICENSE +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/README.md +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/benches/evaluator_bench.rs +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/examples/evaluator_demo.rs +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/examples/parser_demo.rs +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/examples/simd_json_bench.rs +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/python/jsonatapy/__init__.py +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/python/jsonatapy/__main__.py +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/python/jsonatapy/_cli/__init__.py +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/python/jsonatapy/_cli/bindings.py +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/python/jsonatapy/_cli/error_format.py +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/python/jsonatapy/_cli/mcp_server.py +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/python/jsonatapy/_cli/resolve.py +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/python/jsonatapy/_cli/run.py +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/python/jsonatapy/py.typed +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/src/ast.rs +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/src/ast_transform.rs +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/src/bin/jsonata/bindings.rs +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/src/bin/jsonata/error_format.rs +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/src/bin/jsonata/main.rs +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/src/bin/jsonata/resolve.rs +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/src/compiler.rs +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/src/datetime.rs +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/src/parser/README.md +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/src/parser.rs +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/study/cli_fixtures.json +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/study/cli_fixtures_testdata.json +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/study/cli_spec.md +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/tests/cli_fixtures_test.rs +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/tests/cli_test.rs +0 -0
- {jsonatapy-2.2.3 → jsonatapy-2.2.4}/tests/integration_test.rs +0 -0
|
@@ -19,6 +19,46 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
19
19
|
|
|
20
20
|
### Security
|
|
21
21
|
|
|
22
|
+
## [2.2.4] - 2026-07-13
|
|
23
|
+
|
|
24
|
+
### Added
|
|
25
|
+
- `JSONATAPY_FORCE_TREE_WALKER=1` environment variable (testing/debugging): forces every
|
|
26
|
+
evaluation through the tree-walking evaluator, bypassing the default lazy/VM-preferred path.
|
|
27
|
+
|
|
28
|
+
### Changed
|
|
29
|
+
- `evaluate(dict)` now converts Python data lazily by default. Previously every call eagerly
|
|
30
|
+
converted the entire input `dict` (and nested structures) to the internal value tree before
|
|
31
|
+
evaluation began; now only the fields an expression actually touches are converted, and
|
|
32
|
+
untouched input subtrees pass straight through to the output unchanged. Measured on the dev
|
|
33
|
+
machine (min-of-5, vs. the prior eager `evaluate(dict)`):
|
|
34
|
+
- `products.price` (100 objects): 34.9µs → 11.3µs (3.1x)
|
|
35
|
+
- Filter by category (100 products, 9 fields each): 129.3µs → 23.4µs (5.5x)
|
|
36
|
+
- `$sum(products[inStock].price)`: 116.4µs → 17.1µs (6.8x)
|
|
37
|
+
- Complex dense transformation: 160.9µs → 79µs (2.0x)
|
|
38
|
+
|
|
39
|
+
Every measured row now beats jsonata-js on identical data and machine (14.6/93.7/67.6/415.1µs
|
|
40
|
+
respectively). See `benchmarks/python/lazy_check.py` for the reproducible gate.
|
|
41
|
+
- **Behavior change:** results containing an unmodified input subtree now reference the
|
|
42
|
+
caller's *original* Python `dict`/`list` objects (result aliasing, matching jsonata-js),
|
|
43
|
+
rather than a fresh copy. Mutating such a result mutates the corresponding input — copy
|
|
44
|
+
explicitly (e.g. `copy.deepcopy`) first if you plan to mutate. Passed-through values also keep
|
|
45
|
+
their exact Python type (an `int` field the expression never reads stays an `int`); fields the
|
|
46
|
+
expression does touch still round-trip through the engine's number representation (whole
|
|
47
|
+
values come back as Python `int`), as before.
|
|
48
|
+
- **Behavior change:** an unconvertible input value (e.g. a `set`) now raises `TypeError` only
|
|
49
|
+
when the expression actually touches it, instead of eagerly for the whole input at the start
|
|
50
|
+
of `evaluate()`. Any Python exception raised while lazily reading a field (e.g. `OverflowError`
|
|
51
|
+
on an integer too large to represent) is likewise normalized to `TypeError` at this boundary,
|
|
52
|
+
rather than propagating as its original exception type.
|
|
53
|
+
|
|
54
|
+
### Deprecated
|
|
55
|
+
|
|
56
|
+
### Removed
|
|
57
|
+
|
|
58
|
+
### Fixed
|
|
59
|
+
|
|
60
|
+
### Security
|
|
61
|
+
|
|
22
62
|
## [2.2.3] - 2026-07-12
|
|
23
63
|
|
|
24
64
|
### Added
|
|
@@ -586,7 +586,7 @@ dependencies = [
|
|
|
586
586
|
|
|
587
587
|
[[package]]
|
|
588
588
|
name = "jsonata-core"
|
|
589
|
-
version = "2.2.
|
|
589
|
+
version = "2.2.4"
|
|
590
590
|
dependencies = [
|
|
591
591
|
"assert_cmd",
|
|
592
592
|
"base64",
|
|
@@ -988,9 +988,9 @@ dependencies = [
|
|
|
988
988
|
|
|
989
989
|
[[package]]
|
|
990
990
|
name = "regex"
|
|
991
|
-
version = "1.
|
|
991
|
+
version = "1.13.0"
|
|
992
992
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
993
|
-
checksum = "
|
|
993
|
+
checksum = "2a0e75113e14dc5acb068cd0786884f214f1312650a3d36d269f5c4f3cdee8a2"
|
|
994
994
|
dependencies = [
|
|
995
995
|
"aho-corasick",
|
|
996
996
|
"memchr",
|
|
@@ -1113,9 +1113,9 @@ checksum = "f8fadd59c855ef2080decdef8ff161eb6661b86933c9d82e5ba29dc602a55aba"
|
|
|
1113
1113
|
|
|
1114
1114
|
[[package]]
|
|
1115
1115
|
name = "simd-json"
|
|
1116
|
-
version = "0.17.
|
|
1116
|
+
version = "0.17.3"
|
|
1117
1117
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1118
|
-
checksum = "
|
|
1118
|
+
checksum = "e32d7ab2678282d21e53374fbead7119b7eacbede73685dcaac472870a29a11c"
|
|
1119
1119
|
dependencies = [
|
|
1120
1120
|
"halfbrown",
|
|
1121
1121
|
"ref-cast",
|
|
@@ -4,7 +4,7 @@ build-backend = "maturin"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "jsonatapy"
|
|
7
|
-
version = "2.2.
|
|
7
|
+
version = "2.2.4"
|
|
8
8
|
description = "High-performance Python/Rust implementation of JSONata query and transformation language"
|
|
9
9
|
authors = [
|
|
10
10
|
{name = "txjmb", email = "txjmb@users.noreply.github.com"}
|