-#' HttpParser
-#'
-HttpParser <- setRefClass(
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+HttpParser <- R6::R6Class(
"HttrParser",
- fields = list(
- ),
+ public = list(
+
+ validContentTypes = NULL,
- methods = list(
- initialize = function()
+ initialize = function()
{
+ self$validContentTypes <- c("text", "raw")
},
- parseCollectionGet = function(serverResponse)
+ parseJSONResponse = function(serverResponse)
{
- parsed_response <- httr::content(serverResponse, as = "parsed", type = "application/json")
-
- #Todo(Fudo): Create new Collection object and populate it
+ parsed_response <- httr::content(serverResponse,
+ as = "parsed",
+ type = "application/json")
},
- parseJSONResponse = function(serverResponse)
+ parseResponse = function(serverResponse, outputType)
{
- parsed_response <- httr::content(serverResponse, as = "parsed", type = "application/json")
-
- #Todo(Fudo): Create new Collection object and populate it
+ parsed_response <- httr::content(serverResponse, as = outputType)
},
- parseWebDAVResponse = function(response, uri)
+ getFileNamesFromResponse = function(response, uri)
{
- #Todo(Fudo): Move this to HttpParser.
text <- rawToChar(response$content)
doc <- XML::xmlParse(text, asText=TRUE)
-
- # calculate relative paths
- base <- paste(paste("/", strsplit(uri, "/")[[1]][-1:-3], sep="", collapse=""), "/", sep="")
+ base <- paste("/", strsplit(uri, "/")[[1]][4], "/", sep="")
result <- unlist(
XML::xpathApply(doc, "//D:response/D:href", function(node) {
sub(base, "", URLdecode(XML::xmlValue(node)), fixed=TRUE)
})
)
- result <- result[result != ""]
- #Todo(Fudo): Test this.
- result[-1]
- }
+ result[result != ""]
+ },
+ getFileSizesFromResponse = function(response, uri)
+ {
+ text <- rawToChar(response$content)
+ doc <- XML::xmlParse(text, asText=TRUE)
+
+ base <- paste(paste("/", strsplit(uri, "/")[[1]][-1:-3], sep="", collapse=""), "/", sep="")
+ result <- XML::xpathApply(doc, "//D:response/D:propstat/D:prop/D:getcontentlength", function(node) {
+ XML::xmlValue(node)
+ })
+
+ unlist(result)
+ }
)
)