OVAPortableText 0.5.0__tar.gz → 0.7.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.
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/CHANGELOG.md +29 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/PKG-INFO +10 -10
- ovaportabletext-0.7.0/PROTOCOL.md +5942 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/README.md +9 -9
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/API_REFERENCE.md +7 -3
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/PROTOCOL_ALIGNMENT.md +10 -4
- ovaportabletext-0.7.0/docs/PYTHON_V15.md +65 -0
- ovaportabletext-0.7.0/docs/PYTHON_V16.md +87 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/QUICKSTART.md +5 -1
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/protocol/v1.4-draft.md +4 -4
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/protocol/v1.4-freeze.md +3 -3
- ovaportabletext-0.7.0/docs/protocol/v1.5-example.json +75 -0
- ovaportabletext-0.7.0/docs/protocol/v1.5-freeze.md +25 -0
- ovaportabletext-0.5.0/PROTOCOL.md → ovaportabletext-0.7.0/docs/protocol/v1.5.md +99 -14
- ovaportabletext-0.7.0/docs/protocol/v1.6-example.json +511 -0
- ovaportabletext-0.7.0/docs/protocol/v1.6-freeze.md +29 -0
- ovaportabletext-0.7.0/docs/protocol/v1.6-implementation.md +56 -0
- ovaportabletext-0.7.0/docs/protocol/v1.6.md +5942 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/v14_report.py +3 -1
- ovaportabletext-0.7.0/examples/v15_valuation_result.py +35 -0
- ovaportabletext-0.7.0/examples/v16_layout_report.py +47 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/pyproject.toml +1 -1
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/__init__.py +9 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/base.py +13 -2
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/block_objects.py +13 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/chart_helpers.py +36 -3
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/content.py +19 -4
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/document.py +36 -15
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/helpers.py +31 -16
- ovaportabletext-0.7.0/src/ova_portable_text/page_layout.py +66 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/protocol_version.py +30 -13
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/registry.py +43 -3
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/resolver.py +14 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/section.py +34 -7
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/text.py +3 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/theme.py +7 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/v14_validation.py +16 -6
- ovaportabletext-0.7.0/src/ova_portable_text/v16_validation.py +191 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/validator.py +4 -2
- ovaportabletext-0.7.0/src/ova_portable_text/valuation.py +27 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/version.py +1 -1
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_minimal_report.py +1 -1
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_v14_charts.py +1 -1
- ovaportabletext-0.7.0/tests/test_v15_valuation_result.py +201 -0
- ovaportabletext-0.7.0/tests/test_v16_layout.py +422 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/.gitignore +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/LICENSE +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/EXAMPLES.md +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/PUBLISHING_CHECKLIST.md +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/PYTHON_V14.md +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/REAL_WORLD_RECIPES.md +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/TEST_MATRIX.md +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/USER_TESTING_CHECKLIST.md +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/VALIDATION_AND_RESOLVER.md +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/native/portable_text_basics.md +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/protocol/test +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/protocol/v1.0.md +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/protocol/v1.1.md +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/protocol/v1.2.md +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/protocol/v1.3.md +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/protocol/v1.4-draft-example.json +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/protocol/v1.4-example.json +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/protocol/v1.4.md +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/builder_numbering_roundtrip_demo.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/extended_registries_demo.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/full_report_workflow_demo.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/grid_table_demo.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/image_sources_demo.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/inline_objects_report.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/marks_and_lists_report.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/minimal_report.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/patent_valuation_style_report.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/references_and_marks_demo.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/registry_blocks_report.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/sample_outputs/generate_patent_report_sample_1.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/sample_outputs/patent_report_sample_1.json +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/save_and_load_json_demo.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/v11_layout_and_cell_image_demo.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/v13_charts_demo.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/validation_context_demo.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/validation_report.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/chart_features.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/chart_semantics.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/exceptions.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/inline.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/numbering.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/py.typed +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_blocks_and_registry.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_builder_roundtrip_and_theme.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_content_flow_helpers.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_document_validation_error_rendering.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_examples_smoke.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_extended_registries_and_resolver.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_file_io_roundtrip.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_image_asset_sources.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_inline_objects.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_mark_validation.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_marks_and_lists.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_numbering.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_pie_chart_parallel_arrays.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_resolver_debug_summary.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_resolver_semantic_figure_alias.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_roundtrip_and_runtime_version.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_section_batch_helpers.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_strict_ids.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_style_validation.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_table_dataset_validation.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_v11_grid_cell_image.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_v11_image_block_optional_id.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_v11_table_layout.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_v11_theme_layout.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_v12_section_and_doughnut.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_v13_charts.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_v14_malformed_payloads.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_validation_context_output.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_validation_failures.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_validation_report_python_alias.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_validation_success.py +0 -0
- {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_validator_extended_rules.py +0 -0
|
@@ -2,6 +2,35 @@
|
|
|
2
2
|
|
|
3
3
|
**All notable changes to this project will be documented in this file.** ** **本项目的重要变更会记录在此文件中。
|
|
4
4
|
|
|
5
|
+
## [0.7.0] - 2026-10-13
|
|
6
|
+
|
|
7
|
+
### SDK
|
|
8
|
+
|
|
9
|
+
* added opt-in report.v1.6 page, object pagination, table/header alignment and explicit caption models and helpers
|
|
10
|
+
* added version boundaries, mutable-model validation, local caption resolution and two-sided group authoring while keeping report.v1.5 as the default
|
|
11
|
+
* preserved historical theme extensions and legacy caption helpers; added SDK tests, a runnable example and a renderer handoff checklist
|
|
12
|
+
* froze the protocol and Python SDK for release; renderer testing is unavailable and explicitly deferred, with no renderer compatibility claim
|
|
13
|
+
|
|
14
|
+
### Protocol
|
|
15
|
+
|
|
16
|
+
* designed `report.v1.6` pagination, page orientation scopes, table alignment inheritance, and explicit caption binding/placement
|
|
17
|
+
* refined only the new v1.6 contract: independent object before/after pagination, header alignment defaults, two-sided explicit captions, and deferred positional record cell overrides; existing v1.5 behavior and required column widths remain unchanged
|
|
18
|
+
* updated the main protocol and added the complete v1.6 protocol, JSON example, validation requirements, and renderer acceptance matrix
|
|
19
|
+
* retained Python 0.6.0 / report.v1.5 runtime defaults and frozen protocol archives; v1.6 renderer and editor acceptance remain pending
|
|
20
|
+
|
|
21
|
+
## [0.6.0] - 2026-09-27
|
|
22
|
+
|
|
23
|
+
### Protocol and Python SDK
|
|
24
|
+
|
|
25
|
+
* froze `report.v1.5` with native `valuation_result` banners for point and range estimates
|
|
26
|
+
* added typed valuation amounts, currency base-unit semantics, display scale/precision, valuation/capital basis, date and sample-data classification
|
|
27
|
+
* added strict helpers, known-type dispatch, full-document diagnostics, reference/grid support and JSON round trips
|
|
28
|
+
* default new documents to v1.5 while preserving explicit v1.4 and older documents without implicit migration
|
|
29
|
+
* preserve historical custom `valuation_result` payloads under their original schema; require explicit conversion before upgrading
|
|
30
|
+
* added a runnable example, a protocol fixture, a renderer contract and migration guidance
|
|
31
|
+
|
|
32
|
+
The package creates JSON. The downstream renderer must implement the valuation banner; no silent fallback is provided.
|
|
33
|
+
|
|
5
34
|
## [0.5.0] - 2026-09-21
|
|
6
35
|
|
|
7
36
|
### Protocol
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: OVAPortableText
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.7.0
|
|
4
4
|
Summary: Python builder for generating OVAPortableText / Report Profile v1 JSON documents
|
|
5
5
|
Author: FENG QU
|
|
6
6
|
License-Expression: MIT
|
|
@@ -23,10 +23,10 @@ Description-Content-Type: text/markdown
|
|
|
23
23
|
|
|
24
24
|
# OVAPortableText
|
|
25
25
|
|
|
26
|
-
> Python **0.
|
|
26
|
+
> Python **0.7.0** 已实现 [`report.v1.6`](PROTOCOL.md):对象前后分页、页面方向、表格/表头对齐及显式 caption 前后组。默认仍创建 v1.5,新能力显式启用 v1.6。见 [使用指南](docs/PYTHON_V16.md)、[JSON 示例](docs/protocol/v1.6-example.json)和[冻结记录](docs/protocol/v1.6-freeze.md)。本次冻结覆盖协议与 SDK;渲染器当前无法测试,渲染验收延期。
|
|
27
27
|
|
|
28
|
-
**OVAPortableText** is a Python authoring package for building JSON documents that conform to the **OVA Report Profile v1.
|
|
29
|
-
**OVAPortableText** 是一个 Python 端的协议生成包,用于创建符合 **OVA Report Profile v1.
|
|
28
|
+
**OVAPortableText** is a Python authoring package for building JSON documents that conform to the **OVA Report Profile v1.6** protocol.
|
|
29
|
+
**OVAPortableText** 是一个 Python 端的协议生成包,用于创建符合 **OVA Report Profile v1.6** 协议的 JSON 文档。
|
|
30
30
|
|
|
31
31
|
It is **not** a PDF renderer. Its job is to help Python code produce a typed, validated, protocol-aligned document payload that can be handed off to a downstream renderer.
|
|
32
32
|
它**不是** PDF 渲染器。它的职责是帮助 Python 代码以强类型、可校验、可维护的方式生成协议 JSON,再交给下游渲染器处理。
|
|
@@ -73,8 +73,8 @@ The package ends at **structured JSON generation + validation + debugging suppor
|
|
|
73
73
|
|
|
74
74
|
## 3. Current protocol scope implemented by the package / 当前包已实现的协议范围
|
|
75
75
|
|
|
76
|
-
This package
|
|
77
|
-
|
|
76
|
+
This package implements the authoring and validation contracts through Report Profile v1.6; new documents default to v1.5 for compatibility.
|
|
77
|
+
当前包实现到 Report Profile v1.6 的构建与校验合同;为保持兼容,新文档默认 v1.5。以下为基础能力概览,新增能力见 v1.6 使用指南。
|
|
78
78
|
|
|
79
79
|
Currently implemented / 当前已实现:
|
|
80
80
|
|
|
@@ -430,11 +430,11 @@ twine check dist/*
|
|
|
430
430
|
|
|
431
431
|
### 11.3 Release note / 发布说明
|
|
432
432
|
|
|
433
|
-
The current package version is **0.
|
|
434
|
-
当前包版本为 **0.
|
|
433
|
+
The current package version is **0.7.0**.
|
|
434
|
+
当前包版本为 **0.7.0**。
|
|
435
435
|
|
|
436
|
-
This
|
|
437
|
-
|
|
436
|
+
This release supports the frozen Report Profile v1.6 protocol; renderer acceptance remains separate.
|
|
437
|
+
当前版本支持本仓库冻结的 Report Profile v1.6 协议;渲染器验收独立进行。
|
|
438
438
|
|
|
439
439
|
---
|
|
440
440
|
|