+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: Apache-2.0
+
RESTService <- R6::R6Class(
"RESTService",
public = list(
- hostName = NULL,
- token = NULL,
- http = NULL,
- httpParser = 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$hostName <- paste0("https://", hostName,
- "/arvados/", version, "/")
- self$http <- http
- self$httpParser <- httpParser
+ self$token <- token
+ self$http <- http
+ self$httpParser <- httpParser
+ self$numRetries <- numRetries
- private$rawHostName <- hostName
+ private$rawHostName <- rawHost
private$webDavHostName <- webDavHostName
},
+ setNumConnRetries = function(newNumOfRetries)
+ {
+ self$numRetries <- newNumOfRetries
+ },
+
getWebDavHostName = function()
{
if(is.null(private$webDavHostName))
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
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)
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))
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))
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")
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")
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))
"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))
"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))