X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/f2a79e0cc9bffcbe941d9a05b78f102fa6f09d03..3aaefcb3c76ff470b475d950398d01255e87712a:/sdk/R/R/HttpParser.R diff --git a/sdk/R/R/HttpParser.R b/sdk/R/R/HttpParser.R index fb895bed34..60bf782827 100644 --- a/sdk/R/R/HttpParser.R +++ b/sdk/R/R/HttpParser.R @@ -1,48 +1,56 @@ -#' 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) + } ) )