@@ -116,7 +116,9 @@ dataview_table <- local({
116116 sortModel = NULL , filterModel = NULL ,
117117 metadata_only = FALSE , force = FALSE ) {
118118
119- if (! is.data.frame(data ) && ! is.matrix(data ) && ! inherits(data , " ArrowTabular" )) {
119+ if (! is.data.frame(data ) && ! is.matrix(data ) &&
120+ ! inherits(data , " ArrowTabular" ) &&
121+ ! inherits(data , " polars_data_frame" )) {
120122 stop(" data must be a data frame, a matrix or an arrow table object." )
121123 }
122124
@@ -322,13 +324,21 @@ if (use_webserver) {
322324 }
323325
324326 result <- lapply(names , function (name ) {
325- item <- obj [[name ]]
327+ err_msg <- NULL
328+ item <- tryCatch(obj [[name ]], error = function (e ) {
329+ err_msg <<- conditionMessage(e )
330+ NULL
331+ })
332+ if (! is.null(err_msg )) {
333+ return (NULL )
334+ }
326335 list (
327336 name = name ,
328337 type = typeof(item ),
329338 str = try_capture_str(item )
330339 )
331340 })
341+ result <- Filter(Negate(is.null ), result )
332342 return (result )
333343 }
334344
@@ -352,10 +362,19 @@ if (use_webserver) {
352362 }
353363 fm_env <- get(" .dataview_first_map" , envir = .GlobalEnv )
354364
355- obj <- if (exists(varname , envir = .GlobalEnv )) {
356- get(varname , envir = .GlobalEnv )
357- } else {
358- eval(parse(text = varname ), envir = .GlobalEnv )
365+ obj <- NULL
366+ if (exists(" .vsc_env_view_cache" , envir = .GlobalEnv , inherits = FALSE )) {
367+ cache_env <- get(" .vsc_env_view_cache" , envir = .GlobalEnv )
368+ if (! is.null(cache_env [[varname ]])) {
369+ obj <- cache_env [[varname ]]
370+ }
371+ }
372+ if (is.null(obj )) {
373+ obj <- if (exists(varname , envir = .GlobalEnv )) {
374+ get(varname , envir = .GlobalEnv )
375+ } else {
376+ eval(parse(text = varname ), envir = .GlobalEnv )
377+ }
359378 }
360379
361380 attr(obj , " _dvkey" ) <- varname
@@ -366,6 +385,104 @@ if (use_webserver) {
366385 out <- dataview_table(obj , start , end , sortModel , filterModel , force = is_first )
367386 out $ columns <- NULL
368387 return (out )
388+ },
389+ dataview_refresh = function (varname , ... ) {
390+ if (! exists(" .dataview_first_map" , envir = .GlobalEnv , inherits = FALSE )) {
391+ assign(" .dataview_first_map" , new.env(parent = emptyenv()), envir = .GlobalEnv )
392+ }
393+ fm_env <- get(" .dataview_first_map" , envir = .GlobalEnv )
394+ fm_env [[varname ]] <- NULL
395+ if (exists(" .vsc_env_view_cache" , envir = .GlobalEnv , inherits = FALSE )) {
396+ cache_env <- get(" .vsc_env_view_cache" , envir = .GlobalEnv )
397+ cache_env [[varname ]] <- NULL
398+ }
399+
400+ obj <- if (exists(varname , envir = .GlobalEnv )) {
401+ get(varname , envir = .GlobalEnv )
402+ } else {
403+ eval(parse(text = varname ), envir = .GlobalEnv )
404+ }
405+
406+ if (is.environment(obj )) {
407+ all_names <- ls(obj )
408+ is_active <- vapply(all_names , bindingIsActive , logical (1 ), USE.NAMES = TRUE , obj )
409+ is_promise <- rlang :: env_binding_are_lazy(obj , all_names [! is_active ])
410+ obj <- lapply(all_names , function (name ) {
411+ if (isTRUE(is_promise [name ])) {
412+ data.frame (
413+ name = name ,
414+ class = " promise" ,
415+ type = " promise" ,
416+ length = 0L ,
417+ size = 0L ,
418+ value = " (promise)" ,
419+ stringsAsFactors = FALSE ,
420+ check.names = FALSE
421+ )
422+ } else if (isTRUE(is_active [name ])) {
423+ data.frame (
424+ name = name ,
425+ class = " active_binding" ,
426+ type = " active_binding" ,
427+ length = 0L ,
428+ size = 0L ,
429+ value = " (active-binding)" ,
430+ stringsAsFactors = FALSE ,
431+ check.names = FALSE
432+ )
433+ } else {
434+ obj_item <- obj [[name ]]
435+ data.frame (
436+ name = name ,
437+ class = paste0(class(obj_item ), collapse = " , " ),
438+ type = typeof(obj_item ),
439+ length = length(obj_item ),
440+ size = as.integer(object.size(obj_item )),
441+ value = trimws(try_capture_str(obj_item , 0 )),
442+ stringsAsFactors = FALSE ,
443+ check.names = FALSE
444+ )
445+ }
446+ })
447+ names(obj ) <- all_names
448+ if (length(obj )) {
449+ obj <- do.call(rbind , obj )
450+ } else {
451+ obj <- data.frame (
452+ name = character (),
453+ class = character (),
454+ type = character (),
455+ length = integer(),
456+ size = integer(),
457+ value = character (),
458+ stringsAsFactors = FALSE ,
459+ check.names = FALSE
460+ )
461+ }
462+ if (! exists(" .vsc_env_view_cache" , envir = .GlobalEnv , inherits = FALSE )) {
463+ assign(" .vsc_env_view_cache" , new.env(parent = emptyenv()), envir = .GlobalEnv )
464+ }
465+ cache_env <- get(" .vsc_env_view_cache" , envir = .GlobalEnv )
466+ cache_env [[varname ]] <- obj
467+ }
468+
469+ if (inherits(obj , " ArrowTabular" )) {
470+ obj <- obj [1 , ]$ to_data_frame()
471+ }
472+
473+ if (inherits(obj , " polars_data_frame" )) {
474+ obj <- as.data.frame(obj [0 , ])
475+ }
476+
477+ if (! is.data.frame(obj ) && ! is.matrix(obj )) {
478+ stop(" dataview_refresh expects a data.frame or matrix." )
479+ }
480+
481+ attr(obj , " _dvkey" ) <- varname
482+ meta <- dataview_table(obj , start = 0 , end = 0 , force = TRUE )
483+ file <- tempfile(tmpdir = tempdir , fileext = " .json" )
484+ jsonlite :: write_json(meta , file , na = " string" , null = " null" , auto_unbox = TRUE , force = TRUE )
485+ list (file = file )
369486 }
370487 )
371488
@@ -727,13 +844,18 @@ if (show_view) {
727844 x <- x [1 , ]$ to_data_frame()
728845 }
729846
847+ if (inherits(x , " polars_data_frame" )) {
848+ x <- as.data.frame(x [0 , ])
849+ }
850+
730851 if (is.environment(x )) {
731852 all_names <- ls(x )
732853 is_active <- vapply(all_names , bindingIsActive , logical (1 ), USE.NAMES = TRUE , x )
733854 is_promise <- rlang :: env_binding_are_lazy(x , all_names [! is_active ])
734855 x <- lapply(all_names , function (name ) {
735856 if (isTRUE(is_promise [name ])) {
736857 data.frame (
858+ name = name ,
737859 class = " promise" ,
738860 type = " promise" ,
739861 length = 0L ,
@@ -744,6 +866,7 @@ if (show_view) {
744866 )
745867 } else if (isTRUE(is_active [name ])) {
746868 data.frame (
869+ name = name ,
747870 class = " active_binding" ,
748871 type = " active_binding" ,
749872 length = 0L ,
@@ -755,6 +878,7 @@ if (show_view) {
755878 } else {
756879 obj <- x [[name ]]
757880 data.frame (
881+ name = name ,
758882 class = paste0(class(obj ), collapse = " , " ),
759883 type = typeof(obj ),
760884 length = length(obj ),
@@ -770,6 +894,7 @@ if (show_view) {
770894 x <- do.call(rbind , x )
771895 } else {
772896 x <- data.frame (
897+ name = character (),
773898 class = character (),
774899 type = character (),
775900 length = integer(),
@@ -779,6 +904,11 @@ if (show_view) {
779904 check.names = FALSE
780905 )
781906 }
907+ if (! exists(" .vsc_env_view_cache" , envir = .GlobalEnv , inherits = FALSE )) {
908+ assign(" .vsc_env_view_cache" , new.env(parent = emptyenv()), envir = .GlobalEnv )
909+ }
910+ cache_env <- get(" .vsc_env_view_cache" , envir = .GlobalEnv )
911+ cache_env [[title ]] <- x
782912 }
783913 if (is.data.frame(x ) || is.matrix(x )) {
784914 x <- data.table :: as.data.table(x [0 , , drop = FALSE ])
0 commit comments