X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/5c6b040cabe60623364f19dc35920a084d6c6fc6..e5830f6744927c870a8c7a847c1b3400c373f646:/sdk/R/R/RESTService.R diff --git a/sdk/R/R/RESTService.R b/sdk/R/R/RESTService.R index 62356b7638..c215cf3595 100644 --- a/sdk/R/R/RESTService.R +++ b/sdk/R/R/RESTService.R @@ -4,23 +4,28 @@ RESTService <- R6::R6Class( public = list( - hostName = NULL, - token = NULL, - http = NULL, - httpParser = NULL, + token = NULL, + http = NULL, + httpParser = NULL, + numRetries = NULL, + + initialize = function(token, rawHost, + http, httpParser, + numRetries = 0, + webDavHostName = NULL) + { + self$token <- token + self$http <- http + self$httpParser <- httpParser + self$numRetries <- numRetries + + private$rawHostName <- rawHost + private$webDavHostName <- webDavHostName + }, - initialize = function(token, hostName, webDavHostName = NULL, http, httpParser) + setNumConnRetries = function(newNumOfRetries) { - version <- "v1" - - self$token <- token - self$hostName <- paste0("https://", hostName, - "/arvados/", version, "/") - self$http <- http - self$httpParser <- httpParser - - private$rawHostName <- hostName - private$webDavHostName <- webDavHostName + self$numRetries <- newNumOfRetries }, getWebDavHostName = function() @@ -32,7 +37,8 @@ RESTService <- R6::R6Class( headers <- list(Authorization = paste("OAuth2", self$token)) - serverResponse <- self$http$GET(discoveryDocumentURL, headers) + serverResponse <- self$http$exec("GET", discoveryDocumentURL, headers, + retryTimes = self$numRetries) discoveryDocument <- self$httpParser$parseJSONResponse(serverResponse) private$webDavHostName <- discoveryDocument$keepWebServiceUrl @@ -44,117 +50,6 @@ RESTService <- R6::R6Class( private$webDavHostName }, - getResource = function(resource, uuid) - { - resourceURL <- paste0(self$hostName, resource, "/", uuid) - headers <- list(Authorization = paste("OAuth2", self$token)) - - serverResponse <- self$http$GET(resourceURL, headers) - - resource <- self$httpParser$parseJSONResponse(serverResponse) - - if(!is.null(resource$errors)) - stop(resource$errors) - - resource - }, - - listResources = function(resource, filters = NULL, limit = 100, offset = 0) - { - resourceURL <- paste0(self$hostName, resource) - headers <- list(Authorization = paste("OAuth2", self$token)) - - serverResponse <- self$http$GET(resourceURL, headers, filters, - limit, offset) - - resources <- self$httpParser$parseJSONResponse(serverResponse) - - if(!is.null(resources$errors)) - stop(resources$errors) - - resources - }, - - fetchAllItems = function(resourceURL, filters) - { - headers <- list(Authorization = paste("OAuth2", self$token)) - - offset <- 0 - itemsAvailable <- .Machine$integer.max - items <- c() - while(length(items) < itemsAvailable) - { - serverResponse <- self$http$GET(url = resourceURL, - headers = headers, - queryFilters = filters, - limit = NULL, - offset = offset) - - parsedResponse <- self$httpParser$parseJSONResponse(serverResponse) - - if(!is.null(parsedResponse$errors)) - stop(parsedResponse$errors) - - items <- c(items, parsedResponse$items) - offset <- length(items) - itemsAvailable <- parsedResponse$items_available - } - - items - }, - - deleteResource = function(resource, uuid) - { - collectionURL <- paste0(self$hostName, resource, "/", uuid) - headers <- list("Authorization" = paste("OAuth2", self$token), - "Content-Type" = "application/json") - - serverResponse <- self$http$DELETE(collectionURL, headers) - - removedResource <- self$httpParser$parseJSONResponse(serverResponse) - - if(!is.null(removedResource$errors)) - stop(removedResource$errors) - - removedResource - }, - - updateResource = function(resource, uuid, newContent) - { - resourceURL <- paste0(self$hostName, resource, "/", uuid) - headers <- list("Authorization" = paste("OAuth2", self$token), - "Content-Type" = "application/json") - - newContent <- jsonlite::toJSON(newContent, auto_unbox = T) - - serverResponse <- self$http$PUT(resourceURL, headers, newContent) - - updatedResource <- self$httpParser$parseJSONResponse(serverResponse) - - if(!is.null(updatedResource$errors)) - stop(updatedResource$errors) - - updatedResource - }, - - createResource = function(resource, content) - { - resourceURL <- paste0(self$hostName, resource) - headers <- list("Authorization" = paste("OAuth2", self$token), - "Content-Type" = "application/json") - - content <- jsonlite::toJSON(content, auto_unbox = T) - - serverResponse <- self$http$POST(resourceURL, headers, content) - - newResource <- self$httpParser$parseJSONResponse(serverResponse) - - if(!is.null(newResource$errors)) - stop(newResource$errors) - - newResource - }, - create = function(files, uuid) { sapply(files, function(filePath) @@ -169,7 +64,8 @@ RESTService <- R6::R6Class( uuid, "/", relativePath); headers <- list(Authorization = paste("OAuth2", self$token)) - serverResponse <- self$http$DELETE(fileURL, headers) + serverResponse <- self$http$exec("DELETE", fileURL, headers, + retryTimes = self$numRetries) if(serverResponse$status_code < 200 || serverResponse$status_code >= 300) stop(paste("Server code:", serverResponse$status_code)) @@ -186,7 +82,8 @@ RESTService <- R6::R6Class( headers <- list("Authorization" = paste("OAuth2", self$token), "Destination" = toURL) - serverResponse <- self$http$MOVE(fromURL, headers) + serverResponse <- self$http$exec("MOVE", fromURL, headers, + retryTimes = self$numRetries) if(serverResponse$status_code < 200 || serverResponse$status_code >= 300) stop(paste("Server code:", serverResponse$status_code)) @@ -201,7 +98,8 @@ RESTService <- R6::R6Class( headers <- list("Authorization" = paste("OAuth2", self$token)) - response <- self$http$PROPFIND(collectionURL, headers) + response <- self$http$exec("PROPFIND", collectionURL, headers, + retryTimes = self$numRetries) if(all(response == "")) stop("Response is empty, request may be misconfigured") @@ -221,7 +119,8 @@ RESTService <- R6::R6Class( headers <- list("Authorization" = paste("OAuth2", self$token)) - response <- self$http$PROPFIND(subcollectionURL, headers) + response <- self$http$exec("PROPFIND", subcollectionURL, headers, + retryTimes = self$numRetries) if(all(response == "")) stop("Response is empty, request may be misconfigured") @@ -257,7 +156,8 @@ RESTService <- R6::R6Class( if(!(contentType %in% self$httpParser$validContentTypes)) stop("Invalid contentType. Please use text or raw.") - serverResponse <- self$http$GET(fileURL, headers) + serverResponse <- self$http$exec("GET", fileURL, headers, + retryTimes = self$numRetries) if(serverResponse$status_code < 200 || serverResponse$status_code >= 300) stop(paste("Server code:", serverResponse$status_code)) @@ -273,7 +173,8 @@ RESTService <- R6::R6Class( "Content-Type" = contentType) body <- content - serverResponse <- self$http$PUT(fileURL, headers, body) + serverResponse <- self$http$exec("PUT", fileURL, headers, body, + retryTimes = self$numRetries) if(serverResponse$status_code < 200 || serverResponse$status_code >= 300) stop(paste("Server code:", serverResponse$status_code)) @@ -309,7 +210,8 @@ RESTService <- R6::R6Class( "Content-Type" = contentType) body <- NULL - serverResponse <- self$http$PUT(fileURL, headers, body) + serverResponse <- self$http$exec("PUT", fileURL, headers, body, + retryTimes = self$numRetries) if(serverResponse$status_code < 200 || serverResponse$status_code >= 300) stop(paste("Server code:", serverResponse$status_code))