Skip to content

Commit 06001b2

Browse files
committed
fix: update Placeholder type alias to support callable and enhance get_placeholders return type
1 parent f9d931a commit 06001b2

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed

src/tppt/template/slide_layout.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,22 @@
33
TYPE_CHECKING,
44
Annotated,
55
Any,
6+
Callable,
67
ClassVar,
78
OrderedDict,
89
Self,
910
TypeAlias,
1011
TypeVar,
12+
assert_never,
1113
dataclass_transform,
1214
get_args,
1315
get_origin,
1416
get_type_hints,
1517
overload,
1618
)
1719

18-
from tppt.exception import InvalidSetterTypeError
19-
2020
if TYPE_CHECKING:
21+
from ..pptx.shape.placeholder import SlidePlaceholder as SlidePlaceholder
2122
from ..pptx.slide import SlideBuilder
2223
from ..pptx.slide_layout import SlideLayout as PptxConvertibleSlideLayout
2324

@@ -26,7 +27,9 @@
2627

2728

2829
if TYPE_CHECKING:
29-
Placeholder: TypeAlias = Annotated[AnyType, ...]
30+
Placeholder: TypeAlias = Annotated[
31+
AnyType | Callable[[SlidePlaceholder], SlidePlaceholder], ...
32+
]
3033
else:
3134

3235
class Placeholder:
@@ -159,21 +162,23 @@ def placeholder_registry(slide: Slide):
159162
case None:
160163
continue
161164
case str():
162-
pass
165+
placeholder.text = value
163166
case datetime.date():
164-
value = value.strftime("%Y%m/%d")
167+
placeholder.text = value.strftime("%Y%m/%d")
168+
case Callable():
169+
value(placeholder)
165170
case _:
166-
raise InvalidSetterTypeError(str, type(value))
167-
168-
placeholder.text = value
171+
assert_never(value)
169172

170173
return SlideBuilder(
171174
self._convertible_slide_layout,
172175
placeholder_registry,
173176
)
174177

175178

176-
def get_placeholders(slide_layout: SlideLayout) -> OrderedDict[str, Any]:
179+
def get_placeholders(
180+
slide_layout: SlideLayout,
181+
) -> "OrderedDict[str, str | datetime.date | None | Callable[[SlidePlaceholder], SlidePlaceholder]]":
177182
return OrderedDict(
178183
(key, getattr(slide_layout, key))
179184
for key in slide_layout.__class__.__placeholders__

0 commit comments

Comments
 (0)