X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/acb392d097b6dc72ce0953d22d245b039b62fccc..0d50e82dd2255104e60c0882045b54774e1be380:/sdk/R/R/util.R diff --git a/sdk/R/R/util.R b/sdk/R/R/util.R index d9af8b057b..57dd75f228 100644 --- a/sdk/R/R/util.R +++ b/sdk/R/R/util.R @@ -1,3 +1,39 @@ +#' listAll +#' +#' List all resources even if the number of items is greater than maximum API limit. +#' +#' @param fn Arvados method used to retrieve items from REST service. +#' @param ... Optional arguments which will be pased to fn . +#' @examples +#' \dontrun{ +#' arv <- Arvados$new("your Arvados token", "example.arvadosapi.com") +#' cl <- listAll(arv$collections.list, filters = list(list("name", "like", "test%")) +#' } +#' @export +listAll <- function(fn, ...) +{ + offset <- 0 + itemsAvailable <- .Machine$integer.max + items <- c() + + while(length(items) < itemsAvailable) + { + serverResponse <- fn(offset = offset, ...) + + if(!is.null(serverResponse$errors)) + stop(serverResponse$errors) + + items <- c(items, serverResponse$items) + offset <- length(items) + itemsAvailable <- serverResponse$items_available + } + + items +} + + +#NOTE: Package private functions + trimFromStart <- function(sample, trimCharacters) { if(startsWith(sample, trimCharacters)) @@ -49,6 +85,5 @@ splitToPathAndName = function(path) nameAndPath$name <- components[length(components)] nameAndPath$path <- trimFromStart(paste0(components[-length(components)], collapse = "/"), "/") - nameAndPath }