datoon 1.7.2__tar.gz → 1.7.3__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.
- {datoon-1.7.2 → datoon-1.7.3}/CHANGELOG.md +7 -0
- {datoon-1.7.2 → datoon-1.7.3}/PKG-INFO +1 -1
- {datoon-1.7.2 → datoon-1.7.3}/src/datoon/_version.py +3 -3
- {datoon-1.7.2 → datoon-1.7.3}/src/datoon/converter.py +11 -2
- {datoon-1.7.2 → datoon-1.7.3}/src/datoon.egg-info/PKG-INFO +1 -1
- {datoon-1.7.2 → datoon-1.7.3}/src/datoon.egg-info/scm_version.json +2 -2
- {datoon-1.7.2 → datoon-1.7.3}/tests/unit/test_converter_policy.py +7 -0
- {datoon-1.7.2 → datoon-1.7.3}/.agents/plugins/marketplace.json +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/.claude-plugin/marketplace.json +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/.claude-plugin/plugin.json +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/.editorconfig +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/.gitattributes +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/.github/dependabot.yml +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/.github/workflows/package-installer-smoke.yml +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/.github/workflows/pages.yml +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/.github/workflows/pre-commit.yml +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/.github/workflows/publish-mcp.yml +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/.github/workflows/publish.yml +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/.github/workflows/release.yml +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/.github/workflows/tests.yml +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/.github/workflows/validate-artifacts.yml +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/.github/workflows/workflow-lint.yml +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/.gitignore +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/.pre-commit-config.yaml +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/.releaserc.yaml +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/CLAUDE.md +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/CONTRIBUTING.md +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/INSTALL.md +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/LICENSE +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/MARKETPLACES.md +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/README.md +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/SECURITY.md +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/SKILL.md +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/assets/datoon-banner.svg +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/benchmarks/agent_skill_eval/REPORT.md +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/benchmarks/agent_skill_eval/agent_results.json +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/benchmarks/agent_skill_eval/expected_answers.json +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/benchmarks/agent_skill_eval/generate_payloads.py +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/benchmarks/agent_skill_eval/payloads/1_large.json +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/benchmarks/agent_skill_eval/payloads/1_medium.json +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/benchmarks/agent_skill_eval/payloads/1_small.json +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/benchmarks/agent_skill_eval/payloads/2_large.json +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/benchmarks/agent_skill_eval/payloads/2_medium.json +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/benchmarks/agent_skill_eval/payloads/2_small.json +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/benchmarks/agent_skill_eval/payloads/3_large.json +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/benchmarks/agent_skill_eval/payloads/3_medium.json +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/benchmarks/agent_skill_eval/payloads/3_small.json +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/benchmarks/agent_skill_eval/reports/1_large.report.json +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/benchmarks/agent_skill_eval/reports/1_medium.report.json +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/benchmarks/agent_skill_eval/reports/1_small.report.json +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/benchmarks/agent_skill_eval/reports/2_large.report.json +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/benchmarks/agent_skill_eval/reports/2_medium.report.json +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/benchmarks/agent_skill_eval/reports/2_small.report.json +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/benchmarks/agent_skill_eval/reports/3_large.report.json +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/benchmarks/agent_skill_eval/reports/3_medium.report.json +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/benchmarks/agent_skill_eval/reports/3_small.report.json +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/benchmarks/agent_skill_eval/scored_agent_results.json +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/benchmarks/agent_skill_eval/toon/1_large.toon +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/benchmarks/agent_skill_eval/toon/1_medium.toon +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/benchmarks/agent_skill_eval/toon/1_small.toon +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/benchmarks/agent_skill_eval/toon/2_large.toon +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/benchmarks/agent_skill_eval/toon/2_medium.toon +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/benchmarks/agent_skill_eval/toon/2_small.toon +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/benchmarks/agent_skill_eval/toon/3_large.toon +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/benchmarks/agent_skill_eval/toon/3_medium.toon +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/benchmarks/agent_skill_eval/toon/3_small.toon +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/benchmarks/payloads.json +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/benchmarks/results/.gitkeep +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/benchmarks/run.py +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/datoon/SKILL.md +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/datoon.skill +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/docs/.nojekyll +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/docs/app.js +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/docs/assets/datoon-banner.svg +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/docs/index.html +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/docs/styles.css +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/glama.json +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/install.sh +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/plugins/datoon/.codex-plugin/plugin.json +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/plugins/datoon/skills/datoon/SKILL.md +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/pyproject.toml +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/scripts/ab_skill_benchmark.py +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/scripts/install.py +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/scripts/summarize_agent_skill_eval.py +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/scripts/validate_plugin_metadata.py +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/scripts/validate_skill_sync.py +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/server.json +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/setup.cfg +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/setup.sh +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/skills/datoon/README.md +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/skills/datoon/SKILL.md +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/smithery.yaml +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/src/datoon/__init__.py +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/src/datoon/analyzer.py +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/src/datoon/cli.py +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/src/datoon/mcp_server.py +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/src/datoon/models.py +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/src/datoon/py.typed +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/src/datoon/readers/__init__.py +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/src/datoon/readers/_coerce.py +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/src/datoon/readers/_tabular.py +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/src/datoon/readers/columnar.py +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/src/datoon/readers/csv.py +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/src/datoon/readers/excel.py +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/src/datoon/readers/jsonl.py +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/src/datoon/readers/numbers.py +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/src/datoon/readers/xml.py +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/src/datoon/readers/yaml.py +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/src/datoon.egg-info/SOURCES.txt +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/src/datoon.egg-info/dependency_links.txt +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/src/datoon.egg-info/entry_points.txt +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/src/datoon.egg-info/requires.txt +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/src/datoon.egg-info/scm_file_list.json +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/src/datoon.egg-info/top_level.txt +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/tests/fixtures/users.expected.toon +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/tests/fixtures/users.json +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/tests/integration/test_toon_cli_integration.py +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/tests/unit/test_analyzer.py +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/tests/unit/test_cli.py +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/tests/unit/test_installer.py +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/tests/unit/test_mcp_server.py +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/tests/unit/test_models.py +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/tests/unit/test_readers.py +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/tests/unit/test_tabular_rows.py +0 -0
- {datoon-1.7.2 → datoon-1.7.3}/uv.lock +0 -0
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
## [1.7.3](https://github.com/andrii-su/datoon/compare/v1.7.2...v1.7.3) (2026-07-07)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **converter:** reject non-finite JSON constants instead of passing them through ([#37](https://github.com/andrii-su/datoon/issues/37)) ([ed73b53](https://github.com/andrii-su/datoon/commit/ed73b53922ac9b72a906e565303043d27f7ae686))
|
|
7
|
+
|
|
1
8
|
## [1.7.2](https://github.com/andrii-su/datoon/compare/v1.7.1...v1.7.2) (2026-07-07)
|
|
2
9
|
|
|
3
10
|
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '1.7.
|
|
22
|
-
__version_tuple__ = version_tuple = (1, 7,
|
|
21
|
+
__version__ = version = '1.7.3'
|
|
22
|
+
__version_tuple__ = version_tuple = (1, 7, 3)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'gc62af15be'
|
|
@@ -23,14 +23,23 @@ class DatoonError(RuntimeError):
|
|
|
23
23
|
"""Raised when datoon cannot process the payload safely."""
|
|
24
24
|
|
|
25
25
|
|
|
26
|
+
def _reject_non_finite(constant: str) -> Any:
|
|
27
|
+
"""Reject Infinity/-Infinity/NaN, which are invalid JSON and break serialization."""
|
|
28
|
+
raise DatoonError(
|
|
29
|
+
f"Input contains non-finite constant '{constant}', which is not valid JSON."
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
|
|
26
33
|
def _normalize_json(raw_text: str) -> tuple[Any, str]:
|
|
27
34
|
"""Parse and re-serialize JSON into a deterministic compact representation."""
|
|
28
35
|
try:
|
|
29
|
-
parsed = json.loads(raw_text)
|
|
36
|
+
parsed = json.loads(raw_text, parse_constant=_reject_non_finite)
|
|
30
37
|
except json.JSONDecodeError as exc:
|
|
31
38
|
raise DatoonError(f"Invalid JSON input: {exc.msg} (pos={exc.pos}).") from exc
|
|
32
39
|
|
|
33
|
-
normalized = json.dumps(
|
|
40
|
+
normalized = json.dumps(
|
|
41
|
+
parsed, ensure_ascii=False, separators=(",", ":"), allow_nan=False
|
|
42
|
+
)
|
|
34
43
|
return parsed, normalized
|
|
35
44
|
|
|
36
45
|
|
|
@@ -28,6 +28,13 @@ def test_convert_json_for_llm_rejects_invalid_json() -> None:
|
|
|
28
28
|
convert_json_for_llm("{bad json", ConversionConfig())
|
|
29
29
|
|
|
30
30
|
|
|
31
|
+
@pytest.mark.parametrize("literal", ["Infinity", "-Infinity", "NaN"])
|
|
32
|
+
def test_convert_json_for_llm_rejects_non_finite_constants(literal: str) -> None:
|
|
33
|
+
"""Non-finite constants are invalid JSON per spec and must fail loudly."""
|
|
34
|
+
with pytest.raises(DatoonError, match="non-finite"):
|
|
35
|
+
convert_json_for_llm(f'{{"x": {literal}}}', ConversionConfig())
|
|
36
|
+
|
|
37
|
+
|
|
31
38
|
def test_policy_skips_non_uniform_arrays(monkeypatch: pytest.MonkeyPatch) -> None:
|
|
32
39
|
"""Non-uniform arrays should skip conversion before CLI invocation."""
|
|
33
40
|
called = {"value": False}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|