OVAPortableText 0.4.0__tar.gz → 0.6.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.4.0 → ovaportabletext-0.6.0}/.gitignore +16 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/CHANGELOG.md +34 -1
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/PKG-INFO +6 -4
- ovaportabletext-0.6.0/PROTOCOL.md +5722 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/README.md +4 -2
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/docs/API_REFERENCE.md +11 -3
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/docs/PROTOCOL_ALIGNMENT.md +34 -21
- ovaportabletext-0.6.0/docs/PYTHON_V14.md +90 -0
- ovaportabletext-0.6.0/docs/PYTHON_V15.md +65 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/docs/QUICKSTART.md +8 -0
- ovaportabletext-0.6.0/docs/protocol/v1.3.md +5010 -0
- ovaportabletext-0.6.0/docs/protocol/v1.4-draft-example.json +673 -0
- ovaportabletext-0.6.0/docs/protocol/v1.4-draft.md +779 -0
- ovaportabletext-0.6.0/docs/protocol/v1.4-example.json +822 -0
- ovaportabletext-0.6.0/docs/protocol/v1.4-freeze.md +71 -0
- ovaportabletext-0.6.0/docs/protocol/v1.4.md +5637 -0
- ovaportabletext-0.6.0/docs/protocol/v1.5-example.json +75 -0
- ovaportabletext-0.6.0/docs/protocol/v1.5-freeze.md +25 -0
- ovaportabletext-0.6.0/docs/protocol/v1.5.md +5722 -0
- ovaportabletext-0.6.0/examples/v14_report.py +90 -0
- ovaportabletext-0.6.0/examples/v15_valuation_result.py +35 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/pyproject.toml +5 -1
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/src/ova_portable_text/__init__.py +44 -2
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/src/ova_portable_text/block_objects.py +11 -2
- ovaportabletext-0.6.0/src/ova_portable_text/chart_features.py +263 -0
- ovaportabletext-0.6.0/src/ova_portable_text/chart_helpers.py +380 -0
- ovaportabletext-0.6.0/src/ova_portable_text/chart_semantics.py +372 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/src/ova_portable_text/content.py +14 -2
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/src/ova_portable_text/document.py +62 -6
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/src/ova_portable_text/exceptions.py +12 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/src/ova_portable_text/helpers.py +109 -6
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/src/ova_portable_text/numbering.py +6 -2
- ovaportabletext-0.6.0/src/ova_portable_text/protocol_version.py +79 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/src/ova_portable_text/registry.py +172 -17
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/src/ova_portable_text/resolver.py +4 -2
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/src/ova_portable_text/section.py +14 -1
- ovaportabletext-0.6.0/src/ova_portable_text/v14_validation.py +191 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/src/ova_portable_text/validator.py +16 -1
- ovaportabletext-0.6.0/src/ova_portable_text/valuation.py +27 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/src/ova_portable_text/version.py +1 -1
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_minimal_report.py +1 -1
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_v12_section_and_doughnut.py +1 -1
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_v13_charts.py +3 -3
- ovaportabletext-0.6.0/tests/test_v14_charts.py +569 -0
- ovaportabletext-0.6.0/tests/test_v14_malformed_payloads.py +73 -0
- ovaportabletext-0.6.0/tests/test_v15_valuation_result.py +201 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/LICENSE +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/docs/EXAMPLES.md +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/docs/PUBLISHING_CHECKLIST.md +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/docs/REAL_WORLD_RECIPES.md +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/docs/TEST_MATRIX.md +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/docs/USER_TESTING_CHECKLIST.md +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/docs/VALIDATION_AND_RESOLVER.md +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/docs/native/portable_text_basics.md +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/docs/protocol/test +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/docs/protocol/v1.0.md +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/docs/protocol/v1.1.md +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/docs/protocol/v1.2.md +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/examples/builder_numbering_roundtrip_demo.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/examples/extended_registries_demo.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/examples/full_report_workflow_demo.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/examples/grid_table_demo.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/examples/image_sources_demo.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/examples/inline_objects_report.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/examples/marks_and_lists_report.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/examples/minimal_report.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/examples/patent_valuation_style_report.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/examples/references_and_marks_demo.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/examples/registry_blocks_report.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/examples/sample_outputs/generate_patent_report_sample_1.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/examples/sample_outputs/patent_report_sample_1.json +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/examples/save_and_load_json_demo.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/examples/v11_layout_and_cell_image_demo.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/examples/v13_charts_demo.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/examples/validation_context_demo.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/examples/validation_report.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/src/ova_portable_text/base.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/src/ova_portable_text/inline.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/src/ova_portable_text/py.typed +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/src/ova_portable_text/text.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/src/ova_portable_text/theme.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_blocks_and_registry.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_builder_roundtrip_and_theme.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_content_flow_helpers.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_document_validation_error_rendering.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_examples_smoke.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_extended_registries_and_resolver.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_file_io_roundtrip.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_image_asset_sources.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_inline_objects.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_mark_validation.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_marks_and_lists.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_numbering.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_pie_chart_parallel_arrays.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_resolver_debug_summary.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_resolver_semantic_figure_alias.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_roundtrip_and_runtime_version.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_section_batch_helpers.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_strict_ids.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_style_validation.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_table_dataset_validation.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_v11_grid_cell_image.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_v11_image_block_optional_id.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_v11_table_layout.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_v11_theme_layout.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_validation_context_output.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_validation_failures.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_validation_report_python_alias.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_validation_success.py +0 -0
- {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_validator_extended_rules.py +0 -0
|
@@ -114,6 +114,9 @@ Thumbs.db
|
|
|
114
114
|
# =========================
|
|
115
115
|
docs/_build/
|
|
116
116
|
|
|
117
|
+
# Local report design references
|
|
118
|
+
/docs/startup_report_example/
|
|
119
|
+
|
|
117
120
|
# =========================
|
|
118
121
|
# Temporary files
|
|
119
122
|
# =========================
|
|
@@ -145,3 +148,16 @@ temp/
|
|
|
145
148
|
*.tgz
|
|
146
149
|
*.bz2
|
|
147
150
|
*.rar
|
|
151
|
+
|
|
152
|
+
# =========================
|
|
153
|
+
# Node / frontend workspace
|
|
154
|
+
# =========================
|
|
155
|
+
node_modules/
|
|
156
|
+
**/node_modules/
|
|
157
|
+
.vite/
|
|
158
|
+
**/.vite/
|
|
159
|
+
coverage/
|
|
160
|
+
**/coverage/
|
|
161
|
+
*.tsbuildinfo
|
|
162
|
+
editor/.tools/
|
|
163
|
+
editor/**/dist/
|
|
@@ -2,7 +2,40 @@
|
|
|
2
2
|
|
|
3
3
|
**All notable changes to this project will be documented in this file.** ** **本项目的重要变更会记录在此文件中。
|
|
4
4
|
|
|
5
|
-
## [
|
|
5
|
+
## [0.6.0] - 2026-09-27
|
|
6
|
+
|
|
7
|
+
### Protocol and Python SDK
|
|
8
|
+
|
|
9
|
+
* froze `report.v1.5` with native `valuation_result` banners for point and range estimates
|
|
10
|
+
* added typed valuation amounts, currency base-unit semantics, display scale/precision, valuation/capital basis, date and sample-data classification
|
|
11
|
+
* added strict helpers, known-type dispatch, full-document diagnostics, reference/grid support and JSON round trips
|
|
12
|
+
* default new documents to v1.5 while preserving explicit v1.4 and older documents without implicit migration
|
|
13
|
+
* preserve historical custom `valuation_result` payloads under their original schema; require explicit conversion before upgrading
|
|
14
|
+
* added a runnable example, a protocol fixture, a renderer contract and migration guidance
|
|
15
|
+
|
|
16
|
+
The package creates JSON. The downstream renderer must implement the valuation banner; no silent fallback is provided.
|
|
17
|
+
|
|
18
|
+
## [0.5.0] - 2026-09-21
|
|
19
|
+
|
|
20
|
+
### Protocol
|
|
21
|
+
|
|
22
|
+
* froze the `report.v1.4` contract in `PROTOCOL.md` and `docs/protocol/v1.4.md`
|
|
23
|
+
* defined five new chart types, shared chart semantics, and the `figure` composition block
|
|
24
|
+
* added a complete generic v1.4 JSON example and a protocol freeze record
|
|
25
|
+
|
|
26
|
+
### Python SDK
|
|
27
|
+
|
|
28
|
+
* added timeline, stage_progress, flow, funnel and range models and authoring helpers
|
|
29
|
+
* added data roles/basis, numeric domains/ticks, annotations, percent bars and doughnut center content
|
|
30
|
+
* added figure composition with grid dependencies, shared figure numbering and adjacent captions
|
|
31
|
+
* added strict known-chart dispatch, chart semantic diagnostics and raw-payload validation
|
|
32
|
+
* report malformed chart containers and discriminators as structured validation errors instead of internal exceptions
|
|
33
|
+
* preserved historical v1.3 custom chart types without implicit migration; new features require v1.4
|
|
34
|
+
* changed the default schema to `report.v1.4`; explicit v1.3 authoring remains available
|
|
35
|
+
* added v1.4 regression coverage, a runnable report example and migration/API guidance
|
|
36
|
+
* excluded local report design materials from Git and distribution artifacts
|
|
37
|
+
|
|
38
|
+
This package produces JSON; downstream rendering requires separate implementation and acceptance.
|
|
6
39
|
|
|
7
40
|
## [0.4.0] - 2026-05-14
|
|
8
41
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
2
|
Name: OVAPortableText
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.6.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,8 +23,10 @@ Description-Content-Type: text/markdown
|
|
|
23
23
|
|
|
24
24
|
# OVAPortableText
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
> Python **0.6.0** 已实现 [`report.v1.5`](PROTOCOL.md),新增 `valuation_result` 原生估值结果横幅。支持单值/区间、币种、估值口径、投前/投后、基准日及显示倍率;默认新建 v1.5,兼容旧版本。见 [v1.5 使用指南](docs/PYTHON_V15.md) 与 [可运行示例](examples/v15_valuation_result.py)。渲染端需独立实现横幅。
|
|
27
|
+
|
|
28
|
+
**OVAPortableText** is a Python authoring package for building JSON documents that conform to the **OVA Report Profile v1.5** protocol.
|
|
29
|
+
**OVAPortableText** 是一个 Python 端的协议生成包,用于创建符合 **OVA Report Profile v1.5** 协议的 JSON 文档。
|
|
28
30
|
|
|
29
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.
|
|
30
32
|
它**不是** PDF 渲染器。它的职责是帮助 Python 代码以强类型、可校验、可维护的方式生成协议 JSON,再交给下游渲染器处理。
|