X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/acb392d097b6dc72ce0953d22d245b039b62fccc..fba33040ea730ccc30035557226fc1a1de32ba6e:/sdk/R/R/RESTService.R diff --git a/sdk/R/R/RESTService.R b/sdk/R/R/RESTService.R index 12e6591ee8..108aa1969f 100644 --- a/sdk/R/R/RESTService.R +++ b/sdk/R/R/RESTService.R @@ -1,30 +1,29 @@ +# 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, numRetries = NULL, - initialize = function(token, hostName, + 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$numRetries <- numRetries + self$token <- token + self$http <- http + self$httpParser <- httpParser + self$numRetries <- numRetries - private$rawHostName <- hostName + private$rawHostName <- rawHost private$webDavHostName <- webDavHostName }, @@ -42,8 +41,8 @@ RESTService <- R6::R6Class( headers <- list(Authorization = paste("OAuth2", self$token)) - serverResponse <- self$http$execute("GET", discoveryDocumentURL, headers, - retryTimes = self$numRetries) + serverResponse <- self$http$exec("GET", discoveryDocumentURL, headers, + retryTimes = self$numRetries) discoveryDocument <- self$httpParser$parseJSONResponse(serverResponse) private$webDavHostName <- discoveryDocument$keepWebServiceUrl @@ -55,126 +54,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, - retryTimes = self$numRetries) - - 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, - self$numRetries) - - 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, - retryTimes = self$numRetries) - - 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, - retryTimes = self$numRetries) - - 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, - retryTimes = self$numRetries) - - 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, - retryTimes = self$numRetries) - - newResource <- self$httpParser$parseJSONResponse(serverResponse) - - if(!is.null(newResource$errors)) - stop(newResource$errors) - - newResource - }, - create = function(files, uuid) { sapply(files, function(filePath) @@ -189,8 +68,8 @@ RESTService <- R6::R6Class( uuid, "/", relativePath); headers <- list(Authorization = paste("OAuth2", self$token)) - serverResponse <- self$http$execute("DELETE", fileURL, headers, - retryTimes = self$numRetries) + 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)) @@ -207,8 +86,8 @@ RESTService <- R6::R6Class( headers <- list("Authorization" = paste("OAuth2", self$token), "Destination" = toURL) - serverResponse <- self$http$execute("MOVE", fromURL, headers, - retryTimes = self$numRetries) + 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)) @@ -223,8 +102,8 @@ RESTService <- R6::R6Class( headers <- list("Authorization" = paste("OAuth2", self$token)) - response <- self$http$execute("PROPFIND", collectionURL, headers, - retryTimes = self$numRetries) + response <- self$http$exec("PROPFIND", collectionURL, headers, + retryTimes = self$numRetries) if(all(response == "")) stop("Response is empty, request may be misconfigured") @@ -244,8 +123,8 @@ RESTService <- R6::R6Class( headers <- list("Authorization" = paste("OAuth2", self$token)) - response <- self$http$execute("PROPFIND", subcollectionURL, headers, - retryTimes = self$numRetries) + response <- self$http$exec("PROPFIND", subcollectionURL, headers, + retryTimes = self$numRetries) if(all(response == "")) stop("Response is empty, request may be misconfigured") @@ -281,8 +160,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, - retryTimes = self$numRetries) + 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)) @@ -298,8 +177,8 @@ RESTService <- R6::R6Class( "Content-Type" = contentType) body <- content - serverResponse <- self$http$execute("PUT", fileURL, headers, body, - retryTimes = self$numRetries) + 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)) @@ -307,18 +186,13 @@ RESTService <- R6::R6Class( self$httpParser$parseResponse(serverResponse, "text") }, - getConnection = function(uuid, relativePath, openMode) + getConnection = function(relativePath, uuid, openMode) { fileURL <- paste0(self$getWebDavHostName(), "c=", uuid, "/", relativePath); headers <- list(Authorization = paste("OAuth2", self$token)) - h <- curl::new_handle() - curl::handle_setheaders(h, .list = headers) - - conn <- curl::curl(url = fileURL, open = openMode, handle = h) - - conn + conn <- self$http$getConnection(fileURL, headers, openMode) } ), @@ -335,8 +209,8 @@ RESTService <- R6::R6Class( "Content-Type" = contentType) body <- NULL - serverResponse <- self$http$execute("PUT", fileURL, headers, body, - retryTimes = self$numRetries) + 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))