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