athena-python-pptx 0.1.62__tar.gz → 0.1.74__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_pptx-0.1.62 → athena_python_pptx-0.1.74}/.gitignore +3 -0
- athena_python_pptx-0.1.74/API_PARITY_REPORT.md +141 -0
- athena_python_pptx-0.1.74/CHANGELOG.md +949 -0
- athena_python_pptx-0.1.74/CLAUDE.md +108 -0
- athena_python_pptx-0.1.74/PARITY_QUESTIONS.md +311 -0
- {athena_python_pptx-0.1.62 → athena_python_pptx-0.1.74}/PKG-INFO +39 -18
- {athena_python_pptx-0.1.62 → athena_python_pptx-0.1.74}/README.md +38 -17
- {athena_python_pptx-0.1.62 → athena_python_pptx-0.1.74}/docs/API_PARITY_EXCEPTIONS.md +91 -2
- {athena_python_pptx-0.1.62 → athena_python_pptx-0.1.74}/pptx/__init__.py +1 -1
- athena_python_pptx-0.1.74/pptx/_ptc.py +173 -0
- athena_python_pptx-0.1.74/pptx/action.py +137 -0
- {athena_python_pptx-0.1.62 → athena_python_pptx-0.1.74}/pptx/batching.py +39 -5
- athena_python_pptx-0.1.74/pptx/chart/axis.py +23 -0
- athena_python_pptx-0.1.74/pptx/chart/category.py +96 -0
- athena_python_pptx-0.1.74/pptx/chart/chart.py +7 -0
- {athena_python_pptx-0.1.62 → athena_python_pptx-0.1.74}/pptx/chart/data.py +110 -0
- athena_python_pptx-0.1.74/pptx/chart/datalabel.py +7 -0
- athena_python_pptx-0.1.74/pptx/chart/legend.py +7 -0
- athena_python_pptx-0.1.74/pptx/chart/marker.py +7 -0
- athena_python_pptx-0.1.74/pptx/chart/plot.py +59 -0
- athena_python_pptx-0.1.74/pptx/chart/point.py +7 -0
- athena_python_pptx-0.1.74/pptx/chart/series.py +27 -0
- athena_python_pptx-0.1.74/pptx/chart/xlsx.py +47 -0
- {athena_python_pptx-0.1.62 → athena_python_pptx-0.1.74}/pptx/client.py +13 -6
- {athena_python_pptx-0.1.62 → athena_python_pptx-0.1.74}/pptx/commands.py +27 -1
- athena_python_pptx-0.1.74/pptx/dml/chtfmt.py +7 -0
- athena_python_pptx-0.1.74/pptx/dml/effect.py +7 -0
- athena_python_pptx-0.1.74/pptx/dml/fill.py +7 -0
- athena_python_pptx-0.1.74/pptx/dml/line.py +7 -0
- {athena_python_pptx-0.1.62 → athena_python_pptx-0.1.74}/pptx/enum/__init__.py +7 -0
- {athena_python_pptx-0.1.62 → athena_python_pptx-0.1.74}/pptx/enum/action.py +6 -0
- {athena_python_pptx-0.1.62 → athena_python_pptx-0.1.74}/pptx/enum/chart.py +67 -5
- {athena_python_pptx-0.1.62 → athena_python_pptx-0.1.74}/pptx/enum/dml.py +22 -21
- athena_python_pptx-0.1.74/pptx/enum/lang.py +238 -0
- {athena_python_pptx-0.1.62 → athena_python_pptx-0.1.74}/pptx/enum/text.py +2 -0
- athena_python_pptx-0.1.74/pptx/exc.py +42 -0
- athena_python_pptx-0.1.74/pptx/media.py +133 -0
- athena_python_pptx-0.1.74/pptx/package.py +36 -0
- athena_python_pptx-0.1.74/pptx/parts/__init__.py +10 -0
- athena_python_pptx-0.1.74/pptx/parts/_base.py +34 -0
- athena_python_pptx-0.1.74/pptx/parts/chart.py +39 -0
- athena_python_pptx-0.1.74/pptx/parts/coreprops.py +16 -0
- athena_python_pptx-0.1.74/pptx/parts/embeddedpackage.py +33 -0
- athena_python_pptx-0.1.74/pptx/parts/image.py +85 -0
- athena_python_pptx-0.1.74/pptx/parts/media.py +12 -0
- athena_python_pptx-0.1.74/pptx/parts/presentation.py +15 -0
- athena_python_pptx-0.1.74/pptx/parts/slide.py +43 -0
- {athena_python_pptx-0.1.62 → athena_python_pptx-0.1.74}/pptx/presentation.py +10 -0
- athena_python_pptx-0.1.62/pptx/shapes.py → athena_python_pptx-0.1.74/pptx/shapes/__init__.py +2293 -272
- athena_python_pptx-0.1.74/pptx/shapes/autoshape.py +21 -0
- athena_python_pptx-0.1.74/pptx/shapes/base.py +14 -0
- athena_python_pptx-0.1.74/pptx/shapes/connector.py +7 -0
- athena_python_pptx-0.1.74/pptx/shapes/freeform.py +7 -0
- athena_python_pptx-0.1.74/pptx/shapes/graphfrm.py +7 -0
- athena_python_pptx-0.1.74/pptx/shapes/group.py +7 -0
- athena_python_pptx-0.1.74/pptx/shapes/picture.py +11 -0
- athena_python_pptx-0.1.74/pptx/shapes/placeholder.py +31 -0
- athena_python_pptx-0.1.74/pptx/shapes/shapetree.py +40 -0
- athena_python_pptx-0.1.74/pptx/shared.py +76 -0
- {athena_python_pptx-0.1.62 → athena_python_pptx-0.1.74}/pptx/slide.py +4 -0
- {athena_python_pptx-0.1.62 → athena_python_pptx-0.1.74}/pptx/slides.py +313 -55
- athena_python_pptx-0.1.74/pptx/spec.py +28 -0
- athena_python_pptx-0.1.62/pptx/text.py → athena_python_pptx-0.1.74/pptx/text/__init__.py +135 -8
- athena_python_pptx-0.1.74/pptx/text/fonts.py +7 -0
- athena_python_pptx-0.1.74/pptx/text/layout.py +7 -0
- athena_python_pptx-0.1.74/pptx/text/text.py +15 -0
- athena_python_pptx-0.1.74/pptx/types.py +41 -0
- athena_python_pptx-0.1.74/pptx/units.py +234 -0
- {athena_python_pptx-0.1.62 → athena_python_pptx-0.1.74}/pyproject.toml +3 -1
- athena_python_pptx-0.1.62/API_PARITY_REPORT.md +0 -51
- athena_python_pptx-0.1.62/CHANGELOG.md +0 -160
- athena_python_pptx-0.1.62/CLAUDE.md +0 -79
- athena_python_pptx-0.1.62/parity-tests/.gitignore +0 -4
- athena_python_pptx-0.1.62/parity-tests/GAP_REPORT.md +0 -618
- athena_python_pptx-0.1.62/parity-tests/README.md +0 -56
- athena_python_pptx-0.1.62/parity-tests/_harness.py +0 -252
- athena_python_pptx-0.1.62/parity-tests/runner.py +0 -131
- athena_python_pptx-0.1.62/pptx/action.py +0 -34
- athena_python_pptx-0.1.62/pptx/chart/category.py +0 -17
- athena_python_pptx-0.1.62/pptx/units.py +0 -248
- {athena_python_pptx-0.1.62 → athena_python_pptx-0.1.74}/DEV-GUIDE.md +0 -0
- {athena_python_pptx-0.1.62 → athena_python_pptx-0.1.74}/PUBLISHING.md +0 -0
- {athena_python_pptx-0.1.62 → athena_python_pptx-0.1.74}/docs/athena-api.json +0 -0
- {athena_python_pptx-0.1.62 → athena_python_pptx-0.1.74}/docs/athena-api.md +0 -0
- {athena_python_pptx-0.1.62 → athena_python_pptx-0.1.74}/pptx/chart/__init__.py +0 -0
- {athena_python_pptx-0.1.62 → athena_python_pptx-0.1.74}/pptx/decorators.py +0 -0
- {athena_python_pptx-0.1.62 → athena_python_pptx-0.1.74}/pptx/dml/__init__.py +0 -0
- {athena_python_pptx-0.1.62 → athena_python_pptx-0.1.74}/pptx/dml/color.py +0 -0
- {athena_python_pptx-0.1.62 → athena_python_pptx-0.1.74}/pptx/docgen.py +0 -0
- {athena_python_pptx-0.1.62 → athena_python_pptx-0.1.74}/pptx/enum/shapes.py +0 -0
- {athena_python_pptx-0.1.62 → athena_python_pptx-0.1.74}/pptx/errors.py +0 -0
- {athena_python_pptx-0.1.62 → athena_python_pptx-0.1.74}/pptx/table.py +0 -0
- {athena_python_pptx-0.1.62 → athena_python_pptx-0.1.74}/pptx/typing.py +0 -0
- {athena_python_pptx-0.1.62 → athena_python_pptx-0.1.74}/pptx/util.py +0 -0
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# API Parity Report: athena-python-pptx vs python-pptx
|
|
2
|
+
|
|
3
|
+
**Generated:** 2026-05-11
|
|
4
|
+
**athena-python-pptx version:** 0.1.74
|
|
5
|
+
**python-pptx version:** 1.0.2
|
|
6
|
+
**Test scripts:**
|
|
7
|
+
- `tests/test_python_pptx_api_parity.py` — 150 classes + 14 enums
|
|
8
|
+
- `tests/test_parity_class_hierarchy.py` — 70 behavioural smoke tests
|
|
9
|
+
- `tests/test_canonical_import_paths.py` — 57 docs-canonical import paths
|
|
10
|
+
**Coverage:** 100% of upstream public classes + 100% of upstream enum members & values + 100% of canonical `from pptx.X import Y` paths from the python-pptx docs.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Summary
|
|
15
|
+
|
|
16
|
+
**0 unexpected missing, 0 unexpected extras, 0 param mismatches across all 147 tested classes — and 0 uncovered upstream public classes.** Every public class in `python-pptx` 1.0.2 has an importable counterpart at the matching module path in athena-python-pptx.
|
|
17
|
+
|
|
18
|
+
v0.1.69 added 25 classes (Tranches A–E); v0.1.70 added another 18
|
|
19
|
+
classes via Tranches F–I; v0.1.71 added another 22 classes via
|
|
20
|
+
Tranches J–P; v0.1.72 closes the remaining 37 REST-internal classes
|
|
21
|
+
via Tranches R–W:
|
|
22
|
+
|
|
23
|
+
- **Tranche A** — units (Length / Pt / Cm / etc.), chart data
|
|
24
|
+
(CategoryChartData / XyChartData / BubbleChartData / Categories /
|
|
25
|
+
Category), GraphicFrame.
|
|
26
|
+
- **Tranche B** — promoted chart sub-adapters (AxisTitle /
|
|
27
|
+
MajorGridlines / TickLabels / ChartFormat / Legend) from underscored
|
|
28
|
+
internal names to python-pptx-canonical public names.
|
|
29
|
+
- **Tranche C** — ShadowFormat.
|
|
30
|
+
- **Tranche D** — per-type Plot subclasses (BarPlot / LinePlot / etc.)
|
|
31
|
+
and Series subclasses (BarSeries / LineSeries / etc.) +
|
|
32
|
+
SeriesCollection.
|
|
33
|
+
- **Tranche E** — DataLabels / DataLabel / Marker / Point /
|
|
34
|
+
CategoryPoints / XyPoints / BubblePoints.
|
|
35
|
+
- **Tranche F** — Adjustment / AdjustmentCollection / AutoShapeType.
|
|
36
|
+
- **Tranche G** — Movie / Video / _MediaFormat.
|
|
37
|
+
- **Tranche H** — Placeholder subclasses (BasePlaceholder /
|
|
38
|
+
_BaseSlidePlaceholder / SlidePlaceholder / ChartPlaceholder /
|
|
39
|
+
PicturePlaceholder / TablePlaceholder / LayoutPlaceholder /
|
|
40
|
+
MasterPlaceholder / NotesSlidePlaceholder / PlaceholderGraphicFrame /
|
|
41
|
+
PlaceholderPicture).
|
|
42
|
+
- **Tranche I** — FreeformBuilder drawing API.
|
|
43
|
+
- **Tranche J** — shape collection containers (LayoutShapes /
|
|
44
|
+
MasterShapes / NotesSlideShapes / GroupShapes).
|
|
45
|
+
- **Tranche K** — placeholder collection containers (BasePlaceholders /
|
|
46
|
+
LayoutPlaceholders / MasterPlaceholders / NotesSlidePlaceholders) +
|
|
47
|
+
SlidePlaceholders parity-test entry.
|
|
48
|
+
- **Tranche L** — NotesMaster adapter + NotesSlide parity-test entry.
|
|
49
|
+
- **Tranche M** — chart data points (CategoryDataPoint / XyDataPoint /
|
|
50
|
+
BubbleDataPoint) + CategoryLevel.
|
|
51
|
+
- **Tranche N** — ChartData (alias) / ChartTitle (public name) /
|
|
52
|
+
DateAxis / Area3DPlot.
|
|
53
|
+
- **Tranche O** — `BaseShape = Shape` alias for upstream's two-level
|
|
54
|
+
shape hierarchy.
|
|
55
|
+
- **Tranche P** — SlideLayouts / SlideMasters parity-test entries
|
|
56
|
+
(`SlideLayouts.get_by_name` gains a `default` kwarg).
|
|
57
|
+
- **Tranche R** — exception classes (`pptx.exc.PythonPptxError` /
|
|
58
|
+
`PackageNotFoundError` / `InvalidXmlError`).
|
|
59
|
+
- **Tranche S** — XML proxy bases (`pptx.shared.ElementProxy` /
|
|
60
|
+
`ParentedElementProxy` / `PartElementProxy`), `pptx.types`
|
|
61
|
+
Protocols (`ProvidesExtents`, `ProvidesPart`), and
|
|
62
|
+
`pptx.shapes.Subshape`.
|
|
63
|
+
- **Tranche T** — `pptx/parts/` package: 15 Part stubs at the
|
|
64
|
+
upstream-canonical paths (BaseSlidePart / SlidePart /
|
|
65
|
+
SlideLayoutPart / SlideMasterPart / NotesSlidePart /
|
|
66
|
+
NotesMasterPart / PresentationPart / CorePropertiesPart /
|
|
67
|
+
ImagePart / EmbeddedPackagePart / EmbeddedDocxPart /
|
|
68
|
+
EmbeddedPptxPart / EmbeddedXlsxPart / MediaPart / ChartPart).
|
|
69
|
+
- **Tranche U** — Image (with real from_blob / sha1 / ext / size),
|
|
70
|
+
Package (raises on `.open()`), ChartWorkbook (no-op),
|
|
71
|
+
FontFiles / TextFitter (auto-fit stubs), PlotTypeInspector
|
|
72
|
+
(delegates to plot.chart_type), ShapeSpec TypedDict.
|
|
73
|
+
- **Tranche V** — chart series-data classes (CategorySeriesData /
|
|
74
|
+
XySeriesData / BubbleSeriesData) + workbook writers
|
|
75
|
+
(CategoryWorkbookWriter / XyWorkbookWriter / BubbleWorkbookWriter).
|
|
76
|
+
- **Tranche W** — `pptx.shapes.autoshape.Shape` parity entry.
|
|
77
|
+
|
|
78
|
+
| Class | Status |
|
|
79
|
+
|-------|--------|
|
|
80
|
+
| FillFormat | PASS |
|
|
81
|
+
| LineFormat | PASS |
|
|
82
|
+
| RGBColor | PASS |
|
|
83
|
+
| ColorFormat | PASS |
|
|
84
|
+
| Font | PASS (`language_id` + `MSO_LANGUAGE_ID` enum added in v0.1.68) |
|
|
85
|
+
| TextFrame | PASS (+47 SDK convenience extras, allowlisted) |
|
|
86
|
+
| Paragraph | PASS (+30 SDK convenience extras, allowlisted) |
|
|
87
|
+
| Run | PASS (+20 SDK convenience extras, allowlisted) |
|
|
88
|
+
| Presentation | PASS (+SDK REST helpers: `upload`, `from_url`, `find_text`, etc.) |
|
|
89
|
+
| Slide | PASS (+SDK REST helpers: `clone`, `notes`, `render`, etc.) |
|
|
90
|
+
| Slides | PASS (+SDK REST helpers: `delete`, `get_by_id`, `find_by_title`, etc.) |
|
|
91
|
+
| SlideLayout | PASS (+`index`) |
|
|
92
|
+
| SlideMaster | PASS |
|
|
93
|
+
| SlideShapes | PASS (+SDK REST helpers; `add_connector` accepts optional `begin_shape`/`end_shape`) |
|
|
94
|
+
| Table | PASS (+SDK REST helpers + inherited `Shape.element` proxy) |
|
|
95
|
+
| `_Cell` | PASS (+SDK REST helpers) |
|
|
96
|
+
| PlaceholderFormat | PASS (+convenience type-check booleans + custom-prompt/transform fields) |
|
|
97
|
+
| Chart | PASS (`category_axis` / `value_axis` / `legend` / `font` / `chart_style` added in v0.1.68; replaces `UnsupportedFeatureError` stubs) |
|
|
98
|
+
| CategoryAxis | PASS (added v0.1.68 — local-state adapter; chart-axis round-trip patches are a follow-up) |
|
|
99
|
+
| ValueAxis | PASS (added v0.1.68 — local-state adapter) |
|
|
100
|
+
| Picture | PASS (added v0.1.68 — Shape subclass for `isinstance(shape, Picture)`) |
|
|
101
|
+
| Connector | PASS (added v0.1.68 — Shape subclass; `begin_connect` / `end_connect` methods) |
|
|
102
|
+
| GroupShape | PASS (added v0.1.68 — Shape subclass; `.shapes` is empty pending child-parenting) |
|
|
103
|
+
| ActionSetting | PASS (real adapter in v0.1.68 over the SDK's `ClickAction`; replaces `UnsupportedFeatureError` stub) |
|
|
104
|
+
| Hyperlink | PASS |
|
|
105
|
+
|
|
106
|
+
## Intentionally Omitted (REST SDK Limitations)
|
|
107
|
+
|
|
108
|
+
| Member | Reason |
|
|
109
|
+
|--------|--------|
|
|
110
|
+
| `*.element`, `*.part`, `*.ln`, `*.get_or_add_ln` | XML element / OPC package / direct DML XML access — REST SDK has no local XML or packages |
|
|
111
|
+
| `FillFormat.from_fill_parent()` | Internal XML constructor |
|
|
112
|
+
| `ColorFormat.from_colorchoice_parent()` | Internal XML constructor |
|
|
113
|
+
| `Font.fill` | Font fill format (uncommon) |
|
|
114
|
+
| `SlideLayout.background`, `SlideMaster.background` | Not yet exposed at layout / master level |
|
|
115
|
+
| `SlideLayout.iter_cloneable_placeholders`, `SlideLayout.used_by_slides` | Placeholder cloning is server-side |
|
|
116
|
+
| `SlideShapes.add_movie`, `add_ole_object`, `build_freeform` | Not implemented (uncommon) |
|
|
117
|
+
| `Slide.follow_master_background` | XML-level inheritance flag — REST SDK abstracts this |
|
|
118
|
+
| `Picture.image.blob` | Image bytes live in the studio's asset store — not materialized into Python |
|
|
119
|
+
|
|
120
|
+
## SDK Additions (Documented Deviations)
|
|
121
|
+
|
|
122
|
+
See `docs/API_PARITY_EXCEPTIONS.md` for the full list. Highlights:
|
|
123
|
+
|
|
124
|
+
- **`Font.strike`, `Font.subscript`, `Font.superscript`** — real OOXML run properties python-pptx doesn't surface, useful for fidelity.
|
|
125
|
+
- **`TableCell.font_bold`, `font_color_rgb`, `fill_color_rgb`** — agent-friendly RGB-tuple aliases.
|
|
126
|
+
- **`GraphicFrame.cell()`, `.rows`, `.cols`** — passthroughs that delegate to `.table` for agent ergonomics.
|
|
127
|
+
- **SDK-specific REST helpers** on `Presentation`, `Slide`, `Slides`, `SlideShapes`, `Table`, `_Cell` (e.g. `from_url`, `clone`, `render`, `delete`, `to_csv`).
|
|
128
|
+
- **`Table.first_row` / `Table.last_row`** are booleans (look flags) per python-pptx; cell-list accessors are renamed to `get_first_row_cells()` etc.
|
|
129
|
+
|
|
130
|
+
## Non-Standard Convenience Extras (Candidates for Future Cleanup)
|
|
131
|
+
|
|
132
|
+
**Core classes** (FillFormat, LineFormat, RGBColor, ColorFormat, Font): clean — only OOXML-surface extras (`strike`, `subscript`, `superscript`).
|
|
133
|
+
|
|
134
|
+
**TextFrame, Paragraph, Run, Table**: large blocks of string-manipulation / aggregation helpers (`to_dict()`, `word_count`, `capitalize()`, `to_csv()`, etc.). Additive, but candidates for future removal pass to tighten the drop-in contract.
|
|
135
|
+
|
|
136
|
+
## How to Run
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
pip install python-pptx --target /tmp/pptx-standard
|
|
140
|
+
python -m pytest tests/test_python_pptx_api_parity.py -v -s
|
|
141
|
+
```
|