athena-python-docx 0.21.2__tar.gz → 0.21.3__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.
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/PKG-INFO +1 -1
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/__init__.py +1 -1
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/_buffer.py +6 -4
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/table.py +24 -6
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/pyproject.toml +1 -1
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_positional_cell_id.py +40 -3
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_ptc.py +35 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/uv.lock +1 -1
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/.gitignore +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/CLAUDE.md +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/DOCX_EXEC_LAB.md +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/README.md +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/_athena_extension.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/_batching.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/_citations.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/_execution.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/_http.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/_http_doc.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/_image_utils.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/_postproc.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/_ptc.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/_references.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/_table_styles.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/_timeouts.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/api.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/bookmarks.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/charts.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/client.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/commands.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/comments.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/document.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/enum/__init__.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/enum/section.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/enum/shape.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/enum/style.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/enum/table.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/enum/text.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/errors.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/exceptions.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/fields.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/footnotes.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/math.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/opc/__init__.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/opc/coreprops.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/oxml/__init__.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/revisions.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/sdt.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/section.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/session.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/settings.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/shape.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/shared.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/styles/__init__.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/styles/style.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/styles/styles.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/text/__init__.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/text/font.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/text/hyperlink.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/text/pagebreak.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/text/paragraph.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/text/parfmt.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/text/run.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/text/tabstops.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/toc.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/docx/typing.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/scripts/docx_exec_lab.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/scripts/docx_exec_lab_examples/fast_table_fill.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/scripts/docx_exec_lab_examples/find_replace_literal.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/scripts/docx_exec_lab_server.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/scripts/dump_wire_fixtures.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/scripts/publish.sh +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/scripts/release.sh +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/scripts/round_trip_smoke.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/scripts/smoke_test_block_not_found.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/scripts/validate_find_replace_asset.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/__init__.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/conftest.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/METHODOLOGY.md +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/README.md +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/__init__.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/ab_probe_cases.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/ab_probe_runner.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/auto_gen_cases.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/binary_round_trip.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/cases.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/complex_cases.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/coverage_report.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/extract.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/extreme_cases.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/fake_session.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/firm_templates/README.md +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/firm_templates/__init__.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/firm_templates/_runner.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/firm_templates/extractor.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/firm_templates/test_pw_corpus.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/firm_templates/test_pw_research_digest.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/local_runner.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/mega_cases.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshot.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/01_basic_paragraph.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/02_multiple_headings.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/03_runs_with_formatting.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/04_font_name_and_size.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/05_font_color_rgb.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/06_font_character_properties.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/07_font_subscript_superscript.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/08_font_highlight.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/09_paragraph_alignment.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/100_table_negative_indexing.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/101_table_cells_flat_iteration.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/102_text_with_embedded_special_chars.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/104_core_properties_datetime.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/105_default_one_section.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/106_heading_paragraph_format.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/107_varying_row_heights.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/10_paragraph_indents.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/11_paragraph_spacing.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/12_paragraph_keep_options.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/13_paragraph_tab_stops.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/14_run_add_tab_and_break.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/15_run_add_break_page.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/16_paragraph_clear_and_insert_before.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/17_table_basic.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/18_table_cell_text.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/19_table_row_column_sizing.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/20_table_cell_vertical_alignment.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/21_table_alignment_and_autofit.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/22_table_cell_paragraphs_iteration.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/24_table_add_row_column.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/25_table_merge_cells.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/26_section_page_setup.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/27_section_margins.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/28_section_add_new.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/29_section_headers_linked.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/30_styles_iteration.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/31_styles_lookup_and_default.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/32_styles_add_paragraph_style.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/33_core_properties_set_and_get.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/34_inline_shapes_iterate_empty.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/35_full_report.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/36_replace_text_in_paragraph.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/37_iterate_runs_and_format_all_bold.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/38_font_all_properties.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/39_large_body_100_paragraphs.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/40_large_table_10x10.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/41_unicode_and_emoji.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/42_very_long_paragraph.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/43_paragraph_text_round_trip.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/44_paragraph_alignment_round_trip.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/45_cell_text_round_trip.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/46_run_text_setter_round_trip.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/47_font_size_round_trip.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/48_font_color_round_trip.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/49_resume_layout.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/50_multi_section_doc.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/52_iterate_everything.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/53_apply_style_to_paragraphs.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/54_empty_everything.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/55_single_character_runs.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/56_everything_in_one.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/57_runs_after_multiple_text_appends.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/58_modify_runs_in_place.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/59_indent_round_trip.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/60_space_round_trip.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/61_cell_paragraph_with_runs.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/62_many_cell_paragraphs.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/63_table_style_round_trip.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/64_many_sections.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/65_20x20_table_formatted.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/66_toc_like_structure.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/67_paragraph_insert_before_chain.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/68_invoice.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/69_newsletter.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/70_add_and_iterate_back.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/71_academic_paper.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/72_legal_contract.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/73_form_with_many_tables.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/74_paragraph_with_10_runs.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/75_paragraph_negative_first_line_indent.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/76_rgbcolor_from_string.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/77_length_unit_conversions.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/78_paragraph_copy_style.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/79_bulk_cell_formatting.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/80_apply_style_after_add_run.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/81_multi_page_with_breaks.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/82_add_text_on_existing_run.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/83_clear_then_repopulate_paragraph.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/84_table_reread_row_count.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/85_header_footer_access.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/86_font_read_unset_returns_none.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/87_500_paragraph_doc.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/88_mixed_content_iteration.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/89_alignment_clear_via_none.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/90_cell_add_paragraph_styled.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/91_many_small_tables.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/92_margins_every_section.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/93_font_bool_reads_after_set.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/94_page_break_before_paragraph.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/95_paragraph_hyperlinks_empty.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/96_paragraph_contains_page_break.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/97_document_styles_by_key.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/98_style_contains_check.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/99_run_add_picture_from_bytes.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/ex02_unicode_everywhere.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/ex03_1000_paragraphs.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/ex04_50x50_table.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/ex05_long_text_in_cell.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/ex06_hundred_tiny_runs.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/ex07_every_font_boolean.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/ex08_many_continuous_sections.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/ex09_many_tab_stops.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/ex10_complex_bom.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/ex11_banded_rows_formatting.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/ex12_section_reconfigure.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/ex13_cell_with_10_paragraphs.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/ex14_styled_report_table.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/ex15_paragraph_all_format_props.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/ex16_runs_interleaved_with_breaks.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/ex17_all_break_kinds.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/ex18_read_back_large_doc.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/ex19_mutate_all_runs.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/ex20_kitchen_sink_v2.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/mega01_book_chapter.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/mega02_research_proposal.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/mega03_financial_statement.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/mega04_recipe_card.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/mega05_user_manual.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/mega06_complex_newsletter.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/mega07_budget_spreadsheet.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/mega08_product_catalog.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/mega09_signed_contract.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/mega10_api_documentation.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/rw01_official_quickstart.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/rw02_paragraph_style_list.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/rw03_character_formatting.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/rw04_section_page_setup.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/rw05_toc_pattern.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/rw06_meeting_minutes.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/rw07_dense_formatting_demo.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/rw08_table_merged_header.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/rw09_bulk_run_iteration.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/rw10_colored_grid_table.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/rw11_header_text.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/rw12_first_page_footer.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/rw13_even_page_header.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/op_snapshots/rw15_paragraph_style_instance.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/ours_spec.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/parity_crawl.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/parity_diff.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/real_world_cases.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/round_trip_tests.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/stock_spec.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/test_e2e_against_staging.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/parity/README.md +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/parity/__init__.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/parity/baseline_gaps.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/parity/compare.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/parity/intentional_deviations.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/parity/introspect.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/parity/reports/GAP_ANALYSIS.md +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/parity/reports/gap_report.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/parity/run_parity.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/parity/snapshots/athena_latest.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/parity/snapshots/upstream_python_docx_1.2.0.json +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/parity/test_parity_gap.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_add_section_extract_items.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_athena_extensions_contract.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_athena_extensions_registry.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_batching_perf.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_block_not_found_error.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_buffer.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_cell_add_paragraph_wire_shape.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_cell_add_table_not_supported.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_cell_inner_add_hyperlink_stash.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_cell_inner_add_run_via_cell_insert.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_cell_inner_format_stash.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_cell_inner_run_format_stash.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_cell_inner_run_guard.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_cell_text_plain_fastpath.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_cell_text_replace_semantics.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_citations.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_collapsed_range_format.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_command_dataclasses.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_commands.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_comments.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_document_asset_id_property.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_document_clear.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_document_create.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_document_create_from_template.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_document_factory_validation.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_docx_exec_lab.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_docx_exec_lab_server.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_e2e_partial_failure_cascade.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_execution_scope.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_find_replace_session_open.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_http_transport.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_hyperlink_coalescing.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_image_url_data_uri.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_insert_deferred.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_iter_inner_content.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_list_styles.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_merged_cell_secondary_slot.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_merged_cells.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_oxml_shim.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_paragraph_text_len_cache.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_parity_misc.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_parity_round2.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_partial_failure_cascade.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_phase_a_behavior.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_phase_b_headers_footers.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_phase_c_tables.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_postproc_cell_format_rewrite.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_postproc_cell_run_format_rewrite.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_postproc_ref_restore.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_pr19766_review_fixes.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_python_docx_api_parity.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_revisions.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_add_paragraph_style.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_add_picture.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_add_run.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_cell_add_paragraph.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_comments_add_comment.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_comments_get.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_document_audit.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_document_element.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_enum_section.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_font_audit.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_header_footer.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_hyperlink.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_inline_shape.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_insert_paragraph_before.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_misc.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_paragraph_strict.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_paragraph_style.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_paragraph_style_strict.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_parfmt.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_row_col_cell.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_run_add_break.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_run_bool_setters.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_run_style.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_run_style_strict.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_run_text.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_run_underline.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_section_audit.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_section_dimensions.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_section_onoff.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_settings.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_shared_audit.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_style.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_styles.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_table_audit.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_table_cell.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_table_dimensions.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_silent_stub_table_layout.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_smoke_integration.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_style_acceptance.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_style_font.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_style_setters_contract.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_table_set_cell_perf.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_table_style_id_resolution.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_temporarily_unavailable.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_validate_find_replace_asset_script.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_wire_contract.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/test_xml_attr_guard.py +0 -0
- {athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/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.21.
|
|
3
|
+
Version: 0.21.3
|
|
4
4
|
Summary: Drop-in replacement for python-docx that connects to Athena's DOCX Studio collaborative document stack
|
|
5
5
|
Project-URL: Homepage, https://athenaintelligence.ai
|
|
6
6
|
Author-email: Athena Intelligence <engineering@athenaintelligence.ai>
|
|
@@ -124,10 +124,12 @@ 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 block creation
|
|
128
|
-
#
|
|
129
|
-
#
|
|
130
|
-
_PTC_EMIT_TOOLS: frozenset[str] = frozenset(
|
|
127
|
+
# per logical block/citation creation — without the spam or the cumulative
|
|
128
|
+
# latency. Asset-level creation events (``CreateDocument``) are emitted from
|
|
129
|
+
# ``Document.create`` directly, not through this buffer path.
|
|
130
|
+
_PTC_EMIT_TOOLS: frozenset[str] = frozenset(
|
|
131
|
+
{"CreateParagraph", "CreateHeading", "CreateTable", "AddCitation"}
|
|
132
|
+
)
|
|
131
133
|
|
|
132
134
|
|
|
133
135
|
def _should_emit_ptc(cmd: Command) -> bool:
|
|
@@ -1541,11 +1541,13 @@ class _Cell:
|
|
|
1541
1541
|
|
|
1542
1542
|
Reads the proxy's stored ``_node_id`` with NO round-trip. DOCX Studio
|
|
1543
1543
|
tables carry real (non-``t:N``) node ids → returns ``None`` so the
|
|
1544
|
-
caller queries (DOCX Studio is pooled, so that read is cheap anyway).
|
|
1545
|
-
freshly-created docx-editor table still holds a client UUID until its
|
|
1546
|
-
create flushes
|
|
1547
|
-
|
|
1548
|
-
|
|
1544
|
+
caller queries (DOCX Studio is pooled, so that read is cheap anyway).
|
|
1545
|
+
A freshly-created docx-editor table still holds a client UUID until its
|
|
1546
|
+
create flushes. For docx-editor, :meth:`Document.add_table` already
|
|
1547
|
+
knows the table's eventual document-order index, so SDK-created body
|
|
1548
|
+
tables can fast-path before a fragile first ``tables.get_cells`` query.
|
|
1549
|
+
We first try to flush the pending create so DOCX Studio's non-positional
|
|
1550
|
+
table ids can still fall back to the query path after the id rewrite.
|
|
1549
1551
|
|
|
1550
1552
|
Gated to a **known uniform grid**: the table must have been created
|
|
1551
1553
|
via :meth:`Document.add_table` (so ``_doc_index`` is set and the full
|
|
@@ -1557,11 +1559,27 @@ class _Cell:
|
|
|
1557
1559
|
fall back to the query path to stay address-correct.
|
|
1558
1560
|
"""
|
|
1559
1561
|
table = self._table
|
|
1560
|
-
|
|
1562
|
+
doc_index = getattr(table, "_doc_index", None)
|
|
1563
|
+
if doc_index is None or getattr(table, "_has_merges", False):
|
|
1561
1564
|
return None
|
|
1562
1565
|
nid = getattr(table, "_node_id", None)
|
|
1563
1566
|
if isinstance(nid, str) and nid.startswith("t:") and nid[2:].isdigit():
|
|
1564
1567
|
return f"tc:{nid[2:]}:{self._row}:{self._col}"
|
|
1568
|
+
if (
|
|
1569
|
+
isinstance(nid, str)
|
|
1570
|
+
and nid.startswith("t_")
|
|
1571
|
+
and getattr(table, "_header_footer_ref_id", None) is None
|
|
1572
|
+
):
|
|
1573
|
+
handle = getattr(table._session, "_doc_handle", None)
|
|
1574
|
+
buf = getattr(handle, "buffer", None) if handle is not None else None
|
|
1575
|
+
if buf is not None:
|
|
1576
|
+
buf.flush()
|
|
1577
|
+
nid = getattr(table, "_node_id", None)
|
|
1578
|
+
if isinstance(nid, str) and nid.startswith("t:") and nid[2:].isdigit():
|
|
1579
|
+
return f"tc:{nid[2:]}:{self._row}:{self._col}"
|
|
1580
|
+
if not (isinstance(nid, str) and nid.startswith("t_")):
|
|
1581
|
+
return None
|
|
1582
|
+
return f"tc:{doc_index}:{self._row}:{self._col}"
|
|
1565
1583
|
return None
|
|
1566
1584
|
|
|
1567
1585
|
def _cell_id(self) -> str:
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "athena-python-docx"
|
|
7
|
-
version = "0.21.
|
|
7
|
+
version = "0.21.3"
|
|
8
8
|
description = "Drop-in replacement for python-docx that connects to Athena's DOCX Studio collaborative document stack"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
@@ -98,6 +98,17 @@ class _TableStub:
|
|
|
98
98
|
return self._node_id
|
|
99
99
|
|
|
100
100
|
|
|
101
|
+
class _RewritingBuffer:
|
|
102
|
+
def __init__(self, table: _TableStub, real_node_id: str) -> None:
|
|
103
|
+
self.calls = 0
|
|
104
|
+
self._table = table
|
|
105
|
+
self._real_node_id = real_node_id
|
|
106
|
+
|
|
107
|
+
def flush(self) -> None:
|
|
108
|
+
self.calls += 1
|
|
109
|
+
self._table._node_id = self._real_node_id
|
|
110
|
+
|
|
111
|
+
|
|
101
112
|
def test_docx_editor_cell_id_is_positional_with_no_query() -> None:
|
|
102
113
|
from docx.table import _Cell
|
|
103
114
|
|
|
@@ -124,6 +135,32 @@ def test_docx_editor_cell_address_shape_no_query() -> None:
|
|
|
124
135
|
assert gc.calls == 0
|
|
125
136
|
|
|
126
137
|
|
|
138
|
+
def test_fresh_client_id_table_uses_known_doc_index_no_query() -> None:
|
|
139
|
+
from docx.table import _Cell
|
|
140
|
+
|
|
141
|
+
gc = _CountingGetCells()
|
|
142
|
+
table = _TableStub("t_client_abc", gc, doc_index=4)
|
|
143
|
+
cell = _Cell(table=table, row=1, col=1) # type: ignore[arg-type]
|
|
144
|
+
|
|
145
|
+
assert cell._cell_id() == "tc:4:1:1"
|
|
146
|
+
assert gc.calls == 0
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
def test_fresh_client_id_table_flushes_buffer_then_uses_rewritten_positional_id() -> None:
|
|
150
|
+
from docx.table import _Cell
|
|
151
|
+
|
|
152
|
+
gc = _CountingGetCells()
|
|
153
|
+
table = _TableStub("t_client_abc", gc, doc_index=4)
|
|
154
|
+
buffer = _RewritingBuffer(table, "t:8")
|
|
155
|
+
table._session._doc_handle = type("_Handle", (), {"buffer": buffer})()
|
|
156
|
+
cell = _Cell(table=table, row=1, col=1) # type: ignore[arg-type]
|
|
157
|
+
|
|
158
|
+
assert cell._cell_id() == "tc:8:1:1"
|
|
159
|
+
assert table._node_id == "t:8"
|
|
160
|
+
assert buffer.calls == 1
|
|
161
|
+
assert gc.calls == 0
|
|
162
|
+
|
|
163
|
+
|
|
127
164
|
def test_docx_studio_cell_id_falls_back_to_query() -> None:
|
|
128
165
|
from docx.table import _Cell
|
|
129
166
|
|
|
@@ -164,7 +201,7 @@ def test_read_loaded_table_falls_back_to_query() -> None:
|
|
|
164
201
|
assert gc.calls >= 1
|
|
165
202
|
|
|
166
203
|
|
|
167
|
-
def
|
|
204
|
+
def test_unflushed_client_table_uses_doc_index_not_find_for_cell_id() -> None:
|
|
168
205
|
from docx.table import Table, _Cell
|
|
169
206
|
|
|
170
207
|
get_cells = _CountingGetCells(cell_id="tc:0:0:0")
|
|
@@ -197,8 +234,8 @@ def test_unflushed_client_table_uses_blocks_list_not_find_for_cell_id() -> None:
|
|
|
197
234
|
cell = _Cell(table=table, row=0, col=0)
|
|
198
235
|
|
|
199
236
|
assert cell._cell_id() == "tc:0:0:0"
|
|
200
|
-
assert table._node_id == "
|
|
201
|
-
assert blocks_list.calls == [
|
|
237
|
+
assert table._node_id == "t_client_uuid"
|
|
238
|
+
assert blocks_list.calls == []
|
|
202
239
|
assert failing_find.calls == 0
|
|
203
240
|
|
|
204
241
|
|
|
@@ -524,6 +524,41 @@ def test_buffer_emits_for_create_table(monkeypatch: Any) -> None:
|
|
|
524
524
|
assert calls["end"][0]["is_error"] is False
|
|
525
525
|
|
|
526
526
|
|
|
527
|
+
def test_buffer_emits_for_add_citation(monkeypatch: Any) -> None:
|
|
528
|
+
"""``AddCitation`` is allow-listed so agent-authored citations are
|
|
529
|
+
visible as PTC sub-tool-cards instead of silently only updating the
|
|
530
|
+
Athena citation layer."""
|
|
531
|
+
from docx._buffer import CommandBuffer
|
|
532
|
+
from docx.commands import AddCitation
|
|
533
|
+
|
|
534
|
+
calls = _stub_ptc(monkeypatch)
|
|
535
|
+
client = _FakeHttpClient()
|
|
536
|
+
buf = CommandBuffer(client, asset_id="asset-1", auto_flush_seconds=0)
|
|
537
|
+
|
|
538
|
+
buf.call(
|
|
539
|
+
AddCitation(
|
|
540
|
+
destination_anchor={"type": "pm_node", "nodeId": "p_1"},
|
|
541
|
+
citation_string="/dashboard/spaces/?asset_ids=asset_pdf&type=pdf&page=2",
|
|
542
|
+
citation_id="citation_abc",
|
|
543
|
+
excerpt="20,049 total vulnerabilities",
|
|
544
|
+
display_value="Vulnerability total",
|
|
545
|
+
)
|
|
546
|
+
)
|
|
547
|
+
|
|
548
|
+
assert len(calls["begin"]) == 1
|
|
549
|
+
assert calls["begin"][0][0] == "AddCitation"
|
|
550
|
+
assert calls["begin"][0][1]["citationString"] == (
|
|
551
|
+
"/dashboard/spaces/?asset_ids=asset_pdf&type=pdf&page=2"
|
|
552
|
+
)
|
|
553
|
+
assert calls["begin"][0][3] == "asset-1"
|
|
554
|
+
assert len(calls["end"]) == 0
|
|
555
|
+
|
|
556
|
+
buf.flush()
|
|
557
|
+
assert len(calls["end"]) == 1
|
|
558
|
+
assert calls["end"][0]["tool_name"] == "AddCitation"
|
|
559
|
+
assert calls["end"][0]["is_error"] is False
|
|
560
|
+
|
|
561
|
+
|
|
527
562
|
def test_buffer_skips_ptc_for_non_body_creates(monkeypatch: Any) -> None:
|
|
528
563
|
"""Allow-listed creates that target a non-body story (header/footer/
|
|
529
564
|
footnote via ``in_``) do NOT emit a PTC card: the frontend locate
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/scripts/smoke_test_block_not_found.py
RENAMED
|
File without changes
|
{athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/scripts/validate_find_replace_asset.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/firm_templates/README.md
RENAMED
|
File without changes
|
{athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/firm_templates/__init__.py
RENAMED
|
File without changes
|
{athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/firm_templates/_runner.py
RENAMED
|
File without changes
|
{athena_python_docx-0.21.2 → athena_python_docx-0.21.3}/tests/fidelity/firm_templates/extractor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|