X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/f67c59f3fea793ed3ccea7f5a8106014ec2dc108..c856e47c2a25dc6979ea07f2c3942687687c833a:/sdk/R/R/HttpParser.R diff --git a/sdk/R/R/HttpParser.R b/sdk/R/R/HttpParser.R index faa22f06b6..8ce68f3837 100644 --- a/sdk/R/R/HttpParser.R +++ b/sdk/R/R/HttpParser.R @@ -1,39 +1,57 @@ -#' HttpParser -#' +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: Apache-2.0 + HttpParser <- R6::R6Class( "HttrParser", public = list( + + validContentTypes = NULL, + initialize = function() { + self$validContentTypes <- c("text", "raw") }, parseJSONResponse = function(serverResponse) { - parsed_response <- httr::content(serverResponse, as = "parsed", type = "application/json") + parsed_response <- httr::content(serverResponse, + as = "parsed", + type = "application/json") + }, + + parseResponse = function(serverResponse, outputType) + { + parsed_response <- httr::content(serverResponse, as = outputType) }, - #Todo(Fudo): Test this. - parseWebDAVResponse = function(response, uri) + getFileNamesFromResponse = function(response, uri) { text <- rawToChar(response$content) doc <- XML::xmlParse(text, asText=TRUE) - - # calculate relative paths base <- paste(paste("/", strsplit(uri, "/")[[1]][-1:-3], sep="", collapse=""), "/", sep="") - result <- XML::xpathApply(doc, "//D:response", function(node) { - result = list() - children = XML::xmlChildren(node) + result <- unlist( + XML::xpathApply(doc, "//D:response/D:href", function(node) { + sub(base, "", URLdecode(XML::xmlValue(node)), fixed=TRUE) + }) + ) + result <- result[result != ""] + result[-1] + }, - result$name = sub(base, "", URLdecode(XML::xmlValue(children$href)), fixed=TRUE) - sizeXMLNode = XML::xmlChildren(XML::xmlChildren(children$propstat)$prop)$getcontentlength - result$fileSize = as.numeric(XML::xmlValue(sizeXMLNode)) + getFileSizesFromResponse = function(response, uri) + { + text <- rawToChar(response$content) + doc <- XML::xmlParse(text, asText=TRUE) - result + 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) }) - result + unlist(result) } ) )