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.
Files changed (119) hide show
  1. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/CHANGELOG.md +29 -0
  2. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/PKG-INFO +10 -10
  3. ovaportabletext-0.7.0/PROTOCOL.md +5942 -0
  4. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/README.md +9 -9
  5. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/API_REFERENCE.md +7 -3
  6. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/PROTOCOL_ALIGNMENT.md +10 -4
  7. ovaportabletext-0.7.0/docs/PYTHON_V15.md +65 -0
  8. ovaportabletext-0.7.0/docs/PYTHON_V16.md +87 -0
  9. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/QUICKSTART.md +5 -1
  10. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/protocol/v1.4-draft.md +4 -4
  11. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/protocol/v1.4-freeze.md +3 -3
  12. ovaportabletext-0.7.0/docs/protocol/v1.5-example.json +75 -0
  13. ovaportabletext-0.7.0/docs/protocol/v1.5-freeze.md +25 -0
  14. ovaportabletext-0.5.0/PROTOCOL.md → ovaportabletext-0.7.0/docs/protocol/v1.5.md +99 -14
  15. ovaportabletext-0.7.0/docs/protocol/v1.6-example.json +511 -0
  16. ovaportabletext-0.7.0/docs/protocol/v1.6-freeze.md +29 -0
  17. ovaportabletext-0.7.0/docs/protocol/v1.6-implementation.md +56 -0
  18. ovaportabletext-0.7.0/docs/protocol/v1.6.md +5942 -0
  19. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/v14_report.py +3 -1
  20. ovaportabletext-0.7.0/examples/v15_valuation_result.py +35 -0
  21. ovaportabletext-0.7.0/examples/v16_layout_report.py +47 -0
  22. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/pyproject.toml +1 -1
  23. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/__init__.py +9 -0
  24. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/base.py +13 -2
  25. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/block_objects.py +13 -0
  26. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/chart_helpers.py +36 -3
  27. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/content.py +19 -4
  28. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/document.py +36 -15
  29. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/helpers.py +31 -16
  30. ovaportabletext-0.7.0/src/ova_portable_text/page_layout.py +66 -0
  31. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/protocol_version.py +30 -13
  32. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/registry.py +43 -3
  33. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/resolver.py +14 -0
  34. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/section.py +34 -7
  35. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/text.py +3 -0
  36. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/theme.py +7 -0
  37. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/v14_validation.py +16 -6
  38. ovaportabletext-0.7.0/src/ova_portable_text/v16_validation.py +191 -0
  39. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/validator.py +4 -2
  40. ovaportabletext-0.7.0/src/ova_portable_text/valuation.py +27 -0
  41. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/version.py +1 -1
  42. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_minimal_report.py +1 -1
  43. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_v14_charts.py +1 -1
  44. ovaportabletext-0.7.0/tests/test_v15_valuation_result.py +201 -0
  45. ovaportabletext-0.7.0/tests/test_v16_layout.py +422 -0
  46. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/.gitignore +0 -0
  47. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/LICENSE +0 -0
  48. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/EXAMPLES.md +0 -0
  49. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/PUBLISHING_CHECKLIST.md +0 -0
  50. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/PYTHON_V14.md +0 -0
  51. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/REAL_WORLD_RECIPES.md +0 -0
  52. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/TEST_MATRIX.md +0 -0
  53. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/USER_TESTING_CHECKLIST.md +0 -0
  54. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/VALIDATION_AND_RESOLVER.md +0 -0
  55. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/native/portable_text_basics.md +0 -0
  56. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/protocol/test +0 -0
  57. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/protocol/v1.0.md +0 -0
  58. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/protocol/v1.1.md +0 -0
  59. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/protocol/v1.2.md +0 -0
  60. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/protocol/v1.3.md +0 -0
  61. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/protocol/v1.4-draft-example.json +0 -0
  62. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/protocol/v1.4-example.json +0 -0
  63. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/docs/protocol/v1.4.md +0 -0
  64. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/builder_numbering_roundtrip_demo.py +0 -0
  65. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/extended_registries_demo.py +0 -0
  66. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/full_report_workflow_demo.py +0 -0
  67. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/grid_table_demo.py +0 -0
  68. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/image_sources_demo.py +0 -0
  69. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/inline_objects_report.py +0 -0
  70. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/marks_and_lists_report.py +0 -0
  71. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/minimal_report.py +0 -0
  72. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/patent_valuation_style_report.py +0 -0
  73. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/references_and_marks_demo.py +0 -0
  74. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/registry_blocks_report.py +0 -0
  75. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/sample_outputs/generate_patent_report_sample_1.py +0 -0
  76. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/sample_outputs/patent_report_sample_1.json +0 -0
  77. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/save_and_load_json_demo.py +0 -0
  78. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/v11_layout_and_cell_image_demo.py +0 -0
  79. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/v13_charts_demo.py +0 -0
  80. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/validation_context_demo.py +0 -0
  81. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/examples/validation_report.py +0 -0
  82. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/chart_features.py +0 -0
  83. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/chart_semantics.py +0 -0
  84. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/exceptions.py +0 -0
  85. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/inline.py +0 -0
  86. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/numbering.py +0 -0
  87. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/src/ova_portable_text/py.typed +0 -0
  88. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_blocks_and_registry.py +0 -0
  89. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_builder_roundtrip_and_theme.py +0 -0
  90. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_content_flow_helpers.py +0 -0
  91. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_document_validation_error_rendering.py +0 -0
  92. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_examples_smoke.py +0 -0
  93. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_extended_registries_and_resolver.py +0 -0
  94. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_file_io_roundtrip.py +0 -0
  95. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_image_asset_sources.py +0 -0
  96. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_inline_objects.py +0 -0
  97. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_mark_validation.py +0 -0
  98. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_marks_and_lists.py +0 -0
  99. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_numbering.py +0 -0
  100. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_pie_chart_parallel_arrays.py +0 -0
  101. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_resolver_debug_summary.py +0 -0
  102. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_resolver_semantic_figure_alias.py +0 -0
  103. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_roundtrip_and_runtime_version.py +0 -0
  104. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_section_batch_helpers.py +0 -0
  105. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_strict_ids.py +0 -0
  106. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_style_validation.py +0 -0
  107. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_table_dataset_validation.py +0 -0
  108. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_v11_grid_cell_image.py +0 -0
  109. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_v11_image_block_optional_id.py +0 -0
  110. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_v11_table_layout.py +0 -0
  111. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_v11_theme_layout.py +0 -0
  112. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_v12_section_and_doughnut.py +0 -0
  113. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_v13_charts.py +0 -0
  114. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_v14_malformed_payloads.py +0 -0
  115. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_validation_context_output.py +0 -0
  116. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_validation_failures.py +0 -0
  117. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_validation_report_python_alias.py +0 -0
  118. {ovaportabletext-0.5.0 → ovaportabletext-0.7.0}/tests/test_validation_success.py +0 -0
  119. {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.5.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.5.0** 已实现 [`report.v1.4`](PROTOCOL.md) 的生成、读取和校验,默认新建 v1.4 文档并兼容读取 v1.3。新增五种图表、共享图表语义和组合 `figure`。见 [新版使用指南](docs/PYTHON_V14.md) 与 [完整 Python 示例](examples/v14_report.py)。渲染效果由下游渲染器独立验收。
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.4** protocol.
29
- **OVAPortableText** 是一个 Python 端的协议生成包,用于创建符合 **OVA Report Profile v1.4** 协议的 JSON 文档。
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 intentionally implements the **stable, author-facing subset** of Report Profile v1.0.
77
- 当前包刻意只实现了 Report Profile v1.0 中**已经稳定、适合作者侧使用的那部分能力**。
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.1.3**.
434
- 当前包版本为 **0.1.3**。
433
+ The current package version is **0.7.0**.
434
+ 当前包版本为 **0.7.0**。
435
435
 
436
- This branch of the package is aligned to the current Report Profile v1.0 protocol draft used in this repository.
437
- 当前这版包对齐的是本仓库内维护的 Report Profile v1.0 协议版本。
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