@@ -244,7 +244,6 @@ def _(data: PdDataFrame) -> FrameJson:
244
244
245
245
246
246
# TODO: test this
247
- @serialize_frame .register (nw .DataFrame )
248
247
@serialize_frame .register
249
248
def _ (data : PlDataFrame ) -> FrameJson :
250
249
import json
@@ -276,6 +275,51 @@ def wrap_shiny_html_with_session(x: TagNode):
276
275
}
277
276
278
277
278
+ @serialize_frame .register (nw .DataFrame )
279
+ def _ (data : nw .DataFrame [Any ]) -> FrameJson :
280
+ import json
281
+
282
+ type_hints = [serialize_dtype (data [col_name ]) for col_name in data .columns ]
283
+ type_hints_type = {type_hint ["type" ] for type_hint in type_hints }
284
+
285
+ data_rows = data .rows (named = False )
286
+
287
+ print (data_rows )
288
+ print (data .rows (named = False ))
289
+
290
+ # Shiny tag support
291
+ if "html" in type_hints_type :
292
+ session = require_active_session (None )
293
+
294
+ def wrap_shiny_html_with_session (x : TagNode ):
295
+ return maybe_as_cell_html (x , session = session )
296
+
297
+ html_column_positions = [
298
+ i for i , x in enumerate (type_hints_type ) if x == "html"
299
+ ]
300
+
301
+ new_rows : list [tuple [Any , ...]] = []
302
+
303
+ # Wrap the corresponding columns with the cell html object
304
+ for row in data_rows :
305
+ new_row = list (row )
306
+ for html_column_position in html_column_positions :
307
+ new_row [html_column_position ] = wrap_shiny_html_with_session (
308
+ new_row [html_column_position ]
309
+ )
310
+ new_rows .append (tuple (new_row ))
311
+
312
+ data_rows = new_rows
313
+
314
+ data_val = json .loads (json .dumps (data_rows , default = str ))
315
+
316
+ return {
317
+ "columns" : data .columns ,
318
+ "data" : data_val ,
319
+ "typeHints" : type_hints ,
320
+ }
321
+
322
+
279
323
# subset_frame -------------------------------------------------------------------------
280
324
def subset_frame__typed (
281
325
data : DataFrameLikeT , * , rows : RowsList = None , cols : ColsList = None
0 commit comments