16827: Fix getFileNamesFromResponse
[arvados.git] / sdk / R / R / HttpParser.R
1 # Copyright (C) The Arvados Authors. All rights reserved.
2 #
3 # SPDX-License-Identifier: Apache-2.0
4
5 HttpParser <- R6::R6Class(
6
7     "HttrParser",
8
9     public = list(
10
11         validContentTypes = NULL,
12
13         initialize = function()
14         {
15             self$validContentTypes <- c("text", "raw")
16         },
17
18         parseJSONResponse = function(serverResponse)
19         {
20             parsed_response <- httr::content(serverResponse,
21                                              as = "parsed",
22                                              type = "application/json")
23         },
24
25         parseResponse = function(serverResponse, outputType)
26         {
27             parsed_response <- httr::content(serverResponse, as = outputType)
28         },
29
30         getFileNamesFromResponse = function(response, uri)
31         {
32             text <- rawToChar(response$content)
33             doc <- XML::xmlParse(text, asText=TRUE)
34             base <- paste("/", strsplit(uri, "/")[[1]][4], "/", sep="")
35             result <- unlist(
36                 XML::xpathApply(doc, "//D:response/D:href", function(node) {
37                     sub(base, "", URLdecode(XML::xmlValue(node)), fixed=TRUE)
38                 })
39             )
40             result[result != ""]
41         },
42
43         getFileSizesFromResponse = function(response, uri)
44         {
45             text <- rawToChar(response$content)
46             doc <- XML::xmlParse(text, asText=TRUE)
47
48             base <- paste(paste("/", strsplit(uri, "/")[[1]][-1:-3], sep="", collapse=""), "/", sep="")
49             result <- XML::xpathApply(doc, "//D:response/D:propstat/D:prop/D:getcontentlength", function(node) {
50               XML::xmlValue(node)
51             })
52
53             unlist(result)
54         }
55     )
56 )