+#' 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))
sample
}
-RListToPythonList <- function(sample, separator = ", ")
+RListToPythonList <- function(RList, separator = ", ")
{
- pythonArrayContent <- sapply(sample, function(sampleUnit)
+ pythonArrayContent <- sapply(RList, function(elementInList)
{
- if((is.vector(sampleUnit) || is.list(sampleUnit)) &&
- length(sampleUnit) > 1)
+ if((is.vector(elementInList) || is.list(elementInList)) &&
+ length(elementInList) > 1)
{
- return(RListToPythonList(sampleUnit, separator))
+ return(RListToPythonList(elementInList, separator))
}
else
{
- return(paste0("\"", sampleUnit, "\""))
+ return(paste0("\"", elementInList, "\""))
}
})
- return(paste0("[", paste0(pythonArrayContent, collapse = separator), "]"))
+ pythonArray <- paste0("[", paste0(pythonArrayContent, collapse = separator), "]")
+ pythonArray
}
appendToStartIfNotExist <- function(sample, characters)
nameAndPath$name <- components[length(components)]
nameAndPath$path <- trimFromStart(paste0(components[-length(components)], collapse = "/"),
"/")
-
nameAndPath
}