athena-python-docx 0.18.2__tar.gz → 0.18.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.18.2 → athena_python_docx-0.18.3}/PKG-INFO +1 -1
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/__init__.py +1 -1
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/_http.py +18 -8
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/pyproject.toml +1 -1
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_document_create.py +51 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/uv.lock +1 -1
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/.gitignore +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/CLAUDE.md +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/DOCX_EXEC_LAB.md +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/README.md +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/_athena_extension.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/_batching.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/_buffer.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/_execution.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/_http_doc.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/_image_utils.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/_postproc.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/_ptc.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/_table_styles.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/_timeouts.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/api.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/bookmarks.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/charts.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/client.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/commands.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/comments.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/document.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/enum/__init__.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/enum/section.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/enum/style.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/enum/table.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/enum/text.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/errors.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/exceptions.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/fields.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/footnotes.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/math.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/opc/__init__.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/opc/coreprops.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/oxml/__init__.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/revisions.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/sdt.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/section.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/session.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/settings.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/shape.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/shared.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/styles/__init__.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/styles/style.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/styles/styles.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/table.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/text/__init__.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/text/font.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/text/hyperlink.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/text/pagebreak.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/text/paragraph.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/text/parfmt.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/text/run.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/text/tabstops.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/toc.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/docx/typing.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/scripts/docx_exec_lab.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/scripts/docx_exec_lab_examples/fast_table_fill.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/scripts/docx_exec_lab_examples/find_replace_literal.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/scripts/docx_exec_lab_server.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/scripts/publish.sh +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/scripts/release.sh +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/scripts/round_trip_smoke.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/scripts/smoke_test_block_not_found.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/scripts/validate_find_replace_asset.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/__init__.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/conftest.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/METHODOLOGY.md +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/README.md +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/__init__.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/ab_probe_cases.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/ab_probe_runner.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/auto_gen_cases.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/binary_round_trip.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/cases.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/complex_cases.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/coverage_report.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/extract.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/extreme_cases.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/fake_session.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/firm_templates/README.md +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/firm_templates/__init__.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/firm_templates/_runner.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/firm_templates/extractor.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/firm_templates/test_pw_corpus.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/firm_templates/test_pw_research_digest.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/local_runner.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/mega_cases.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshot.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/01_basic_paragraph.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/02_multiple_headings.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/03_runs_with_formatting.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/04_font_name_and_size.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/05_font_color_rgb.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/06_font_character_properties.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/07_font_subscript_superscript.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/08_font_highlight.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/09_paragraph_alignment.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/100_table_negative_indexing.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/101_table_cells_flat_iteration.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/102_text_with_embedded_special_chars.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/104_core_properties_datetime.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/105_default_one_section.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/106_heading_paragraph_format.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/107_varying_row_heights.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/10_paragraph_indents.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/11_paragraph_spacing.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/12_paragraph_keep_options.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/13_paragraph_tab_stops.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/14_run_add_tab_and_break.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/15_run_add_break_page.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/16_paragraph_clear_and_insert_before.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/17_table_basic.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/18_table_cell_text.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/19_table_row_column_sizing.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/20_table_cell_vertical_alignment.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/21_table_alignment_and_autofit.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/22_table_cell_paragraphs_iteration.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/24_table_add_row_column.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/25_table_merge_cells.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/26_section_page_setup.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/27_section_margins.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/28_section_add_new.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/29_section_headers_linked.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/30_styles_iteration.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/31_styles_lookup_and_default.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/32_styles_add_paragraph_style.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/33_core_properties_set_and_get.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/34_inline_shapes_iterate_empty.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/35_full_report.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/36_replace_text_in_paragraph.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/37_iterate_runs_and_format_all_bold.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/38_font_all_properties.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/39_large_body_100_paragraphs.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/40_large_table_10x10.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/41_unicode_and_emoji.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/42_very_long_paragraph.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/43_paragraph_text_round_trip.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/44_paragraph_alignment_round_trip.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/45_cell_text_round_trip.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/46_run_text_setter_round_trip.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/47_font_size_round_trip.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/48_font_color_round_trip.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/49_resume_layout.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/50_multi_section_doc.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/52_iterate_everything.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/53_apply_style_to_paragraphs.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/54_empty_everything.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/55_single_character_runs.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/56_everything_in_one.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/57_runs_after_multiple_text_appends.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/58_modify_runs_in_place.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/59_indent_round_trip.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/60_space_round_trip.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/61_cell_paragraph_with_runs.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/62_many_cell_paragraphs.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/63_table_style_round_trip.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/64_many_sections.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/65_20x20_table_formatted.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/66_toc_like_structure.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/67_paragraph_insert_before_chain.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/68_invoice.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/69_newsletter.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/70_add_and_iterate_back.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/71_academic_paper.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/72_legal_contract.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/73_form_with_many_tables.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/74_paragraph_with_10_runs.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/75_paragraph_negative_first_line_indent.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/76_rgbcolor_from_string.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/77_length_unit_conversions.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/78_paragraph_copy_style.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/79_bulk_cell_formatting.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/80_apply_style_after_add_run.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/81_multi_page_with_breaks.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/82_add_text_on_existing_run.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/83_clear_then_repopulate_paragraph.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/84_table_reread_row_count.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/85_header_footer_access.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/86_font_read_unset_returns_none.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/87_500_paragraph_doc.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/88_mixed_content_iteration.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/89_alignment_clear_via_none.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/90_cell_add_paragraph_styled.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/91_many_small_tables.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/92_margins_every_section.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/93_font_bool_reads_after_set.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/94_page_break_before_paragraph.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/95_paragraph_hyperlinks_empty.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/96_paragraph_contains_page_break.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/97_document_styles_by_key.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/98_style_contains_check.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/99_run_add_picture_from_bytes.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/ex02_unicode_everywhere.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/ex03_1000_paragraphs.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/ex04_50x50_table.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/ex05_long_text_in_cell.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/ex06_hundred_tiny_runs.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/ex07_every_font_boolean.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/ex08_many_continuous_sections.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/ex09_many_tab_stops.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/ex10_complex_bom.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/ex11_banded_rows_formatting.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/ex12_section_reconfigure.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/ex13_cell_with_10_paragraphs.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/ex14_styled_report_table.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/ex15_paragraph_all_format_props.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/ex16_runs_interleaved_with_breaks.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/ex17_all_break_kinds.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/ex18_read_back_large_doc.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/ex19_mutate_all_runs.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/ex20_kitchen_sink_v2.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/mega01_book_chapter.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/mega02_research_proposal.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/mega03_financial_statement.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/mega04_recipe_card.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/mega05_user_manual.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/mega06_complex_newsletter.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/mega07_budget_spreadsheet.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/mega08_product_catalog.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/mega09_signed_contract.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/mega10_api_documentation.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/rw01_official_quickstart.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/rw02_paragraph_style_list.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/rw03_character_formatting.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/rw04_section_page_setup.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/rw05_toc_pattern.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/rw06_meeting_minutes.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/rw07_dense_formatting_demo.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/rw08_table_merged_header.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/rw09_bulk_run_iteration.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/rw10_colored_grid_table.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/rw11_header_text.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/rw12_first_page_footer.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/rw13_even_page_header.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/op_snapshots/rw15_paragraph_style_instance.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/ours_spec.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/parity_crawl.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/parity_diff.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/real_world_cases.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/round_trip_tests.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/runner.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/stock_spec.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/test_e2e_against_staging.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/parity/README.md +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/parity/__init__.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/parity/baseline_gaps.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/parity/compare.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/parity/intentional_deviations.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/parity/introspect.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/parity/reports/GAP_ANALYSIS.md +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/parity/reports/gap_report.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/parity/run_parity.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/parity/snapshots/athena_latest.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/parity/snapshots/upstream_python_docx_1.2.0.json +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/parity/test_parity_gap.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_add_section_extract_items.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_athena_extensions_contract.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_athena_extensions_registry.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_batching_perf.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_block_not_found_error.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_buffer.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_cell_add_paragraph_wire_shape.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_cell_add_table_not_supported.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_cell_inner_add_hyperlink_stash.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_cell_inner_add_run_via_cell_insert.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_cell_inner_format_stash.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_cell_inner_run_format_stash.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_cell_inner_run_guard.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_cell_text_plain_fastpath.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_cell_text_replace_semantics.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_collapsed_range_format.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_command_dataclasses.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_commands.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_comments.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_document_asset_id_property.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_document_clear.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_document_create_from_template.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_document_factory_validation.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_docx_exec_lab.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_docx_exec_lab_server.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_e2e_partial_failure_cascade.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_execution_scope.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_find_replace_session_open.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_http_transport.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_hyperlink_coalescing.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_image_url_data_uri.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_insert_deferred.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_iter_inner_content.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_list_styles.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_merged_cell_secondary_slot.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_merged_cells.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_oxml_shim.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_paragraph_text_len_cache.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_parity_misc.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_parity_round2.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_partial_failure_cascade.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_phase_a_behavior.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_phase_b_headers_footers.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_phase_c_tables.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_positional_cell_id.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_postproc_cell_format_rewrite.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_postproc_cell_run_format_rewrite.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_postproc_ref_restore.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_pr19766_review_fixes.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_ptc.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_python_docx_api_parity.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_revisions.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_add_paragraph_style.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_add_picture.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_add_run.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_cell_add_paragraph.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_comments_add_comment.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_comments_get.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_document_audit.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_document_element.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_enum_section.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_font_audit.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_header_footer.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_hyperlink.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_inline_shape.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_insert_paragraph_before.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_misc.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_paragraph_strict.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_paragraph_style.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_paragraph_style_strict.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_parfmt.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_row_col_cell.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_run_add_break.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_run_bool_setters.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_run_style.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_run_style_strict.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_run_text.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_run_underline.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_section_audit.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_section_dimensions.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_section_onoff.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_settings.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_shared_audit.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_style.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_styles.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_table_audit.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_table_cell.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_table_dimensions.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_silent_stub_table_layout.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_smoke_integration.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_style_acceptance.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_style_font.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_style_setters_contract.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_table_set_cell_perf.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_table_style_id_resolution.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_temporarily_unavailable.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_validate_find_replace_asset_script.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_wire_contract.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/test_xml_attr_guard.py +0 -0
- {athena_python_docx-0.18.2 → athena_python_docx-0.18.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.18.
|
|
3
|
+
Version: 0.18.3
|
|
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>
|
|
@@ -100,11 +100,16 @@ def create_empty_document(
|
|
|
100
100
|
DocxError: any other 4xx/5xx from the server.
|
|
101
101
|
"""
|
|
102
102
|
resolved_base: str | None = base_url or os.environ.get(_BASE_URL_ENV)
|
|
103
|
-
#
|
|
104
|
-
#
|
|
105
|
-
#
|
|
103
|
+
# Create must authenticate as the REAL user so the new asset's ``created_by``
|
|
104
|
+
# is the user, not a service identity. ``ATHENA_API_KEY`` is the canonical
|
|
105
|
+
# per-user Athena key (a local API key in BYO/SSO mode that agora resolves to
|
|
106
|
+
# the real user); the docx-studio studio key (``ATHENA_DOCX_API_KEY``) is a
|
|
107
|
+
# deployment service credential used only for studio access-checks on
|
|
108
|
+
# EXISTING assets, and agora's create gate rejects it (no backing user). So
|
|
109
|
+
# prefer the user key here; only fall back to the studio key for callers that
|
|
110
|
+
# set just that.
|
|
106
111
|
resolved_key: str | None = (
|
|
107
|
-
api_key or os.environ.get(
|
|
112
|
+
api_key or os.environ.get("ATHENA_API_KEY") or os.environ.get(_API_KEY_ENV)
|
|
108
113
|
)
|
|
109
114
|
|
|
110
115
|
if not resolved_base:
|
|
@@ -263,11 +268,16 @@ def upload_document(
|
|
|
263
268
|
import uuid
|
|
264
269
|
|
|
265
270
|
resolved_docx_base: str | None = docx_base_url or os.environ.get(_BASE_URL_ENV)
|
|
266
|
-
#
|
|
267
|
-
#
|
|
268
|
-
#
|
|
271
|
+
# Create must authenticate as the REAL user so the new asset's ``created_by``
|
|
272
|
+
# is the user, not a service identity. ``ATHENA_API_KEY`` is the canonical
|
|
273
|
+
# per-user Athena key (a local API key in BYO/SSO mode that agora resolves to
|
|
274
|
+
# the real user); the docx-studio studio key (``ATHENA_DOCX_API_KEY``) is a
|
|
275
|
+
# deployment service credential used only for studio access-checks on
|
|
276
|
+
# EXISTING assets, and agora's create gate rejects it (no backing user). So
|
|
277
|
+
# prefer the user key here; only fall back to the studio key for callers that
|
|
278
|
+
# set just that.
|
|
269
279
|
resolved_key: str | None = (
|
|
270
|
-
api_key or os.environ.get(
|
|
280
|
+
api_key or os.environ.get("ATHENA_API_KEY") or os.environ.get(_API_KEY_ENV)
|
|
271
281
|
)
|
|
272
282
|
resolved_agora_base: str | None = (
|
|
273
283
|
agora_base_url
|
|
@@ -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.3"
|
|
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"
|
|
@@ -163,3 +163,54 @@ def test_create_request_body_includes_optional_fields() -> None:
|
|
|
163
163
|
"parentFolderId": "folder_abc",
|
|
164
164
|
"workspaceId": "ws_explicit",
|
|
165
165
|
}
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
def test_create_prefers_user_key_over_studio_key(
|
|
169
|
+
monkeypatch: pytest.MonkeyPatch,
|
|
170
|
+
) -> None:
|
|
171
|
+
"""create() authenticates as the user, not the static studio key.
|
|
172
|
+
|
|
173
|
+
In self-hosted SSO the executor injects BOTH the static studio key
|
|
174
|
+
(``ATHENA_DOCX_API_KEY``) and the per-user key (``ATHENA_API_KEY``). create
|
|
175
|
+
must use the per-user key so the new asset's ``created_by`` is the real
|
|
176
|
+
user — the studio key is a deployment service credential that agora's
|
|
177
|
+
create gate rejects (no backing user).
|
|
178
|
+
"""
|
|
179
|
+
monkeypatch.setenv(
|
|
180
|
+
"ATHENA_DOCX_BASE_URL",
|
|
181
|
+
"https://docx-studio.stg.athenaintel.com",
|
|
182
|
+
)
|
|
183
|
+
monkeypatch.setenv("ATHENA_DOCX_API_KEY", "studio-static-key")
|
|
184
|
+
monkeypatch.setenv("ATHENA_API_KEY", "user-local-key")
|
|
185
|
+
captured: dict[str, Any] = {}
|
|
186
|
+
|
|
187
|
+
def _capture(req: Any, **_kwargs: Any) -> _FakeResponse:
|
|
188
|
+
captured["headers"] = dict(req.headers)
|
|
189
|
+
return _FakeResponse(json.dumps(_FAKE_RESPONSE).encode("utf-8"))
|
|
190
|
+
|
|
191
|
+
with patch("docx._http.urllib.request.urlopen", side_effect=_capture):
|
|
192
|
+
Document.create(name="X")
|
|
193
|
+
|
|
194
|
+
assert captured["headers"]["Authorization"] == "Bearer user-local-key"
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
def test_create_falls_back_to_studio_key_without_user_key(
|
|
198
|
+
monkeypatch: pytest.MonkeyPatch,
|
|
199
|
+
) -> None:
|
|
200
|
+
"""With only the studio key configured, create still authenticates with it."""
|
|
201
|
+
monkeypatch.setenv(
|
|
202
|
+
"ATHENA_DOCX_BASE_URL",
|
|
203
|
+
"https://docx-studio.stg.athenaintel.com",
|
|
204
|
+
)
|
|
205
|
+
monkeypatch.setenv("ATHENA_DOCX_API_KEY", "studio-static-key")
|
|
206
|
+
monkeypatch.delenv("ATHENA_API_KEY", raising=False)
|
|
207
|
+
captured: dict[str, Any] = {}
|
|
208
|
+
|
|
209
|
+
def _capture(req: Any, **_kwargs: Any) -> _FakeResponse:
|
|
210
|
+
captured["headers"] = dict(req.headers)
|
|
211
|
+
return _FakeResponse(json.dumps(_FAKE_RESPONSE).encode("utf-8"))
|
|
212
|
+
|
|
213
|
+
with patch("docx._http.urllib.request.urlopen", side_effect=_capture):
|
|
214
|
+
Document.create(name="X")
|
|
215
|
+
|
|
216
|
+
assert captured["headers"]["Authorization"] == "Bearer studio-static-key"
|
|
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.2 → athena_python_docx-0.18.3}/scripts/smoke_test_block_not_found.py
RENAMED
|
File without changes
|
{athena_python_docx-0.18.2 → athena_python_docx-0.18.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.18.2 → athena_python_docx-0.18.3}/tests/fidelity/firm_templates/README.md
RENAMED
|
File without changes
|
{athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/firm_templates/__init__.py
RENAMED
|
File without changes
|
{athena_python_docx-0.18.2 → athena_python_docx-0.18.3}/tests/fidelity/firm_templates/_runner.py
RENAMED
|
File without changes
|
{athena_python_docx-0.18.2 → athena_python_docx-0.18.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
|
|
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.2 → athena_python_docx-0.18.3}/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
|
|
File without changes
|
|
File without changes
|