Skip to content

Commit 083268d

Browse files
committed
refactor: enhance table method in SlideBuilder to support callable data and improve parameter handling
1 parent de0ed4a commit 083268d

File tree

1 file changed

+44
-7
lines changed

1 file changed

+44
-7
lines changed

src/tppt/pptx/slide.py

Lines changed: 44 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -181,13 +181,43 @@ def _register(slide: Slide) -> Picture:
181181

182182
return self
183183

184-
def table(self, data: DataFrame, /, **kwargs: Unpack[TableProps]) -> Self:
185-
data = dataframe2list(data)
186-
rows, cols = len(data), len(data[0])
187-
table_data: TableData = {"type": "table", "data": data, **kwargs}
184+
@overload
185+
def table(self, data: DataFrame, /, **kwargs: Unpack[TableProps]) -> Self: ...
188186

189-
self._shape_registry.append(
190-
lambda slide: Table(
187+
@overload
188+
def table(
189+
self,
190+
data: Callable[[Table], Table],
191+
/,
192+
rows: int,
193+
cols: int,
194+
**kwargs: Unpack[TableProps],
195+
) -> Self: ...
196+
197+
def table(
198+
self,
199+
data: DataFrame | Callable[[Table], Table],
200+
/,
201+
rows: int | None = None,
202+
cols: int | None = None,
203+
**kwargs: Unpack[TableProps],
204+
) -> Self:
205+
if isinstance(data, Callable):
206+
assert rows is not None
207+
assert cols is not None
208+
table_data: TableData = {"type": "table", "data": [], **kwargs}
209+
else:
210+
data = dataframe2list(data)
211+
rows, cols = len(data), len(data[0])
212+
213+
table_data: TableData = {
214+
"type": "table",
215+
"data": data,
216+
**kwargs,
217+
}
218+
219+
def _register(slide: Slide) -> Table:
220+
table_obj = Table(
191221
slide.to_pptx().shapes.add_table(
192222
rows,
193223
cols,
@@ -198,7 +228,14 @@ def table(self, data: DataFrame, /, **kwargs: Unpack[TableProps]) -> Self:
198228
),
199229
table_data,
200230
)
201-
)
231+
232+
if isinstance(data, Callable):
233+
return data(table_obj)
234+
else:
235+
return table_obj
236+
237+
self._shape_registry.append(_register)
238+
202239
return self
203240

204241
def _build(self, slide: PptxSlide) -> Slide:

0 commit comments

Comments
 (0)