X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/acb392d097b6dc72ce0953d22d245b039b62fccc..74cffe96768727e8b727cdb54358729c91bec130:/sdk/R/R/HttpRequest.R diff --git a/sdk/R/R/HttpRequest.R b/sdk/R/R/HttpRequest.R index f8ad0a60cd..07defca90f 100644 --- a/sdk/R/R/HttpRequest.R +++ b/sdk/R/R/HttpRequest.R @@ -1,3 +1,7 @@ +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: Apache-2.0 + source("./R/util.R") HttpRequest <- R6::R6Class( @@ -9,88 +13,62 @@ HttpRequest <- R6::R6Class( validContentTypes = NULL, validVerbs = NULL, - initialize = function() + initialize = function() { self$validContentTypes <- c("text", "raw") - self$validVerbs <- c("GET", "POST", "PUT", "DELETE", "PROPFIND", "MOVE") + self$validVerbs <- c("GET", "POST", "PUT", "DELETE", "PROPFIND", "MOVE", "COPY") }, - execute = function(verb, url, headers = NULL, body = NULL, query = NULL, - limit = NULL, offset = NULL, retryTimes = 0) + exec = function(verb, url, headers = NULL, body = NULL, queryParams = NULL, + retryTimes = 0) { if(!(verb %in% self$validVerbs)) stop("Http verb is not valid.") - headers <- httr::add_headers(unlist(headers)) - urlQuery <- self$createQuery(query, limit, offset) + urlQuery <- self$createQuery(queryParams) url <- paste0(url, urlQuery) + config <- httr::add_headers(unlist(headers)) + if(toString(Sys.getenv("ARVADOS_API_HOST_INSECURE") == "TRUE")) + config$options = list(ssl_verifypeer = 0L) + # times = 1 regular call + numberOfRetries response <- httr::RETRY(verb, url = url, body = body, - config = headers, times = retryTimes + 1) + config = config, times = retryTimes + 1) }, - createQuery = function(filters, limit, offset) + createQuery = function(queryParams) { - finalQuery <- NULL - - finalQuery <- c(finalQuery, private$createFiltersQuery(filters)) - finalQuery <- c(finalQuery, private$createLimitQuery(limit)) - finalQuery <- c(finalQuery, private$createOffsetQuery(offset)) - - finalQuery <- finalQuery[!is.null(finalQuery)] - finalQuery <- paste0(finalQuery, collapse = "&") - - if(finalQuery != "") - finalQuery <- paste0("/?", finalQuery) - - finalQuery - } - ), + queryParams <- Filter(Negate(is.null), queryParams) - private = list( - - createFiltersQuery = function(filters) - { - if(!is.null(filters)) + query <- sapply(queryParams, function(param) { - filters <- RListToPythonList(filters, ",") - encodedQuery <- URLencode(filters, reserved = T, repeated = T) + if(is.list(param) || length(param) > 1) + param <- RListToPythonList(param, ",") - return(paste0("filters=", encodedQuery)) - } + URLencode(as.character(param), reserved = T, repeated = T) - return(NULL) - }, + }, USE.NAMES = TRUE) - createLimitQuery = function(limit) - { - if(!is.null(limit)) + if(length(query) > 0) { - limit <- suppressWarnings(as.numeric(limit)) + query <- paste0(names(query), "=", query, collapse = "&") - if(is.na(limit)) - stop("Limit must be a numeric type.") - - return(paste0("limit=", limit)) + return(paste0("/?", query)) } - return(NULL) + return("") }, - createOffsetQuery = function(offset) + getConnection = function(url, headers, openMode) { - if(!is.null(offset)) - { - offset <- suppressWarnings(as.numeric(offset)) + h <- curl::new_handle() + curl::handle_setheaders(h, .list = headers) - if(is.na(offset)) - stop("Offset must be a numeric type.") - - return(paste0("offset=", offset)) - } + if(toString(Sys.getenv("ARVADOS_API_HOST_INSECURE") == "TRUE")) + curl::handle_setopt(h, ssl_verifypeer = 0L) - return(NULL) + conn <- curl::curl(url = url, open = openMode, handle = h) } ),