python-pptx2 2.13.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. pptx2/__init__.py +152 -0
  2. pptx2/_color.py +75 -0
  3. pptx2/_slide_importer.py +597 -0
  4. pptx2/_svg.py +155 -0
  5. pptx2/_template_applier.py +292 -0
  6. pptx2/_textstyle.py +187 -0
  7. pptx2/accessibility.py +365 -0
  8. pptx2/action.py +270 -0
  9. pptx2/animation.py +2237 -0
  10. pptx2/api.py +49 -0
  11. pptx2/audit.py +258 -0
  12. pptx2/chart/__init__.py +0 -0
  13. pptx2/chart/analytics.py +381 -0
  14. pptx2/chart/axis.py +543 -0
  15. pptx2/chart/category.py +200 -0
  16. pptx2/chart/chart.py +670 -0
  17. pptx2/chart/data.py +864 -0
  18. pptx2/chart/datalabel.py +406 -0
  19. pptx2/chart/legend.py +86 -0
  20. pptx2/chart/marker.py +70 -0
  21. pptx2/chart/palettes.py +129 -0
  22. pptx2/chart/plot.py +462 -0
  23. pptx2/chart/point.py +101 -0
  24. pptx2/chart/quick_layouts.py +325 -0
  25. pptx2/chart/series.py +334 -0
  26. pptx2/chart/xlsx.py +272 -0
  27. pptx2/chart/xmlwriter.py +1845 -0
  28. pptx2/compose/__init__.py +28 -0
  29. pptx2/compose/from_spec.py +1094 -0
  30. pptx2/design/__init__.py +8 -0
  31. pptx2/design/components.py +607 -0
  32. pptx2/design/figures.py +389 -0
  33. pptx2/design/layout.py +370 -0
  34. pptx2/design/recipes.py +1967 -0
  35. pptx2/design/style.py +209 -0
  36. pptx2/design/tokens.py +915 -0
  37. pptx2/diagrams.py +754 -0
  38. pptx2/dml/__init__.py +0 -0
  39. pptx2/dml/chtfmt.py +40 -0
  40. pptx2/dml/color.py +496 -0
  41. pptx2/dml/effect.py +909 -0
  42. pptx2/dml/fill.py +691 -0
  43. pptx2/dml/line.py +287 -0
  44. pptx2/dml/picture.py +212 -0
  45. pptx2/dml/three_d.py +381 -0
  46. pptx2/enum/__init__.py +0 -0
  47. pptx2/enum/action.py +71 -0
  48. pptx2/enum/animation.py +31 -0
  49. pptx2/enum/base.py +218 -0
  50. pptx2/enum/chart.py +574 -0
  51. pptx2/enum/dml.py +740 -0
  52. pptx2/enum/lang.py +685 -0
  53. pptx2/enum/presentation.py +133 -0
  54. pptx2/enum/shapes.py +1029 -0
  55. pptx2/enum/text.py +230 -0
  56. pptx2/exc.py +42 -0
  57. pptx2/formats.py +139 -0
  58. pptx2/geometry.py +420 -0
  59. pptx2/inherit.py +109 -0
  60. pptx2/lint.py +2256 -0
  61. pptx2/math.py +177 -0
  62. pptx2/media.py +197 -0
  63. pptx2/opc/__init__.py +0 -0
  64. pptx2/opc/constants.py +332 -0
  65. pptx2/opc/oxml.py +188 -0
  66. pptx2/opc/package.py +762 -0
  67. pptx2/opc/packuri.py +109 -0
  68. pptx2/opc/serialized.py +296 -0
  69. pptx2/opc/shared.py +20 -0
  70. pptx2/opc/spec.py +45 -0
  71. pptx2/oxml/__init__.py +555 -0
  72. pptx2/oxml/action.py +53 -0
  73. pptx2/oxml/chart/__init__.py +0 -0
  74. pptx2/oxml/chart/axis.py +337 -0
  75. pptx2/oxml/chart/chart.py +481 -0
  76. pptx2/oxml/chart/datalabel.py +253 -0
  77. pptx2/oxml/chart/legend.py +72 -0
  78. pptx2/oxml/chart/marker.py +61 -0
  79. pptx2/oxml/chart/plot.py +365 -0
  80. pptx2/oxml/chart/series.py +425 -0
  81. pptx2/oxml/chart/shared.py +220 -0
  82. pptx2/oxml/coreprops.py +288 -0
  83. pptx2/oxml/dml/__init__.py +0 -0
  84. pptx2/oxml/dml/color.py +135 -0
  85. pptx2/oxml/dml/effect.py +213 -0
  86. pptx2/oxml/dml/fill.py +316 -0
  87. pptx2/oxml/dml/line.py +12 -0
  88. pptx2/oxml/dml/three_d.py +110 -0
  89. pptx2/oxml/ns.py +135 -0
  90. pptx2/oxml/presentation.py +313 -0
  91. pptx2/oxml/shapes/__init__.py +19 -0
  92. pptx2/oxml/shapes/autoshape.py +467 -0
  93. pptx2/oxml/shapes/connector.py +107 -0
  94. pptx2/oxml/shapes/graphfrm.py +347 -0
  95. pptx2/oxml/shapes/groupshape.py +329 -0
  96. pptx2/oxml/shapes/picture.py +270 -0
  97. pptx2/oxml/shapes/shared.py +577 -0
  98. pptx2/oxml/simpletypes.py +1027 -0
  99. pptx2/oxml/slide.py +563 -0
  100. pptx2/oxml/table.py +650 -0
  101. pptx2/oxml/text.py +815 -0
  102. pptx2/oxml/theme.py +36 -0
  103. pptx2/oxml/xmlchemy.py +717 -0
  104. pptx2/package.py +222 -0
  105. pptx2/parts/__init__.py +0 -0
  106. pptx2/parts/chart.py +95 -0
  107. pptx2/parts/coreprops.py +167 -0
  108. pptx2/parts/diagram.py +37 -0
  109. pptx2/parts/embeddedpackage.py +93 -0
  110. pptx2/parts/image.py +275 -0
  111. pptx2/parts/media.py +37 -0
  112. pptx2/parts/presentation.py +136 -0
  113. pptx2/parts/slide.py +371 -0
  114. pptx2/presentation.py +408 -0
  115. pptx2/py.typed +0 -0
  116. pptx2/render.py +586 -0
  117. pptx2/section.py +272 -0
  118. pptx2/shapes/__init__.py +26 -0
  119. pptx2/shapes/autoshape.py +442 -0
  120. pptx2/shapes/base.py +1078 -0
  121. pptx2/shapes/connector.py +297 -0
  122. pptx2/shapes/freeform.py +337 -0
  123. pptx2/shapes/graphfrm.py +316 -0
  124. pptx2/shapes/group.py +264 -0
  125. pptx2/shapes/picture.py +422 -0
  126. pptx2/shapes/placeholder.py +468 -0
  127. pptx2/shapes/shapetree.py +2027 -0
  128. pptx2/shared.py +82 -0
  129. pptx2/skill/SKILL.md +450 -0
  130. pptx2/skill/__init__.py +78 -0
  131. pptx2/skill/__main__.py +64 -0
  132. pptx2/skill/references/animations.md +189 -0
  133. pptx2/skill/references/basics.md +421 -0
  134. pptx2/skill/references/charts.md +254 -0
  135. pptx2/skill/references/compose.md +234 -0
  136. pptx2/skill/references/design.md +366 -0
  137. pptx2/skill/references/effects.md +249 -0
  138. pptx2/skill/references/end-to-end-deck.md +231 -0
  139. pptx2/skill/references/geometry-and-arrows.md +334 -0
  140. pptx2/skill/references/lint.md +275 -0
  141. pptx2/skill/references/math.md +86 -0
  142. pptx2/skill/references/picture-effects.md +129 -0
  143. pptx2/skill/references/render.md +151 -0
  144. pptx2/skill/references/smart-art.md +75 -0
  145. pptx2/skill/references/space-aware-authoring.md +249 -0
  146. pptx2/skill/references/tables.md +244 -0
  147. pptx2/skill/references/theme.md +127 -0
  148. pptx2/skill/references/three-d.md +109 -0
  149. pptx2/skill/references/transitions.md +100 -0
  150. pptx2/slide.py +1244 -0
  151. pptx2/smart_art.py +220 -0
  152. pptx2/spec.py +633 -0
  153. pptx2/table.py +1181 -0
  154. pptx2/table_styles.py +184 -0
  155. pptx2/templates/default.pptx +0 -0
  156. pptx2/templates/docx-icon.emf +0 -0
  157. pptx2/templates/generic-icon.emf +0 -0
  158. pptx2/templates/notes.xml +23 -0
  159. pptx2/templates/notesMaster.xml +352 -0
  160. pptx2/templates/pptx-icon.emf +0 -0
  161. pptx2/templates/theme.xml +321 -0
  162. pptx2/templates/xlsx-icon.emf +0 -0
  163. pptx2/text/__init__.py +0 -0
  164. pptx2/text/fonts.py +482 -0
  165. pptx2/text/layout.py +374 -0
  166. pptx2/text/text.py +1272 -0
  167. pptx2/theme.py +721 -0
  168. pptx2/types.py +36 -0
  169. pptx2/util.py +263 -0
  170. python_pptx2-2.13.0.dist-info/METADATA +351 -0
  171. python_pptx2-2.13.0.dist-info/RECORD +175 -0
  172. python_pptx2-2.13.0.dist-info/WHEEL +5 -0
  173. python_pptx2-2.13.0.dist-info/entry_points.txt +3 -0
  174. python_pptx2-2.13.0.dist-info/licenses/LICENSE +22 -0
  175. python_pptx2-2.13.0.dist-info/top_level.txt +1 -0
