athena-python-docx 0.18.0__tar.gz → 0.18.1__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.18.0 → athena_python_docx-0.18.1}/PKG-INFO +1 -1
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/__init__.py +1 -1
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/document.py +23 -2
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/pyproject.toml +1 -1
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_commands.py +10 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_iter_inner_content.py +37 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/.gitignore +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/CLAUDE.md +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/DOCX_EXEC_LAB.md +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/README.md +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/_athena_extension.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/_batching.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/_buffer.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/_execution.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/_http.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/_http_doc.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/_image_utils.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/_postproc.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/_ptc.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/_table_styles.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/_timeouts.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/api.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/bookmarks.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/charts.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/client.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/commands.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/comments.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/enum/__init__.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/enum/section.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/enum/style.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/enum/table.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/enum/text.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/errors.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/exceptions.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/fields.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/footnotes.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/math.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/opc/__init__.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/opc/coreprops.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/oxml/__init__.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/revisions.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/sdt.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/section.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/session.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/settings.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/shape.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/shared.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/styles/__init__.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/styles/style.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/styles/styles.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/table.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/text/__init__.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/text/font.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/text/hyperlink.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/text/pagebreak.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/text/paragraph.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/text/parfmt.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/text/run.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/text/tabstops.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/toc.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/docx/typing.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/scripts/docx_exec_lab.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/scripts/docx_exec_lab_examples/fast_table_fill.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/scripts/docx_exec_lab_examples/find_replace_literal.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/scripts/docx_exec_lab_server.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/scripts/publish.sh +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/scripts/release.sh +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/scripts/round_trip_smoke.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/scripts/smoke_test_block_not_found.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/scripts/validate_find_replace_asset.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/__init__.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/conftest.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/METHODOLOGY.md +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/README.md +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/__init__.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/ab_probe_cases.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/ab_probe_runner.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/auto_gen_cases.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/binary_round_trip.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/cases.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/complex_cases.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/coverage_report.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/extract.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/extreme_cases.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/fake_session.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/firm_templates/README.md +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/firm_templates/__init__.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/firm_templates/_runner.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/firm_templates/extractor.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/firm_templates/test_pw_corpus.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/firm_templates/test_pw_research_digest.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/local_runner.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/mega_cases.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshot.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/01_basic_paragraph.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/02_multiple_headings.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/03_runs_with_formatting.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/04_font_name_and_size.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/05_font_color_rgb.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/06_font_character_properties.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/07_font_subscript_superscript.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/08_font_highlight.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/09_paragraph_alignment.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/100_table_negative_indexing.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/101_table_cells_flat_iteration.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/102_text_with_embedded_special_chars.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/104_core_properties_datetime.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/105_default_one_section.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/106_heading_paragraph_format.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/107_varying_row_heights.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/10_paragraph_indents.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/11_paragraph_spacing.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/12_paragraph_keep_options.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/13_paragraph_tab_stops.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/14_run_add_tab_and_break.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/15_run_add_break_page.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/16_paragraph_clear_and_insert_before.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/17_table_basic.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/18_table_cell_text.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/19_table_row_column_sizing.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/20_table_cell_vertical_alignment.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/21_table_alignment_and_autofit.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/22_table_cell_paragraphs_iteration.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/24_table_add_row_column.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/25_table_merge_cells.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/26_section_page_setup.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/27_section_margins.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/28_section_add_new.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/29_section_headers_linked.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/30_styles_iteration.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/31_styles_lookup_and_default.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/32_styles_add_paragraph_style.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/33_core_properties_set_and_get.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/34_inline_shapes_iterate_empty.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/35_full_report.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/36_replace_text_in_paragraph.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/37_iterate_runs_and_format_all_bold.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/38_font_all_properties.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/39_large_body_100_paragraphs.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/40_large_table_10x10.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/41_unicode_and_emoji.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/42_very_long_paragraph.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/43_paragraph_text_round_trip.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/44_paragraph_alignment_round_trip.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/45_cell_text_round_trip.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/46_run_text_setter_round_trip.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/47_font_size_round_trip.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/48_font_color_round_trip.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/49_resume_layout.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/50_multi_section_doc.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/52_iterate_everything.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/53_apply_style_to_paragraphs.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/54_empty_everything.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/55_single_character_runs.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/56_everything_in_one.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/57_runs_after_multiple_text_appends.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/58_modify_runs_in_place.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/59_indent_round_trip.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/60_space_round_trip.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/61_cell_paragraph_with_runs.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/62_many_cell_paragraphs.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/63_table_style_round_trip.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/64_many_sections.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/65_20x20_table_formatted.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/66_toc_like_structure.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/67_paragraph_insert_before_chain.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/68_invoice.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/69_newsletter.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/70_add_and_iterate_back.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/71_academic_paper.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/72_legal_contract.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/73_form_with_many_tables.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/74_paragraph_with_10_runs.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/75_paragraph_negative_first_line_indent.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/76_rgbcolor_from_string.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/77_length_unit_conversions.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/78_paragraph_copy_style.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/79_bulk_cell_formatting.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/80_apply_style_after_add_run.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/81_multi_page_with_breaks.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/82_add_text_on_existing_run.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/83_clear_then_repopulate_paragraph.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/84_table_reread_row_count.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/85_header_footer_access.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/86_font_read_unset_returns_none.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/87_500_paragraph_doc.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/88_mixed_content_iteration.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/89_alignment_clear_via_none.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/90_cell_add_paragraph_styled.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/91_many_small_tables.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/92_margins_every_section.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/93_font_bool_reads_after_set.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/94_page_break_before_paragraph.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/95_paragraph_hyperlinks_empty.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/96_paragraph_contains_page_break.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/97_document_styles_by_key.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/98_style_contains_check.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/99_run_add_picture_from_bytes.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/ex02_unicode_everywhere.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/ex03_1000_paragraphs.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/ex04_50x50_table.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/ex05_long_text_in_cell.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/ex06_hundred_tiny_runs.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/ex07_every_font_boolean.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/ex08_many_continuous_sections.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/ex09_many_tab_stops.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/ex10_complex_bom.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/ex11_banded_rows_formatting.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/ex12_section_reconfigure.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/ex13_cell_with_10_paragraphs.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/ex14_styled_report_table.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/ex15_paragraph_all_format_props.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/ex16_runs_interleaved_with_breaks.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/ex17_all_break_kinds.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/ex18_read_back_large_doc.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/ex19_mutate_all_runs.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/ex20_kitchen_sink_v2.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/mega01_book_chapter.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/mega02_research_proposal.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/mega03_financial_statement.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/mega04_recipe_card.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/mega05_user_manual.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/mega06_complex_newsletter.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/mega07_budget_spreadsheet.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/mega08_product_catalog.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/mega09_signed_contract.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/mega10_api_documentation.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/rw01_official_quickstart.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/rw02_paragraph_style_list.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/rw03_character_formatting.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/rw04_section_page_setup.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/rw05_toc_pattern.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/rw06_meeting_minutes.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/rw07_dense_formatting_demo.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/rw08_table_merged_header.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/rw09_bulk_run_iteration.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/rw10_colored_grid_table.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/rw11_header_text.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/rw12_first_page_footer.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/rw13_even_page_header.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/rw15_paragraph_style_instance.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/ours_spec.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/parity_crawl.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/parity_diff.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/real_world_cases.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/round_trip_tests.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/runner.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/stock_spec.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/test_e2e_against_staging.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/parity/README.md +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/parity/__init__.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/parity/baseline_gaps.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/parity/compare.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/parity/intentional_deviations.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/parity/introspect.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/parity/reports/GAP_ANALYSIS.md +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/parity/reports/gap_report.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/parity/run_parity.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/parity/snapshots/athena_latest.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/parity/snapshots/upstream_python_docx_1.2.0.json +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/parity/test_parity_gap.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_add_section_extract_items.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_athena_extensions_contract.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_athena_extensions_registry.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_batching_perf.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_block_not_found_error.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_buffer.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_cell_add_paragraph_wire_shape.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_cell_add_table_not_supported.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_cell_inner_add_hyperlink_stash.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_cell_inner_add_run_via_cell_insert.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_cell_inner_format_stash.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_cell_inner_run_format_stash.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_cell_inner_run_guard.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_cell_text_plain_fastpath.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_cell_text_replace_semantics.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_collapsed_range_format.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_command_dataclasses.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_comments.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_document_asset_id_property.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_document_clear.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_document_create.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_document_create_from_template.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_document_factory_validation.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_docx_exec_lab.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_docx_exec_lab_server.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_e2e_partial_failure_cascade.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_execution_scope.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_find_replace_session_open.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_http_transport.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_hyperlink_coalescing.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_image_url_data_uri.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_insert_deferred.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_list_styles.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_merged_cell_secondary_slot.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_merged_cells.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_oxml_shim.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_paragraph_text_len_cache.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_parity_misc.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_parity_round2.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_partial_failure_cascade.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_phase_a_behavior.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_phase_b_headers_footers.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_phase_c_tables.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_postproc_cell_format_rewrite.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_postproc_cell_run_format_rewrite.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_postproc_ref_restore.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_pr19766_review_fixes.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_ptc.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_python_docx_api_parity.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_revisions.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_add_paragraph_style.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_add_picture.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_add_run.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_cell_add_paragraph.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_comments_add_comment.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_comments_get.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_document_audit.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_document_element.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_enum_section.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_font_audit.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_header_footer.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_hyperlink.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_inline_shape.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_insert_paragraph_before.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_misc.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_paragraph_strict.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_paragraph_style.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_paragraph_style_strict.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_parfmt.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_row_col_cell.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_run_add_break.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_run_bool_setters.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_run_style.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_run_style_strict.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_run_text.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_run_underline.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_section_audit.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_section_dimensions.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_section_onoff.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_settings.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_shared_audit.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_style.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_styles.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_table_audit.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_table_cell.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_table_dimensions.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_silent_stub_table_layout.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_smoke_integration.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_style_acceptance.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_style_font.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_style_setters_contract.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_table_set_cell_perf.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_table_style_id_resolution.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_temporarily_unavailable.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_validate_find_replace_asset_script.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_wire_contract.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_xml_attr_guard.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/test_zod_wire_contract.py +0 -0
- {athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: athena-python-docx
|
|
3
|
-
Version: 0.18.
|
|
3
|
+
Version: 0.18.1
|
|
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>
|
|
@@ -463,11 +463,17 @@ class Document:
|
|
|
463
463
|
from docx.text.paragraph import Paragraph
|
|
464
464
|
|
|
465
465
|
self._ensure_open()
|
|
466
|
+
# Request the inlined run breakdown so each yielded Paragraph serves
|
|
467
|
+
# ``.text`` / ``.runs`` / ``.style`` from the one ``blocks.list`` instead
|
|
468
|
+
# of a ``get_node_by_id`` per item — without this, iterating and reading
|
|
469
|
+
# N blocks is N round-trips (each a full Y.Doc reload on docx-editor).
|
|
470
|
+
# Same prefetch as ``Document.paragraphs``; see PERFORMANCE_BATCHING_ANALYSIS.md.
|
|
466
471
|
raw: object = run_sync(
|
|
467
472
|
self._session.doc.blocks.list(
|
|
468
473
|
{
|
|
469
474
|
"nodeTypes": ["paragraph", "heading", "table"],
|
|
470
|
-
"includeText":
|
|
475
|
+
"includeText": True,
|
|
476
|
+
"includeRuns": True,
|
|
471
477
|
},
|
|
472
478
|
),
|
|
473
479
|
)
|
|
@@ -488,10 +494,18 @@ class Document:
|
|
|
488
494
|
if nt == "table":
|
|
489
495
|
yield Table(session=self._session, node_id=node_id)
|
|
490
496
|
else:
|
|
497
|
+
# Seed the read cache when the server inlined this block's runs
|
|
498
|
+
# (get_node_by_id-shaped snapshot, consumed unchanged by
|
|
499
|
+
# Paragraph._node_info). Tables / un-inlined blocks fall back to
|
|
500
|
+
# live queries.
|
|
501
|
+
snapshot: dict | None = (
|
|
502
|
+
{"node": b} if isinstance(b.get("paragraph"), dict) else None
|
|
503
|
+
)
|
|
491
504
|
yield Paragraph(
|
|
492
505
|
session=self._session,
|
|
493
506
|
node_id=node_id,
|
|
494
507
|
node_type=nt if isinstance(nt, str) else "paragraph",
|
|
508
|
+
node_info_snapshot=snapshot,
|
|
495
509
|
)
|
|
496
510
|
|
|
497
511
|
@property
|
|
@@ -2210,10 +2224,17 @@ def _extract_inserted_node_id(result: dict, *, expected_type: str) -> str:
|
|
|
2210
2224
|
if block_id:
|
|
2211
2225
|
return block_id
|
|
2212
2226
|
|
|
2213
|
-
# Shape 3 — top-level blockId or target.blockId.
|
|
2227
|
+
# Shape 3 — top-level blockId / nodeId, or target.blockId. The docx-editor
|
|
2228
|
+
# engine returns a flat ``{"changed": True, "nodeId": "<paraId>"}`` for
|
|
2229
|
+
# create ops (no SuperDoc-style nesting), so accept a top-level ``nodeId``
|
|
2230
|
+
# too — otherwise response-bearing creates (insert_paragraph_before,
|
|
2231
|
+
# add_caption) raise "did not return nodeId" even though the block was made.
|
|
2214
2232
|
top_block: object = result.get("blockId")
|
|
2215
2233
|
if isinstance(top_block, str) and top_block:
|
|
2216
2234
|
return top_block
|
|
2235
|
+
top_node: object = result.get("nodeId")
|
|
2236
|
+
if isinstance(top_node, str) and top_node:
|
|
2237
|
+
return top_node
|
|
2217
2238
|
top_target: object = result.get("target")
|
|
2218
2239
|
if isinstance(top_target, dict):
|
|
2219
2240
|
tb: str = str(top_target.get("blockId", ""))
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "athena-python-docx"
|
|
7
|
-
version = "0.18.
|
|
7
|
+
version = "0.18.1"
|
|
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"
|
|
@@ -268,6 +268,16 @@ def test_extract_inserted_node_id_shapes() -> None:
|
|
|
268
268
|
}
|
|
269
269
|
assert _extract_inserted_node_id(r3, expected_type="paragraph") == "nX"
|
|
270
270
|
|
|
271
|
+
# docx-editor engine shape — flat top-level ``nodeId`` (no SuperDoc nesting).
|
|
272
|
+
# This is what ``CreateParagraph`` returns on docx-editor; before the fix it
|
|
273
|
+
# fell through to "" and ``insert_paragraph_before`` raised on success.
|
|
274
|
+
r4 = {"changed": True, "nodeId": "87753FA6"}
|
|
275
|
+
assert _extract_inserted_node_id(r4, expected_type="paragraph") == "87753FA6"
|
|
276
|
+
|
|
277
|
+
# docx-editor also (post server-fix) emits the nested type-keyed shape.
|
|
278
|
+
r5 = {"changed": True, "nodeId": "AB12CD34", "paragraph": {"nodeId": "AB12CD34"}}
|
|
279
|
+
assert _extract_inserted_node_id(r5, expected_type="paragraph") == "AB12CD34"
|
|
280
|
+
|
|
271
281
|
# Unparseable — returns empty string
|
|
272
282
|
assert _extract_inserted_node_id({}, expected_type="paragraph") == ""
|
|
273
283
|
assert _extract_inserted_node_id("not a dict", expected_type="paragraph") == "" # type: ignore[arg-type]
|
|
@@ -35,6 +35,43 @@ def test_document_iter_inner_content_yields_paragraphs_then_table() -> None:
|
|
|
35
35
|
assert all(isinstance(i, (Paragraph, Table)) for i in items)
|
|
36
36
|
|
|
37
37
|
|
|
38
|
+
def test_iter_inner_content_prefetches_runs_no_per_item_reads() -> None:
|
|
39
|
+
"""``iter_inner_content`` requests ``includeRuns`` and seeds each yielded
|
|
40
|
+
Paragraph's snapshot, so reading ``.text`` / ``.runs`` / ``.style`` per item
|
|
41
|
+
costs no extra ``getNodeById`` — the slow path was one query per block (each a
|
|
42
|
+
full Y.Doc reload on docx-editor). Mirrors ``Document.paragraphs``."""
|
|
43
|
+
install_fake_session()
|
|
44
|
+
from docx import Document
|
|
45
|
+
from docx.text.paragraph import Paragraph
|
|
46
|
+
|
|
47
|
+
doc = Document("asset_fake")
|
|
48
|
+
doc.add_paragraph("Intro")
|
|
49
|
+
doc.add_heading("Section A", level=1)
|
|
50
|
+
doc.add_paragraph("Body")
|
|
51
|
+
|
|
52
|
+
items = list(doc.iter_inner_content())
|
|
53
|
+
|
|
54
|
+
# The listing asked the server to inline runs.
|
|
55
|
+
block_list_calls = [
|
|
56
|
+
params
|
|
57
|
+
for op, params in doc._session.calls()
|
|
58
|
+
if op == "blocks.list" and params.get("includeRuns") is True
|
|
59
|
+
]
|
|
60
|
+
assert block_list_calls
|
|
61
|
+
|
|
62
|
+
# Reading text/style/runs off the iterated paragraphs issues NO per-item reads.
|
|
63
|
+
calls_before: int = len(doc._session.calls())
|
|
64
|
+
for item in items:
|
|
65
|
+
if isinstance(item, Paragraph):
|
|
66
|
+
_ = item.text
|
|
67
|
+
_ = item.style
|
|
68
|
+
_ = list(item.runs)
|
|
69
|
+
extra_node_reads = [
|
|
70
|
+
op for op, _ in doc._session.calls()[calls_before:] if op == "getNodeById"
|
|
71
|
+
]
|
|
72
|
+
assert extra_node_reads == []
|
|
73
|
+
|
|
74
|
+
|
|
38
75
|
def test_document_paragraphs_prefetches_runs_in_one_listing() -> None:
|
|
39
76
|
"""``Document.paragraphs`` issues ONE rich ``blocks.list(includeRuns=True)``
|
|
40
77
|
and hydrates every proxy's text/style/runs from it — so iterating and reading
|
|
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.18.0 → athena_python_docx-0.18.1}/scripts/smoke_test_block_not_found.py
RENAMED
|
File without changes
|
{athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/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.18.0 → athena_python_docx-0.18.1}/tests/fidelity/firm_templates/README.md
RENAMED
|
File without changes
|
{athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/firm_templates/__init__.py
RENAMED
|
File without changes
|
{athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/tests/fidelity/firm_templates/_runner.py
RENAMED
|
File without changes
|
{athena_python_docx-0.18.0 → athena_python_docx-0.18.1}/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
|
|
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.18.0 → athena_python_docx-0.18.1}/tests/fidelity/op_snapshots/68_invoice.json
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
|