2411: add copyright headers to our R files.
[arvados.git] / sdk / R / R / HttpRequest.R
1 # Copyright (C) The Arvados Authors. All rights reserved.
2 #
3 # SPDX-License-Identifier: Apache-2.0
4
5 source("./R/util.R")
6
7 HttpRequest <- R6::R6Class(
8
9     "HttrRequest",
10
11     public = list(
12
13         validContentTypes = NULL,
14         validVerbs = NULL,
15
16         initialize = function() 
17         {
18             self$validContentTypes <- c("text", "raw")
19             self$validVerbs <- c("GET", "POST", "PUT", "DELETE", "PROPFIND", "MOVE")
20         },
21
22         exec = function(verb, url, headers = NULL, body = NULL, queryParams = NULL,
23                         retryTimes = 0)
24         {
25             if(!(verb %in% self$validVerbs))
26                 stop("Http verb is not valid.")
27
28             urlQuery <- self$createQuery(queryParams)
29             url      <- paste0(url, urlQuery)
30
31             config <- httr::add_headers(unlist(headers))
32             if(toString(Sys.getenv("ARVADOS_API_HOST_INSECURE") == "TRUE"))
33                config$options = list(ssl_verifypeer = FALSE)
34
35             # times = 1 regular call + numberOfRetries
36             response <- httr::RETRY(verb, url = url, body = body,
37                                     config = config, times = retryTimes + 1)
38         },
39
40         createQuery = function(queryParams)
41         {
42             queryParams <- Filter(Negate(is.null), queryParams)
43
44             query <- sapply(queryParams, function(param)
45             {
46                 if(is.list(param) || length(param) > 1)
47                     param <- RListToPythonList(param, ",")
48
49                 URLencode(as.character(param), reserved = T, repeated = T)
50
51             }, USE.NAMES = TRUE)
52
53             if(length(query) > 0)
54             {
55                 query <- paste0(names(query), "=", query, collapse = "&")
56
57                 return(paste0("/?", query))
58             }
59
60             return("")
61         }
62     ),
63
64     cloneable = FALSE
65 )