pptx2/__init__.py ADDED
@@ -0,0 +1,152 @@
1
+ """Initialization module for python-pptx2 package."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import sys
6
+ from typing import TYPE_CHECKING
7
+
8
+ import pptx2.exc as exceptions
9
+ from pptx2.api import Presentation
10
+ from pptx2.audit import AuditReport, audit
11
+ from pptx2.geometry import BBox
12
+ from pptx2.design.components import (
13
+ ArticleCard,
14
+ Gauge,
15
+ KpiCard,
16
+ ProgressBar,
17
+ StatStrip,
18
+ StatusPill,
19
+ add_article_card,
20
+ add_gauge,
21
+ add_kpi_card,
22
+ add_progress_bar,
23
+ add_stat_strip,
24
+ add_status_pill,
25
+ )
26
+ from pptx2.design.figures import (
27
+ FigureBackendUnavailable,
28
+ add_html_figure,
29
+ add_matplotlib_figure,
30
+ add_plotly_figure,
31
+ add_svg_figure,
32
+ )
33
+ from pptx2.math import MathBackendUnavailable
34
+ from pptx2.opc.constants import CONTENT_TYPE as CT
35
+ from pptx2.opc.package import PartFactory
36
+ from pptx2.parts.chart import ChartPart
37
+ from pptx2.parts.coreprops import CorePropertiesPart
38
+ from pptx2.parts.diagram import (
39
+ DiagramColorsPart,
40
+ DiagramDataPart,
41
+ DiagramLayoutPart,
42
+ DiagramStylePart,
43
+ )
44
+ from pptx2.parts.image import ImagePart
45
+ from pptx2.parts.media import MediaPart
46
+ from pptx2.parts.presentation import PresentationPart
47
+ from pptx2.parts.slide import (
48
+ NotesMasterPart,
49
+ NotesSlidePart,
50
+ SlideLayoutPart,
51
+ SlideMasterPart,
52
+ SlidePart,
53
+ ThemePart,
54
+ )
55
+
56
+ if TYPE_CHECKING:
57
+ from pptx2.opc.package import Part
58
+
59
+ __version__ = "2.13.0"
60
+
61
+ sys.modules["pptx2.exceptions"] = exceptions
62
+ del sys
63
+
64
+ __all__ = [
65
+ "Presentation",
66
+ # First-class rectangular region value object (immutable, splattable
67
+ # into add_shape / add_textbox / add_picture).
68
+ "BBox",
69
+ # One-call deck audit (lint + picture + empty-slide + font + size).
70
+ "audit",
71
+ "AuditReport",
72
+ # Figure adapters — embed Plotly / Matplotlib / SVG / HTML output as
73
+ # slide pictures. Third-party deps are imported lazily on first call.
74
+ "add_plotly_figure",
75
+ "add_matplotlib_figure",
76
+ "add_svg_figure",
77
+ "add_html_figure",
78
+ "FigureBackendUnavailable",
79
+ "MathBackendUnavailable",
80
+ # Shape-level building blocks built on the design tokens.
81
+ "add_kpi_card",
82
+ "add_progress_bar",
83
+ "add_gauge",
84
+ "add_status_pill",
85
+ "add_stat_strip",
86
+ "add_article_card",
87
+ "KpiCard",
88
+ "ProgressBar",
89
+ "Gauge",
90
+ "StatusPill",
91
+ "StatStrip",
92
+ "ArticleCard",
93
+ ]
94
+
95
+ content_type_to_part_class_map: dict[str, type[Part]] = {
96
+ CT.PML_PRESENTATION_MAIN: PresentationPart,
97
+ CT.PML_PRES_MACRO_MAIN: PresentationPart,
98
+ CT.PML_TEMPLATE_MAIN: PresentationPart,
99
+ CT.PML_SLIDESHOW_MAIN: PresentationPart,
100
+ CT.OPC_CORE_PROPERTIES: CorePropertiesPart,
101
+ CT.PML_NOTES_MASTER: NotesMasterPart,
102
+ CT.PML_NOTES_SLIDE: NotesSlidePart,
103
+ CT.PML_SLIDE: SlidePart,
104
+ CT.PML_SLIDE_LAYOUT: SlideLayoutPart,
105
+ CT.PML_SLIDE_MASTER: SlideMasterPart,
106
+ CT.OFC_THEME: ThemePart,
107
+ CT.DML_CHART: ChartPart,
108
+ CT.DML_DIAGRAM_DATA: DiagramDataPart,
109
+ CT.DML_DIAGRAM_LAYOUT: DiagramLayoutPart,
110
+ CT.DML_DIAGRAM_STYLE: DiagramStylePart,
111
+ CT.DML_DIAGRAM_COLORS: DiagramColorsPart,
112
+ CT.BMP: ImagePart,
113
+ CT.GIF: ImagePart,
114
+ CT.JPEG: ImagePart,
115
+ CT.MS_PHOTO: ImagePart,
116
+ CT.PNG: ImagePart,
117
+ CT.TIFF: ImagePart,
118
+ CT.X_EMF: ImagePart,
119
+ CT.X_WMF: ImagePart,
120
+ CT.ASF: MediaPart,
121
+ CT.AVI: MediaPart,
122
+ CT.MOV: MediaPart,
123
+ CT.MP4: MediaPart,
124
+ CT.MPG: MediaPart,
125
+ CT.MS_VIDEO: MediaPart,
126
+ CT.SWF: MediaPart,
127
+ CT.VIDEO: MediaPart,
128
+ CT.WMV: MediaPart,
129
+ CT.X_MS_VIDEO: MediaPart,
130
+ # -- accommodate "image/jpg" as an alias for "image/jpeg" --
131
+ "image/jpg": ImagePart,
132
+ }
133
+
134
+ PartFactory.part_type_for.update(content_type_to_part_class_map)
135
+
136
+ del (
137
+ ChartPart,
138
+ CorePropertiesPart,
139
+ DiagramColorsPart,
140
+ DiagramDataPart,
141
+ DiagramLayoutPart,
142
+ DiagramStylePart,
143
+ ImagePart,
144
+ MediaPart,
145
+ SlidePart,
146
+ SlideLayoutPart,
147
+ SlideMasterPart,
148
+ ThemePart,
149
+ PresentationPart,
150
+ CT,
151
+ PartFactory,
152
+ )
pptx2/_color.py ADDED
@@ -0,0 +1,75 @@
1
+ """Internal canonical colour-coercion helper.
2
+
3
+ Most public colour-accepting setters in python-pptx2 historically accepted
4
+ exactly one shape (``RGBColor`` for ``shape.fill.fore_color.rgb``, hex
5
+ strings for ``linear_gradient``, mixed for ``chart.apply_palette``). The
6
+ asymmetry was a category-of-bug for both human and LLM authoring.
7
+
8
+ :func:`coerce_color` accepts every shape any documented surface in the
9
+ library has accepted historically, so a public setter that routes a
10
+ caller-supplied colour through this helper "just works" with hex
11
+ strings, ``RGBColor`` instances, and 3-tuples.
12
+
13
+ Supported inputs
14
+ ~~~~~~~~~~~~~~~~
15
+
16
+ * :class:`~pptx2.dml.color.RGBColor` — returned as-is.
17
+ * ``str`` — 6-digit hex, with or without leading ``"#"``. 3-digit
18
+ shorthand (``"#FFF"``) is **not** accepted; write the full form.
19
+ * 3-tuple / 3-list of ``int`` in ``[0, 255]`` — positional R, G, B.
20
+
21
+ Anything else raises :class:`TypeError` with a message that points to
22
+ this helper, so callers see one consistent error regardless of which
23
+ public setter they hit.
24
+ """
25
+
26
+ from __future__ import annotations
27
+
28
+ from typing import Any
29
+
30
+ from pptx2.dml.color import RGBColor
31
+
32
+ ColorLike = "RGBColor | str | tuple[int, int, int] | list[int]"
33
+
34
+
35
+ def coerce_color(value: Any) -> RGBColor:
36
+ """Coerce *value* to an :class:`RGBColor`.
37
+
38
+ See module docstring for the accepted shapes.
39
+ """
40
+ if isinstance(value, RGBColor):
41
+ return value
42
+ if isinstance(value, str):
43
+ s = value.lstrip("#")
44
+ if len(s) != 6:
45
+ raise ValueError(
46
+ "color hex string must be 6 digits "
47
+ "(e.g. '#3C2F80' or '3C2F80'); got %r" % value
48
+ )
49
+ try:
50
+ return RGBColor.from_hex(s)
51
+ except ValueError as exc:
52
+ raise ValueError("invalid color hex string %r: %s" % (value, exc)) from exc
53
+ if isinstance(value, (tuple, list)) and len(value) == 3:
54
+ # Reject floats, numeric strings, and bools rather than
55
+ # silently coercing via ``int()`` — the documented contract is
56
+ # "3-tuple of int", and the previous ``RGBColor(*value)`` path
57
+ # rejected non-int inputs too. ``bool`` is a subclass of
58
+ # ``int`` in Python, so guard explicitly so ``(True, False,
59
+ # True)`` doesn't silently resolve to ``RGBColor(1, 0, 1)``.
60
+ for c in value:
61
+ if not isinstance(c, int) or isinstance(c, bool):
62
+ raise TypeError(
63
+ "color 3-tuple must contain ints in [0, 255]; got %r"
64
+ % (value,)
65
+ )
66
+ return RGBColor(value[0], value[1], value[2])
67
+ raise TypeError(
68
+ "expected a color-like value (RGBColor, '#RRGGBB' hex string, "
69
+ "or 3-tuple of ints); got %r" % (value,)
70
+ )
71
+
72
+
73
+ # Re-export under the historical underscore name as well so
74
+ # ``from pptx2._color import _coerce`` works.
75
+ _coerce = coerce_color