athena-python-docx 0.15.4__tar.gz → 0.16.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 (359) hide show
  1. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/PKG-INFO +1 -1
  2. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/__init__.py +1 -1
  3. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/_buffer.py +13 -28
  4. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/_http_doc.py +0 -18
  5. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/client.py +2 -2
  6. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/pyproject.toml +1 -1
  7. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_buffer.py +1 -22
  8. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_http_transport.py +0 -26
  9. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_ptc.py +51 -15
  10. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/uv.lock +1 -1
  11. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/.gitignore +0 -0
  12. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/CLAUDE.md +0 -0
  13. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/DOCX_EXEC_LAB.md +0 -0
  14. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/README.md +0 -0
  15. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/_athena_extension.py +0 -0
  16. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/_batching.py +0 -0
  17. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/_execution.py +0 -0
  18. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/_http.py +0 -0
  19. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/_image_utils.py +0 -0
  20. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/_postproc.py +0 -0
  21. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/_ptc.py +0 -0
  22. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/_table_styles.py +0 -0
  23. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/_timeouts.py +0 -0
  24. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/api.py +0 -0
  25. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/bookmarks.py +0 -0
  26. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/charts.py +0 -0
  27. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/commands.py +0 -0
  28. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/comments.py +0 -0
  29. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/document.py +0 -0
  30. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/enum/__init__.py +0 -0
  31. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/enum/section.py +0 -0
  32. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/enum/style.py +0 -0
  33. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/enum/table.py +0 -0
  34. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/enum/text.py +0 -0
  35. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/errors.py +0 -0
  36. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/exceptions.py +0 -0
  37. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/fields.py +0 -0
  38. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/footnotes.py +0 -0
  39. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/math.py +0 -0
  40. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/opc/__init__.py +0 -0
  41. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/opc/coreprops.py +0 -0
  42. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/oxml/__init__.py +0 -0
  43. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/revisions.py +0 -0
  44. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/sdt.py +0 -0
  45. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/section.py +0 -0
  46. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/session.py +0 -0
  47. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/settings.py +0 -0
  48. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/shape.py +0 -0
  49. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/shared.py +0 -0
  50. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/styles/__init__.py +0 -0
  51. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/styles/style.py +0 -0
  52. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/styles/styles.py +0 -0
  53. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/table.py +0 -0
  54. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/text/__init__.py +0 -0
  55. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/text/font.py +0 -0
  56. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/text/hyperlink.py +0 -0
  57. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/text/pagebreak.py +0 -0
  58. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/text/paragraph.py +0 -0
  59. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/text/parfmt.py +0 -0
  60. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/text/run.py +0 -0
  61. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/text/tabstops.py +0 -0
  62. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/toc.py +0 -0
  63. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/docx/typing.py +0 -0
  64. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/scripts/docx_exec_lab.py +0 -0
  65. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/scripts/docx_exec_lab_examples/fast_table_fill.py +0 -0
  66. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/scripts/docx_exec_lab_examples/find_replace_literal.py +0 -0
  67. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/scripts/docx_exec_lab_server.py +0 -0
  68. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/scripts/publish.sh +0 -0
  69. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/scripts/release.sh +0 -0
  70. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/scripts/round_trip_smoke.py +0 -0
  71. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/scripts/smoke_test_block_not_found.py +0 -0
  72. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/scripts/validate_find_replace_asset.py +0 -0
  73. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/__init__.py +0 -0
  74. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/conftest.py +0 -0
  75. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/METHODOLOGY.md +0 -0
  76. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/README.md +0 -0
  77. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/__init__.py +0 -0
  78. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/ab_probe_cases.py +0 -0
  79. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/ab_probe_runner.py +0 -0
  80. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/auto_gen_cases.py +0 -0
  81. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/binary_round_trip.py +0 -0
  82. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/cases.py +0 -0
  83. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/complex_cases.py +0 -0
  84. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/coverage_report.py +0 -0
  85. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/extract.py +0 -0
  86. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/extreme_cases.py +0 -0
  87. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/fake_session.py +0 -0
  88. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/firm_templates/README.md +0 -0
  89. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/firm_templates/__init__.py +0 -0
  90. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/firm_templates/_runner.py +0 -0
  91. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/firm_templates/extractor.py +0 -0
  92. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/firm_templates/test_pw_corpus.py +0 -0
  93. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/firm_templates/test_pw_research_digest.py +0 -0
  94. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/local_runner.py +0 -0
  95. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/mega_cases.py +0 -0
  96. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshot.py +0 -0
  97. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/01_basic_paragraph.json +0 -0
  98. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/02_multiple_headings.json +0 -0
  99. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/03_runs_with_formatting.json +0 -0
  100. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/04_font_name_and_size.json +0 -0
  101. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/05_font_color_rgb.json +0 -0
  102. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/06_font_character_properties.json +0 -0
  103. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/07_font_subscript_superscript.json +0 -0
  104. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/08_font_highlight.json +0 -0
  105. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/09_paragraph_alignment.json +0 -0
  106. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/100_table_negative_indexing.json +0 -0
  107. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/101_table_cells_flat_iteration.json +0 -0
  108. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/102_text_with_embedded_special_chars.json +0 -0
  109. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/104_core_properties_datetime.json +0 -0
  110. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/105_default_one_section.json +0 -0
  111. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/106_heading_paragraph_format.json +0 -0
  112. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/107_varying_row_heights.json +0 -0
  113. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/10_paragraph_indents.json +0 -0
  114. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/11_paragraph_spacing.json +0 -0
  115. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/12_paragraph_keep_options.json +0 -0
  116. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/13_paragraph_tab_stops.json +0 -0
  117. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/14_run_add_tab_and_break.json +0 -0
  118. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/15_run_add_break_page.json +0 -0
  119. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/16_paragraph_clear_and_insert_before.json +0 -0
  120. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/17_table_basic.json +0 -0
  121. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/18_table_cell_text.json +0 -0
  122. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/19_table_row_column_sizing.json +0 -0
  123. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/20_table_cell_vertical_alignment.json +0 -0
  124. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/21_table_alignment_and_autofit.json +0 -0
  125. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/22_table_cell_paragraphs_iteration.json +0 -0
  126. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/24_table_add_row_column.json +0 -0
  127. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/25_table_merge_cells.json +0 -0
  128. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/26_section_page_setup.json +0 -0
  129. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/27_section_margins.json +0 -0
  130. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/28_section_add_new.json +0 -0
  131. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/29_section_headers_linked.json +0 -0
  132. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/30_styles_iteration.json +0 -0
  133. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/31_styles_lookup_and_default.json +0 -0
  134. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/32_styles_add_paragraph_style.json +0 -0
  135. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/33_core_properties_set_and_get.json +0 -0
  136. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/34_inline_shapes_iterate_empty.json +0 -0
  137. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/35_full_report.json +0 -0
  138. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/36_replace_text_in_paragraph.json +0 -0
  139. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/37_iterate_runs_and_format_all_bold.json +0 -0
  140. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/38_font_all_properties.json +0 -0
  141. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/39_large_body_100_paragraphs.json +0 -0
  142. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/40_large_table_10x10.json +0 -0
  143. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/41_unicode_and_emoji.json +0 -0
  144. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/42_very_long_paragraph.json +0 -0
  145. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/43_paragraph_text_round_trip.json +0 -0
  146. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/44_paragraph_alignment_round_trip.json +0 -0
  147. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/45_cell_text_round_trip.json +0 -0
  148. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/46_run_text_setter_round_trip.json +0 -0
  149. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/47_font_size_round_trip.json +0 -0
  150. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/48_font_color_round_trip.json +0 -0
  151. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/49_resume_layout.json +0 -0
  152. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/50_multi_section_doc.json +0 -0
  153. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/52_iterate_everything.json +0 -0
  154. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/53_apply_style_to_paragraphs.json +0 -0
  155. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/54_empty_everything.json +0 -0
  156. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/55_single_character_runs.json +0 -0
  157. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/56_everything_in_one.json +0 -0
  158. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/57_runs_after_multiple_text_appends.json +0 -0
  159. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/58_modify_runs_in_place.json +0 -0
  160. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/59_indent_round_trip.json +0 -0
  161. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/60_space_round_trip.json +0 -0
  162. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/61_cell_paragraph_with_runs.json +0 -0
  163. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/62_many_cell_paragraphs.json +0 -0
  164. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/63_table_style_round_trip.json +0 -0
  165. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/64_many_sections.json +0 -0
  166. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/65_20x20_table_formatted.json +0 -0
  167. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/66_toc_like_structure.json +0 -0
  168. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/67_paragraph_insert_before_chain.json +0 -0
  169. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/68_invoice.json +0 -0
  170. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/69_newsletter.json +0 -0
  171. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/70_add_and_iterate_back.json +0 -0
  172. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/71_academic_paper.json +0 -0
  173. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/72_legal_contract.json +0 -0
  174. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/73_form_with_many_tables.json +0 -0
  175. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/74_paragraph_with_10_runs.json +0 -0
  176. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/75_paragraph_negative_first_line_indent.json +0 -0
  177. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/76_rgbcolor_from_string.json +0 -0
  178. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/77_length_unit_conversions.json +0 -0
  179. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/78_paragraph_copy_style.json +0 -0
  180. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/79_bulk_cell_formatting.json +0 -0
  181. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/80_apply_style_after_add_run.json +0 -0
  182. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/81_multi_page_with_breaks.json +0 -0
  183. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/82_add_text_on_existing_run.json +0 -0
  184. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/83_clear_then_repopulate_paragraph.json +0 -0
  185. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/84_table_reread_row_count.json +0 -0
  186. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/85_header_footer_access.json +0 -0
  187. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/86_font_read_unset_returns_none.json +0 -0
  188. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/87_500_paragraph_doc.json +0 -0
  189. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/88_mixed_content_iteration.json +0 -0
  190. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/89_alignment_clear_via_none.json +0 -0
  191. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/90_cell_add_paragraph_styled.json +0 -0
  192. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/91_many_small_tables.json +0 -0
  193. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/92_margins_every_section.json +0 -0
  194. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/93_font_bool_reads_after_set.json +0 -0
  195. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/94_page_break_before_paragraph.json +0 -0
  196. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/95_paragraph_hyperlinks_empty.json +0 -0
  197. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/96_paragraph_contains_page_break.json +0 -0
  198. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/97_document_styles_by_key.json +0 -0
  199. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/98_style_contains_check.json +0 -0
  200. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/99_run_add_picture_from_bytes.json +0 -0
  201. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/ex02_unicode_everywhere.json +0 -0
  202. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/ex03_1000_paragraphs.json +0 -0
  203. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/ex04_50x50_table.json +0 -0
  204. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/ex05_long_text_in_cell.json +0 -0
  205. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/ex06_hundred_tiny_runs.json +0 -0
  206. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/ex07_every_font_boolean.json +0 -0
  207. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/ex08_many_continuous_sections.json +0 -0
  208. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/ex09_many_tab_stops.json +0 -0
  209. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/ex10_complex_bom.json +0 -0
  210. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/ex11_banded_rows_formatting.json +0 -0
  211. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/ex12_section_reconfigure.json +0 -0
  212. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/ex13_cell_with_10_paragraphs.json +0 -0
  213. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/ex14_styled_report_table.json +0 -0
  214. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/ex15_paragraph_all_format_props.json +0 -0
  215. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/ex16_runs_interleaved_with_breaks.json +0 -0
  216. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/ex17_all_break_kinds.json +0 -0
  217. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/ex18_read_back_large_doc.json +0 -0
  218. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/ex19_mutate_all_runs.json +0 -0
  219. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/ex20_kitchen_sink_v2.json +0 -0
  220. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/mega01_book_chapter.json +0 -0
  221. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/mega02_research_proposal.json +0 -0
  222. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/mega03_financial_statement.json +0 -0
  223. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/mega04_recipe_card.json +0 -0
  224. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/mega05_user_manual.json +0 -0
  225. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/mega06_complex_newsletter.json +0 -0
  226. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/mega07_budget_spreadsheet.json +0 -0
  227. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/mega08_product_catalog.json +0 -0
  228. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/mega09_signed_contract.json +0 -0
  229. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/mega10_api_documentation.json +0 -0
  230. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/rw01_official_quickstart.json +0 -0
  231. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/rw02_paragraph_style_list.json +0 -0
  232. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/rw03_character_formatting.json +0 -0
  233. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/rw04_section_page_setup.json +0 -0
  234. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/rw05_toc_pattern.json +0 -0
  235. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/rw06_meeting_minutes.json +0 -0
  236. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/rw07_dense_formatting_demo.json +0 -0
  237. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/rw08_table_merged_header.json +0 -0
  238. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/rw09_bulk_run_iteration.json +0 -0
  239. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/rw10_colored_grid_table.json +0 -0
  240. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/rw11_header_text.json +0 -0
  241. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/rw12_first_page_footer.json +0 -0
  242. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/rw13_even_page_header.json +0 -0
  243. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/op_snapshots/rw15_paragraph_style_instance.json +0 -0
  244. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/ours_spec.json +0 -0
  245. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/parity_crawl.py +0 -0
  246. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/parity_diff.json +0 -0
  247. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/real_world_cases.py +0 -0
  248. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/round_trip_tests.py +0 -0
  249. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/runner.py +0 -0
  250. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/stock_spec.json +0 -0
  251. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/fidelity/test_e2e_against_staging.py +0 -0
  252. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/parity/README.md +0 -0
  253. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/parity/__init__.py +0 -0
  254. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/parity/baseline_gaps.json +0 -0
  255. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/parity/compare.py +0 -0
  256. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/parity/intentional_deviations.json +0 -0
  257. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/parity/introspect.py +0 -0
  258. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/parity/reports/GAP_ANALYSIS.md +0 -0
  259. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/parity/reports/gap_report.json +0 -0
  260. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/parity/run_parity.py +0 -0
  261. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/parity/snapshots/athena_latest.json +0 -0
  262. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/parity/snapshots/upstream_python_docx_1.2.0.json +0 -0
  263. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/parity/test_parity_gap.py +0 -0
  264. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_add_section_extract_items.py +0 -0
  265. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_athena_extensions_contract.py +0 -0
  266. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_athena_extensions_registry.py +0 -0
  267. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_batching_perf.py +0 -0
  268. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_block_not_found_error.py +0 -0
  269. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_cell_add_paragraph_wire_shape.py +0 -0
  270. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_cell_add_table_not_supported.py +0 -0
  271. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_cell_inner_add_hyperlink_stash.py +0 -0
  272. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_cell_inner_add_run_via_cell_insert.py +0 -0
  273. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_cell_inner_format_stash.py +0 -0
  274. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_cell_inner_run_format_stash.py +0 -0
  275. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_cell_inner_run_guard.py +0 -0
  276. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_cell_text_plain_fastpath.py +0 -0
  277. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_cell_text_replace_semantics.py +0 -0
  278. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_collapsed_range_format.py +0 -0
  279. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_command_dataclasses.py +0 -0
  280. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_commands.py +0 -0
  281. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_comments.py +0 -0
  282. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_document_asset_id_property.py +0 -0
  283. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_document_clear.py +0 -0
  284. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_document_create.py +0 -0
  285. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_document_create_from_template.py +0 -0
  286. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_document_factory_validation.py +0 -0
  287. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_docx_exec_lab.py +0 -0
  288. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_docx_exec_lab_server.py +0 -0
  289. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_e2e_partial_failure_cascade.py +0 -0
  290. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_execution_scope.py +0 -0
  291. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_find_replace_session_open.py +0 -0
  292. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_hyperlink_coalescing.py +0 -0
  293. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_insert_deferred.py +0 -0
  294. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_iter_inner_content.py +0 -0
  295. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_list_styles.py +0 -0
  296. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_merged_cell_secondary_slot.py +0 -0
  297. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_merged_cells.py +0 -0
  298. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_oxml_shim.py +0 -0
  299. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_paragraph_text_len_cache.py +0 -0
  300. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_parity_misc.py +0 -0
  301. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_parity_round2.py +0 -0
  302. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_partial_failure_cascade.py +0 -0
  303. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_phase_a_behavior.py +0 -0
  304. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_phase_b_headers_footers.py +0 -0
  305. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_phase_c_tables.py +0 -0
  306. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_postproc_cell_format_rewrite.py +0 -0
  307. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_postproc_cell_run_format_rewrite.py +0 -0
  308. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_postproc_ref_restore.py +0 -0
  309. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_pr19766_review_fixes.py +0 -0
  310. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_python_docx_api_parity.py +0 -0
  311. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_revisions.py +0 -0
  312. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_add_paragraph_style.py +0 -0
  313. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_add_picture.py +0 -0
  314. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_add_run.py +0 -0
  315. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_cell_add_paragraph.py +0 -0
  316. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_comments_add_comment.py +0 -0
  317. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_comments_get.py +0 -0
  318. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_document_audit.py +0 -0
  319. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_document_element.py +0 -0
  320. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_enum_section.py +0 -0
  321. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_font_audit.py +0 -0
  322. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_header_footer.py +0 -0
  323. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_hyperlink.py +0 -0
  324. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_inline_shape.py +0 -0
  325. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_insert_paragraph_before.py +0 -0
  326. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_misc.py +0 -0
  327. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_paragraph_strict.py +0 -0
  328. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_paragraph_style.py +0 -0
  329. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_paragraph_style_strict.py +0 -0
  330. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_parfmt.py +0 -0
  331. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_row_col_cell.py +0 -0
  332. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_run_add_break.py +0 -0
  333. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_run_bool_setters.py +0 -0
  334. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_run_style.py +0 -0
  335. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_run_style_strict.py +0 -0
  336. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_run_text.py +0 -0
  337. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_run_underline.py +0 -0
  338. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_section_audit.py +0 -0
  339. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_section_dimensions.py +0 -0
  340. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_section_onoff.py +0 -0
  341. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_settings.py +0 -0
  342. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_shared_audit.py +0 -0
  343. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_style.py +0 -0
  344. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_styles.py +0 -0
  345. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_table_audit.py +0 -0
  346. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_table_cell.py +0 -0
  347. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_table_dimensions.py +0 -0
  348. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_silent_stub_table_layout.py +0 -0
  349. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_smoke_integration.py +0 -0
  350. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_style_acceptance.py +0 -0
  351. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_style_font.py +0 -0
  352. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_style_setters_contract.py +0 -0
  353. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_table_set_cell_perf.py +0 -0
  354. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_table_style_id_resolution.py +0 -0
  355. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_temporarily_unavailable.py +0 -0
  356. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_validate_find_replace_asset_script.py +0 -0
  357. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_wire_contract.py +0 -0
  358. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_xml_attr_guard.py +0 -0
  359. {athena_python_docx-0.15.4 → athena_python_docx-0.16.0}/tests/test_zod_wire_contract.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: athena-python-docx
