3 HttpRequest <- R6::R6Class(
9 validContentTypes = NULL,
12 initialize = function()
14 self$validContentTypes <- c("text", "raw")
15 self$validVerbs <- c("GET", "POST", "PUT", "DELETE", "PROPFIND", "MOVE")
18 execute = function(verb, url, headers = NULL, body = NULL, query = NULL,
19 limit = NULL, offset = NULL, retryTimes = 0)
21 if(!(verb %in% self$validVerbs))
22 stop("Http verb is not valid.")
24 headers <- httr::add_headers(unlist(headers))
25 urlQuery <- self$createQuery(query, limit, offset)
26 url <- paste0(url, urlQuery)
28 # times = 1 regular call + numberOfRetries
29 response <- httr::RETRY(verb, url = url, body = body,
30 config = headers, times = retryTimes + 1)
33 exec = function(verb, url, headers = NULL, body = NULL, queryParams = NULL,
36 if(!(verb %in% self$validVerbs))
37 stop("Http verb is not valid.")
39 headers <- httr::add_headers(unlist(headers))
40 urlQuery <- self$genQuery(queryParams)
41 url <- paste0(url, urlQuery)
43 # times = 1 regular call + numberOfRetries
44 response <- httr::RETRY(verb, url = url, body = body,
45 config = headers, times = retryTimes + 1)
48 createQuery = function(filters, limit, offset)
52 finalQuery <- c(finalQuery, private$createFiltersQuery(filters))
53 finalQuery <- c(finalQuery, private$createLimitQuery(limit))
54 finalQuery <- c(finalQuery, private$createOffsetQuery(offset))
56 finalQuery <- finalQuery[!is.null(finalQuery)]
57 finalQuery <- paste0(finalQuery, collapse = "&")
60 finalQuery <- paste0("/?", finalQuery)
65 genQuery = function(queryParams)
67 queryParams <- Filter(Negate(is.null), queryParams)
69 query <- sapply(queryParams, function(param)
71 if(is.list(param) || length(param) > 1)
72 param <- RListToPythonList(param, ",")
74 URLencode(as.character(param), reserved = T, repeated = T)
80 query <- paste0(names(query), "=", query, collapse = "&")
82 return(paste0("/?", query))
91 createFiltersQuery = function(filters)
95 filters <- RListToPythonList(filters, ",")
96 encodedQuery <- URLencode(filters, reserved = T, repeated = T)
98 return(paste0("filters=", encodedQuery))
104 createLimitQuery = function(limit)
108 limit <- suppressWarnings(as.numeric(limit))
111 stop("Limit must be a numeric type.")
113 return(paste0("limit=", limit))
119 createOffsetQuery = function(offset)
123 offset <- suppressWarnings(as.numeric(offset))
126 stop("Offset must be a numeric type.")
128 return(paste0("offset=", offset))