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.
Files changed (110) hide show
  1. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/.gitignore +16 -0
  2. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/CHANGELOG.md +34 -1
  3. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/PKG-INFO +6 -4
  4. ovaportabletext-0.6.0/PROTOCOL.md +5722 -0
  5. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/README.md +4 -2
  6. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/docs/API_REFERENCE.md +11 -3
  7. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/docs/PROTOCOL_ALIGNMENT.md +34 -21
  8. ovaportabletext-0.6.0/docs/PYTHON_V14.md +90 -0
  9. ovaportabletext-0.6.0/docs/PYTHON_V15.md +65 -0
  10. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/docs/QUICKSTART.md +8 -0
  11. ovaportabletext-0.6.0/docs/protocol/v1.3.md +5010 -0
  12. ovaportabletext-0.6.0/docs/protocol/v1.4-draft-example.json +673 -0
  13. ovaportabletext-0.6.0/docs/protocol/v1.4-draft.md +779 -0
  14. ovaportabletext-0.6.0/docs/protocol/v1.4-example.json +822 -0
  15. ovaportabletext-0.6.0/docs/protocol/v1.4-freeze.md +71 -0
  16. ovaportabletext-0.6.0/docs/protocol/v1.4.md +5637 -0
  17. ovaportabletext-0.6.0/docs/protocol/v1.5-example.json +75 -0
  18. ovaportabletext-0.6.0/docs/protocol/v1.5-freeze.md +25 -0
  19. ovaportabletext-0.6.0/docs/protocol/v1.5.md +5722 -0
  20. ovaportabletext-0.6.0/examples/v14_report.py +90 -0
  21. ovaportabletext-0.6.0/examples/v15_valuation_result.py +35 -0
  22. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/pyproject.toml +5 -1
  23. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/src/ova_portable_text/__init__.py +44 -2
  24. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/src/ova_portable_text/block_objects.py +11 -2
  25. ovaportabletext-0.6.0/src/ova_portable_text/chart_features.py +263 -0
  26. ovaportabletext-0.6.0/src/ova_portable_text/chart_helpers.py +380 -0
  27. ovaportabletext-0.6.0/src/ova_portable_text/chart_semantics.py +372 -0
  28. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/src/ova_portable_text/content.py +14 -2
  29. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/src/ova_portable_text/document.py +62 -6
  30. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/src/ova_portable_text/exceptions.py +12 -0
  31. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/src/ova_portable_text/helpers.py +109 -6
  32. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/src/ova_portable_text/numbering.py +6 -2
  33. ovaportabletext-0.6.0/src/ova_portable_text/protocol_version.py +79 -0
  34. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/src/ova_portable_text/registry.py +172 -17
  35. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/src/ova_portable_text/resolver.py +4 -2
  36. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/src/ova_portable_text/section.py +14 -1
  37. ovaportabletext-0.6.0/src/ova_portable_text/v14_validation.py +191 -0
  38. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/src/ova_portable_text/validator.py +16 -1
  39. ovaportabletext-0.6.0/src/ova_portable_text/valuation.py +27 -0
  40. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/src/ova_portable_text/version.py +1 -1
  41. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_minimal_report.py +1 -1
  42. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_v12_section_and_doughnut.py +1 -1
  43. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_v13_charts.py +3 -3
  44. ovaportabletext-0.6.0/tests/test_v14_charts.py +569 -0
  45. ovaportabletext-0.6.0/tests/test_v14_malformed_payloads.py +73 -0
  46. ovaportabletext-0.6.0/tests/test_v15_valuation_result.py +201 -0
  47. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/LICENSE +0 -0
  48. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/docs/EXAMPLES.md +0 -0
  49. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/docs/PUBLISHING_CHECKLIST.md +0 -0
  50. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/docs/REAL_WORLD_RECIPES.md +0 -0
  51. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/docs/TEST_MATRIX.md +0 -0
  52. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/docs/USER_TESTING_CHECKLIST.md +0 -0
  53. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/docs/VALIDATION_AND_RESOLVER.md +0 -0
  54. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/docs/native/portable_text_basics.md +0 -0
  55. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/docs/protocol/test +0 -0
  56. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/docs/protocol/v1.0.md +0 -0
  57. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/docs/protocol/v1.1.md +0 -0
  58. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/docs/protocol/v1.2.md +0 -0
  59. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/examples/builder_numbering_roundtrip_demo.py +0 -0
  60. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/examples/extended_registries_demo.py +0 -0
  61. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/examples/full_report_workflow_demo.py +0 -0
  62. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/examples/grid_table_demo.py +0 -0
  63. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/examples/image_sources_demo.py +0 -0
  64. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/examples/inline_objects_report.py +0 -0
  65. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/examples/marks_and_lists_report.py +0 -0
  66. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/examples/minimal_report.py +0 -0
  67. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/examples/patent_valuation_style_report.py +0 -0
  68. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/examples/references_and_marks_demo.py +0 -0
  69. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/examples/registry_blocks_report.py +0 -0
  70. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/examples/sample_outputs/generate_patent_report_sample_1.py +0 -0
  71. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/examples/sample_outputs/patent_report_sample_1.json +0 -0
  72. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/examples/save_and_load_json_demo.py +0 -0
  73. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/examples/v11_layout_and_cell_image_demo.py +0 -0
  74. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/examples/v13_charts_demo.py +0 -0
  75. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/examples/validation_context_demo.py +0 -0
  76. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/examples/validation_report.py +0 -0
  77. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/src/ova_portable_text/base.py +0 -0
  78. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/src/ova_portable_text/inline.py +0 -0
  79. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/src/ova_portable_text/py.typed +0 -0
  80. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/src/ova_portable_text/text.py +0 -0
  81. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/src/ova_portable_text/theme.py +0 -0
  82. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_blocks_and_registry.py +0 -0
  83. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_builder_roundtrip_and_theme.py +0 -0
  84. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_content_flow_helpers.py +0 -0
  85. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_document_validation_error_rendering.py +0 -0
  86. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_examples_smoke.py +0 -0
  87. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_extended_registries_and_resolver.py +0 -0
  88. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_file_io_roundtrip.py +0 -0
  89. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_image_asset_sources.py +0 -0
  90. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_inline_objects.py +0 -0
  91. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_mark_validation.py +0 -0
  92. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_marks_and_lists.py +0 -0
  93. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_numbering.py +0 -0
  94. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_pie_chart_parallel_arrays.py +0 -0
  95. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_resolver_debug_summary.py +0 -0
  96. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_resolver_semantic_figure_alias.py +0 -0
  97. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_roundtrip_and_runtime_version.py +0 -0
  98. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_section_batch_helpers.py +0 -0
  99. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_strict_ids.py +0 -0
  100. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_style_validation.py +0 -0
  101. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_table_dataset_validation.py +0 -0
  102. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_v11_grid_cell_image.py +0 -0
  103. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_v11_image_block_optional_id.py +0 -0
  104. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_v11_table_layout.py +0 -0
  105. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_v11_theme_layout.py +0 -0
  106. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_validation_context_output.py +0 -0
  107. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_validation_failures.py +0 -0
  108. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_validation_report_python_alias.py +0 -0
  109. {ovaportabletext-0.4.0 → ovaportabletext-0.6.0}/tests/test_validation_success.py +0 -0
  110. {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
- ## [Unreleased]
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.4
1
+ Metadata-Version: 2.5
2
2
  Name: OVAPortableText
3
- Version: 0.4.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
- **OVAPortableText** is a Python authoring package for building JSON documents that conform to the **OVA Report Profile v1.0** protocol.
27
- **OVAPortableText** 是一个 Python 端的协议生成包,用于创建符合 **OVA Report Profile v1.0** 协议的 JSON 文档。
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,再交给下游渲染器处理。