3
- Version: 0.15.4
3
+ Version: 0.16.0
4
4
  Summary: Drop-in replacement for python-docx that connects to Athena's Superdoc/Keryx collaborative document stack
5
5
  Project-URL: Homepage, https://athenaintelligence.ai
6
6
  Author-email: Athena Intelligence <engineering@athenaintelligence.ai>
@@ -6,7 +6,7 @@ See CLAUDE.md for the API parity contract.
6
6
 
7
7
  from __future__ import annotations
8
8
 
9
- __version__ = "0.15.4"
9
+ __version__ = "0.16.0"
10
10
 
11
11
  from docx.api import Document
12
12
  from docx._buffer import flush_all
@@ -21,9 +21,9 @@ best-effort coalesce — if the loop thread races us we just flush twice
21
21
  (or zero times; the next loop-thread call drains it).
22
22
 
23
23
  `flush_all` is a process-wide hook used by the Daytona sandbox prelude to
24
- make sure pending writes hit Keryx and server-side edit sessions are
25
- checkpointed before the sandbox is suspended. It walks a weak-ref registry
26
- so dead Document instances don't keep their buffers alive.
24
+ make sure pending writes hit Keryx before the sandbox is suspended. It walks
25
+ a weak-ref registry so dead Workbook instances don't keep their buffers
26
+ alive.
27
27
  """
28
28
 
29
29
  from __future__ import annotations
@@ -124,10 +124,10 @@ if TYPE_CHECKING:
124
124
  # HTTP POST to agora (see ``_ptc._send``), so emitting one card per low-level
125
125
  # mutation produces hundreds of sub-cards per script and pays full network
126
126
  # RTT on every one. The allow-list keeps the per-action signal — one card
127
- # per logical paragraph creation — without the spam or the cumulative
128
- # latency. Asset-level creation events (``CreateDocument``) are emitted
129
- # from ``Document.create`` directly, not through this buffer path.
130
- _PTC_EMIT_TOOLS: frozenset[str] = frozenset({"CreateParagraph"})
127
+ # per logical block creation (paragraph, heading, table) — without the spam
128
+ # or the cumulative latency. Asset-level creation events (``CreateDocument``)
129
+ # are emitted from ``Document.create`` directly, not through this buffer path.
130
+ _PTC_EMIT_TOOLS: frozenset[str] = frozenset({"CreateParagraph", "CreateHeading", "CreateTable"})
131
131
 
132
132
 
133
133
  def _ptc_emit_end_batch(cmds: list[Command], *, is_error: bool) -> None:
@@ -180,12 +180,11 @@ def _unregister(buffer: "CommandBuffer") -> None:
180
180
 
181
181
 
182
182
  def flush_all(*, strict: bool = False) -> None:
183
- """Flush and checkpoint every live CommandBuffer in this process.
183
+ """Flush every live CommandBuffer in this process.
184
184
 
185
185
  Used by the Daytona sandbox prelude after user code returns, so
186
- buffered mutations make it to Keryx and server-side edit sessions are
187
- durably released before the sandbox is suspended. Safe to call when no
188
- Buffers exist (no-op).
186
+ buffered mutations make it to Keryx before the sandbox is suspended.
187
+ Safe to call when no Buffers exist (no-op).
189
188
 
190
189
  By default, failures are logged and swallowed for backwards
191
190
  compatibility with existing local scripts. The executor calls
@@ -217,9 +216,9 @@ def flush_all(*, strict: bool = False) -> None:
217
216
  sys.stderr.write(f"[docx-sdk] flush_all: {msg}\n")
218
217
  continue
219
218
  try:
220
- buf.commit()
219
+ buf.flush()
221
220
  except Exception as e: # noqa: BLE001
222
- msg = f"buffer {buf.asset_id} flush/commit failed: {e}"
221
+ msg = f"buffer {buf.asset_id} flush failed: {e}"
223
222
  if strict:
224
223
  failures.append(msg)
225
224
  else:
@@ -500,20 +499,6 @@ class CommandBuffer:
500
499
  _apply_proxy_id_rewrites(results, proxy_id_refs)
501
500
  return results
502
501
 
503
- def commit(self) -> None:
504
- """Flush pending commands and release the server-side edit session.
505
-
506
- The HTTP command response tells us docx-studio applied the batch to its
507
- pooled SuperDoc handle. Releasing the handle closes the collaboration
508
- session without discard on the server, which is the durability
509
- checkpoint for asset-backed document edits.
510
- """
511
- self._assert_current_execution()
512
- self.flush()
513
- release_asset = getattr(self._client, "release_asset", None)
514
- if callable(release_asset):
515
- release_asset(self._asset_id)
516
-
517
502
  def close(self) -> None:
518
503
  """Flush and disable. Idempotent."""
519
504
  if self._closed:
@@ -528,7 +513,7 @@ class CommandBuffer:
528
513
  self._proxy_id_refs = {}
529
514
  _ptc_emit_end_batch(pending, is_error=True)
530
515
  else:
531
- self.commit()
516
+ self.flush()
532
517
  finally:
533
518
  self._closed = True
534
519
  _unregister(self)
@@ -699,24 +699,6 @@ class HttpClient:
699
699
  except Exception: # noqa: BLE001
700
700
  pass
701
701
 
702
- def release_asset(self, asset_id: str) -> None:
703
- """Ask docx-studio to close its pooled SuperDoc session for ``asset_id``.
704
-
705
- Command POSTs only prove that the server accepted and applied the
706
- mutation batch to its live SuperDoc handle. The durable checkpoint for
707
- collaborative sessions happens when that handle is closed without
708
- discard, so ``Document.save()`` and the Daytona ``flush_all`` cleanup
709
- call this endpoint after draining the command buffer.
710
- """
711
- url: str = f"{self._base_url}/docs/{asset_id}/session/release"
712
- _http_post_json(
713
- session=self._session,
714
- url=url,
715
- api_key=self._api_key,
716
- body={},
717
- timeout=30.0,
718
- )
719
-
720
702
  def execute_batch(
721
703
  self,
722
704
  asset_id: str,
@@ -231,8 +231,8 @@ class Session:
231
231
  handle = self._doc_handle
232
232
  buffer = getattr(handle, "buffer", None) if handle is not None else None
233
233
  if buffer is not None:
234
- buffer.commit()
235
- _log_info(f"Saved {self._asset_id} (buffer drained and session released)")
234
+ buffer.flush()
235
+ _log_info(f"Saved {self._asset_id} (buffer drained)")
236
236
 
237
237
  async def close(self) -> None:
238
238
  """Close the session. Idempotent."""
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "athena-python-docx"
7
- version = "0.15.4"
7
+ version = "0.16.0"
8
8
  description = "Drop-in replacement for python-docx that connects to Athena's Superdoc/Keryx collaborative document stack"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -7,9 +7,8 @@ Verifies that:
7
7
  - Creates WITH a client id (the transparent-batching path) defer,
8
8
  - pending mutations drain in the same batch as an eager call,
9
9
  - ``flush()`` drains explicitly,
10
- - ``commit()`` drains and releases the server-side session,
11
10
  - the idle timer auto-flushes after a configurable window,
12
- - the process-wide ``flush_all`` walks every live buffer and commits it.
11
+ - the process-wide ``flush_all`` walks every live buffer.
13
12
  """
