-
-
Notifications
You must be signed in to change notification settings - Fork 31
Open
Labels
Description
In Python, we may not need to give names to a list. In R, we would better do so, or the extraction may return NULL. The output is a list with first argument id and second property. Hence, if the users fail to give names, the following line would throw an error
Lines 360 to 363 in 6bc44b5
| # Assert that the component ID as passed is a string. | |
| if(!(is.character(output$id) & !grepl("^\\s*$", output$id) & !grepl("\\.", output$id))) { | |
| stop(sprintf("Callback IDs must be (non-empty) character strings that do not contain one or more dots/periods. Please verify that the component ID is valid."), call. = FALSE) | |
| } |
So, we can add an outputCheck function bellow.
outputCheck <- function(output) {
if(length(output) != 2) {
stop(sprintf("Both 'id' and 'property' should be provided"), call. = FALSE)
} else {
namesOutput <- names(output)
if(is.null(namesOutput)) {
warning(sprintf("output names are missing. The first element in output would be set as 'id' and the second would be 'property'"), call. = FALSE)
names(output) <- c("id", "property")
} else {
if(!all(namesOutput %in% c("id", "property"))) {
warning(sprintf("One of output names is missing."), call. = FALSE)
names(output) <- if(all(namesOutput == c("", "property")) | all(namesOutput == c("id", ""))) {
c("id", "property")
} else if(all(namesOutput == c("property", "")) | all(namesOutput == c("", "id"))) {
c("property", "id")
} else stop(sprintf("Only 'id' and 'property' can be provided"))
} else if (all(namesOutput %in% "id")) {
warning(sprintf("Both names are 'id', the second one would be set as 'property'"))
names(output) <- c("id", "property")
} else if (all(namesOutput %in% "property")) {
warning(sprintf("Both names are 'property', the first one would be set as 'id'"))
names(output) <- c("id", "property")
} else NULL
}
}
output
}
and draw this line
output <- outputCheck(output)
in
Lines 438 to 444 in 6bc44b5
| callback = function(output, params, func) { | |
| assert_valid_callbacks(output, params, func) | |
| inputs <- params[vapply(params, function(x) 'input' %in% attr(x, "class"), FUN.VALUE=logical(1))] | |
| state <- params[vapply(params, function(x) 'state' %in% attr(x, "class"), FUN.VALUE=logical(1))] | |
| # register the callback_map |
before assert_valid_callbacks(output, params, func)
It has been tested and should handle all kinds of missing given names
@rpkyle
rpkyle