X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/294e83e3d69e3da8dbced2059323d8680349f548..e5830f6744927c870a8c7a847c1b3400c373f646:/sdk/R/R/RESTService.R diff --git a/sdk/R/R/RESTService.R b/sdk/R/R/RESTService.R index 74031b00c3..c215cf3595 100644 --- a/sdk/R/R/RESTService.R +++ b/sdk/R/R/RESTService.R @@ -4,25 +4,30 @@ RESTService <- R6::R6Class( public = list( - hostName = NULL, token = NULL, http = NULL, httpParser = NULL, + numRetries = NULL, - initialize = function(token, hostName, webDavHostName = NULL, http, httpParser) + initialize = function(token, rawHost, + http, httpParser, + numRetries = 0, + webDavHostName = NULL) { - version <- "v1" + self$token <- token + self$http <- http + self$httpParser <- httpParser + self$numRetries <- numRetries - self$token <- token - self$hostName <- paste0("https://", hostName, - "/arvados/", version, "/") - self$http <- http - self$httpParser <- httpParser - - private$rawHostName <- hostName + private$rawHostName <- rawHost private$webDavHostName <- webDavHostName }, + setNumConnRetries = function(newNumOfRetries) + { + self$numRetries <- newNumOfRetries + }, + getWebDavHostName = function() { if(is.null(private$webDavHostName)) @@ -32,7 +37,8 @@ RESTService <- R6::R6Class( headers <- list(Authorization = paste("OAuth2", self$token)) - serverResponse <- self$http$execute("GET", discoveryDocumentURL, headers) + serverResponse <- self$http$exec("GET", discoveryDocumentURL, headers, + retryTimes = self$numRetries) discoveryDocument <- self$httpParser$parseJSONResponse(serverResponse) private$webDavHostName <- discoveryDocument$keepWebServiceUrl @@ -44,120 +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$execute("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)) - body <- NULL - - serverResponse <- self$http$execute("GET", resourceURL, headers, body, - 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$execute(verb = "GET", - url = resourceURL, - headers = headers, - body = NULL, - query = 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$execute("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$execute("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$execute("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) @@ -172,7 +64,8 @@ RESTService <- R6::R6Class( uuid, "/", relativePath); headers <- list(Authorization = paste("OAuth2", self$token)) - serverResponse <- self$http$execute("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)) @@ -189,7 +82,8 @@ RESTService <- R6::R6Class( headers <- list("Authorization" = paste("OAuth2", self$token), "Destination" = toURL) - serverResponse <- self$http$execute("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)) @@ -204,7 +98,8 @@ RESTService <- R6::R6Class( headers <- list("Authorization" = paste("OAuth2", self$token)) - response <- self$http$execute("PROPFIND", collectionURL, headers) + response <- self$http$exec("PROPFIND", collectionURL, headers, + retryTimes = self$numRetries) if(all(response == "")) stop("Response is empty, request may be misconfigured") @@ -224,7 +119,8 @@ RESTService <- R6::R6Class( headers <- list("Authorization" = paste("OAuth2", self$token)) - response <- self$http$execute("PROPFIND", subcollectionURL, headers) + response <- self$http$exec("PROPFIND", subcollectionURL, headers, + retryTimes = self$numRetries) if(all(response == "")) stop("Response is empty, request may be misconfigured") @@ -260,7 +156,8 @@ RESTService <- R6::R6Class( if(!(contentType %in% self$httpParser$validContentTypes)) stop("Invalid contentType. Please use text or raw.") - serverResponse <- self$http$execute("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)) @@ -276,7 +173,8 @@ RESTService <- R6::R6Class( "Content-Type" = contentType) body <- content - serverResponse <- self$http$execute("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)) @@ -312,7 +210,8 @@ RESTService <- R6::R6Class( "Content-Type" = contentType) body <- NULL - serverResponse <- self$http$execute("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))