14
13
 
15
14
  from __future__ import annotations
@@ -45,7 +44,6 @@ class _FakeClient:
45
44
  # Envelope-level fields recorded per batch — used by
46
45
  # track-changes tests to verify changeMode / user propagation.
47
46
  self.envelopes: list[dict[str, Any]] = []
48
- self.releases: list[str] = []
49
47
  self._lock = threading.Lock()
50
48
 
51
49
  def execute_batch(
@@ -64,10 +62,6 @@ class _FakeClient:
64
62
  # Mimic per-command result envelope.
65
63
  return [{"index": i, "ok": True} for i, _ in enumerate(commands)]
66
64
 
67
- def release_asset(self, asset_id: str) -> None:
68
- with self._lock:
69
- self.releases.append(asset_id)
70
-
71
65
 
72
66
  class _FakeDocHandle:
73
67
  def __init__(self, buffer: CommandBuffer) -> None:
@@ -195,19 +189,6 @@ def test_flush_with_empty_queue_is_noop() -> None:
195
189
  buf.close()
196
190
 
197
191
 
198
- def test_commit_drains_pending_and_releases_server_session() -> None:
199
- fake = _FakeClient()
200
- buf = CommandBuffer(fake, "asset_1", auto_flush_seconds=0.0)
201
-
202
- buf.call(FormatApply(target={"kind": "block"}, inline={"bold": True}))
203
- buf.commit()
204
-
205
- assert len(fake.batches) == 1
206
- assert _types(fake.batches[0]) == ["FormatApply"]
207
- assert fake.releases == ["asset_1"]
208
- buf.close()
209
-
210
-
211
192
  def test_idle_timer_auto_flushes() -> None:
212
193
  """A non-zero idle window should flush after inactivity.
213
194
 
@@ -301,8 +282,6 @@ def test_flush_all_walks_every_live_buffer() -> None:
301
282
  flush_all()
302
283
  assert len(fake_a.batches) == 1
303
284
  assert len(fake_b.batches) == 1
304
- assert fake_a.releases == ["asset_a"]
305
- assert fake_b.releases == ["asset_b"]
306
285
  buf_a.close()
307
286
  buf_b.close()
308
287
 
@@ -145,32 +145,6 @@ def test_table_set_cell_batch_uses_long_running_http_timeout() -> None:
145
145
  assert captured["timeout"] == LONG_RUNNING_COMMAND_TIMEOUT_SECONDS
146
146
 
147
147
 
148
- def test_release_asset_posts_to_session_release_endpoint() -> None:
149
- captured: dict[str, Any] = {}
150
-
151
- def _capture(url: str, **kwargs: Any) -> _FakeResponse:
152
- captured["url"] = url
153
- captured["body"] = json.loads(kwargs["data"].decode("utf-8"))
154
- captured["auth"] = kwargs["headers"].get("Authorization")
155
- captured["timeout"] = kwargs["timeout"]
156
- return _FakeResponse(
157
- status_code=200,
158
- body=b'{"assetId":"asset_test","released":true}',
159
- )
160
-
161
- client = HttpClient(base_url="https://example.com", api_key="bg_key")
162
-
163
- with patch.object(client._session, "post", side_effect=_capture):
164
- client.release_asset("asset_test")
165
-
166
- assert captured == {
167
- "url": "https://example.com/docs/asset_test/session/release",
168
- "body": {},
169
- "auth": "Bearer bg_key",
170
- "timeout": 30.0,
171
- }
172
-
173
-
174
148
  def test_deeply_nested_paths() -> None:
175
149
  """``doc.format.paragraph.set_alignment(p)`` walks three levels and
176
150
  serializes as ``SetParagraphAlignment``. It's a pure mutation, so it
@@ -465,16 +465,20 @@ def test_buffer_emits_begin_on_call_and_end_on_flush(monkeypatch: Any) -> None:
465
465
  client = _FakeHttpClient()
466
466
  buf = CommandBuffer(client, asset_id="asset-1", auto_flush_seconds=0)
467
467
 
468
- buf.call(CreateParagraph(
469
- text="hello",
470
- at={"kind": "documentEnd"},
471
- client_node_id="p_first",
472
- ))
473
- buf.call(CreateParagraph(
474
- text="world",
475
- at={"kind": "documentEnd"},
476
- client_node_id="p_second",
477
- ))
468
+ buf.call(
469
+ CreateParagraph(
470
+ text="hello",
471
+ at={"kind": "documentEnd"},
472
+ client_node_id="p_first",
473
+ )
474
+ )
475
+ buf.call(
476
+ CreateParagraph(
477
+ text="world",
478
+ at={"kind": "documentEnd"},
479
+ client_node_id="p_second",
480
+ )
481
+ )
478
482
 
479
483
  assert len(calls["begin"]) == 2
480
484
  assert calls["begin"][0][0] == "CreateParagraph"
@@ -490,6 +494,36 @@ def test_buffer_emits_begin_on_call_and_end_on_flush(monkeypatch: Any) -> None:
490
494
  assert all(c["result"] == {"ok": True} for c in calls["end"])
491
495
 
492
496
 
497
+ def test_buffer_emits_for_create_table(monkeypatch: Any) -> None:
498
+ """``CreateTable`` is allow-listed too, so a table create surfaces as
499
+ its own PTC sub-tool-card (so the frontend can offer a scroll-to-table
500
+ affordance). The begin fires on call and the end on flush."""
501
+ from docx._buffer import CommandBuffer
502
+ from docx.commands import CreateTable
503
+
504
+ calls = _stub_ptc(monkeypatch)
505
+ client = _FakeHttpClient()
506
+ buf = CommandBuffer(client, asset_id="asset-1", auto_flush_seconds=0)
507
+
508
+ buf.call(
509
+ CreateTable(
510
+ rows=3,
511
+ columns=4,
512
+ at={"kind": "documentEnd"},
513
+ client_node_id="t_first",
514
+ )
515
+ )
516
+
517
+ assert len(calls["begin"]) == 1
518
+ assert calls["begin"][0][0] == "CreateTable"
519
+ assert calls["begin"][0][3] == "asset-1"
520
+ assert len(calls["end"]) == 0
521
+
522
+ buf.flush()
523
+ assert len(calls["end"]) == 1
524
+ assert calls["end"][0]["is_error"] is False
525
+
526
+
493
527
  def test_buffer_emits_end_with_error_on_flush_failure(monkeypatch: Any) -> None:
494
528
  """End events fire with ``is_error=True`` when the batch raises.
495
529
 
@@ -505,11 +539,13 @@ def test_buffer_emits_end_with_error_on_flush_failure(monkeypatch: Any) -> None:
505
539
  client = _FakeHttpClient(raise_on_call=True)
506
540
  buf = CommandBuffer(client, asset_id="asset-1", auto_flush_seconds=0)
507
541
 
508
- buf.call(CreateParagraph(
509
- text="hello",
510
- at={"kind": "documentEnd"},
511
- client_node_id="p_first",
512
- ))
542
+ buf.call(
543
+ CreateParagraph(
544
+ text="hello",
545
+ at={"kind": "documentEnd"},
546
+ client_node_id="p_first",
547
+ )
548
+ )
513
549
  assert len(calls["begin"]) == 1
514
550
 
515
551
  import pytest as _pytest
@@ -21,7 +21,7 @@ wheels = [
21
21
 
22
22
  [[package]]
23
23
  name = "athena-python-docx"
24
- version = "0.15.3"
24
+ version = "0.15.2"
25
25
  source = { editable = "." }
26
26
  dependencies = [
27
27
  { name = "requests" },