1 source("./R/HttpRequest.R")
2 source("./R/HttpParser.R")
6 #' All Arvados logic is inside this class
8 #' @field token Token represents user authentification token.
9 #' @field host Host represents server name we wish to connect to.
10 #' @examples arv = Arvados$new("token", "host_name")
12 Arvados <- R6::R6Class(
18 initialize = function(auth_token = NULL, host_name = NULL)
20 if(!is.null(host_name))
21 Sys.setenv(ARVADOS_API_HOST = host_name)
23 if(!is.null(auth_token))
24 Sys.setenv(ARVADOS_API_TOKEN = auth_token)
26 host <- Sys.getenv("ARVADOS_API_HOST");
27 token <- Sys.getenv("ARVADOS_API_TOKEN");
29 if(host == "" | token == "")
30 stop("Please provide host name and authentification token or set ARVADOS_API_HOST and ARVADOS_API_TOKEN environmental variables.")
32 discoveryDocumentURL <- paste0("https://", host, "/discovery/v1/apis/arvados/v1/rest")
35 host <- paste0("https://", host, "/arvados/", version, "/")
37 private$http <- HttpRequest$new()
38 private$httpParser <- HttpParser$new()
39 private$token <- token
42 headers <- list(Authorization = paste("OAuth2", private$token))
44 serverResponse <- private$http$GET(discoveryDocumentURL, headers)
46 discoveryDocument <- private$httpParser$parseJSONResponse(serverResponse)
47 private$webDavHostName <- discoveryDocument$keepWebServiceUrl
50 getToken = function() private$token,
51 getHostName = function() private$host,
53 #Todo(Fudo): Hardcoded credentials to WebDAV server. Remove them later
54 getWebDavHostName = function() private$webDavHostName,
56 getCollection = function(uuid)
58 collectionURL <- paste0(private$host, "collections/", uuid)
59 headers <- list(Authorization = paste("OAuth2", private$token))
61 serverResponse <- private$http$GET(collectionURL, headers)
63 collection <- private$httpParser$parseJSONResponse(serverResponse)
65 if(!is.null(collection$errors))
66 stop(collection$errors)
71 listCollections = function(filters = NULL, limit = 100, offset = 0)
73 collectionURL <- paste0(private$host, "collections")
74 headers <- list(Authorization = paste("OAuth2", private$token))
76 names(filters) <- c("collection")
78 serverResponse <- private$http$GET(collectionURL, headers, filters, limit, offset)
79 collection <- private$httpParser$parseJSONResponse(serverResponse)
81 if(!is.null(collection$errors))
82 stop(collection$errors)
87 deleteCollection = function(uuid)
89 collectionURL <- paste0(private$host, "collections/", uuid)
90 headers <- list("Authorization" = paste("OAuth2", private$token),
91 "Content-Type" = "application/json")
93 serverResponse <- private$http$DELETE(collectionURL, headers)
95 collection <- private$httpParser$parseJSONResponse(serverResponse)
97 if(!is.null(collection$errors))
98 stop(collection$errors)
103 updateCollection = function(uuid, body)
105 collectionURL <- paste0(private$host, "collections/", uuid)
106 headers <- list("Authorization" = paste("OAuth2", private$token),
107 "Content-Type" = "application/json")
109 names(body) <- c("collection")
110 body <- jsonlite::toJSON(body, auto_unbox = T)
112 serverResponse <- private$http$PUT(collectionURL, headers, body)
114 collection <- private$httpParser$parseJSONResponse(serverResponse)
116 if(!is.null(collection$errors))
117 stop(collection$errors)
122 createCollection = function(body)
124 collectionURL <- paste0(private$host, "collections")
125 headers <- list("Authorization" = paste("OAuth2", private$token),
126 "Content-Type" = "application/json")
128 names(body) <- c("collection")
129 body <- jsonlite::toJSON(body, auto_unbox = T)
131 serverResponse <- private$http$POST(collectionURL, headers, body)
133 collection <- private$httpParser$parseJSONResponse(serverResponse)
135 if(!is.null(collection$errors))
136 stop(collection$errors)
141 getProject = function(uuid)
143 projectURL <- paste0(private$host, "groups/", uuid)
144 headers <- list(Authorization = paste("OAuth2", private$token))
146 serverResponse <- private$http$GET(projectURL, headers)
148 project <- private$httpParser$parseJSONResponse(serverResponse)
150 if(!is.null(project$errors))
156 createProject = function(body)
158 projectURL <- paste0(private$host, "groups")
159 headers <- list("Authorization" = paste("OAuth2", private$token),
160 "Content-Type" = "application/json")
162 names(body) <- c("group")
163 body <- jsonlite::toJSON(body, auto_unbox = T)
165 serverResponse <- private$http$POST(projectURL, headers, body)
167 project <- private$httpParser$parseJSONResponse(serverResponse)
169 if(!is.null(project$errors))
175 updateProject = function(uuid, body)
177 projectURL <- paste0(private$host, "groups/", uuid)
178 headers <- list("Authorization" = paste("OAuth2", private$token),
179 "Content-Type" = "application/json")
181 names(body) <- c("group")
182 body <- jsonlite::toJSON(body, auto_unbox = T)
184 serverResponse <- private$http$PUT(projectURL, headers, body)
186 project <- private$httpParser$parseJSONResponse(serverResponse)
188 if(!is.null(project$errors))
194 listProjects = function(filters = NULL, limit = 100, offset = 0)
196 projectURL <- paste0(private$host, "groups")
197 headers <- list(Authorization = paste("OAuth2", private$token))
199 names(filters) <- c("groups")
201 serverResponse <- private$http$GET(projectURL, headers, filters, limit, offset)
202 projects <- private$httpParser$parseJSONResponse(serverResponse)
204 if(!is.null(projects$errors))
205 stop(projects$errors)
210 deleteProject = function(uuid)
212 projectURL <- paste0(private$host, "groups/", uuid)
213 headers <- list("Authorization" = paste("OAuth2", private$token),
214 "Content-Type" = "application/json")
216 serverResponse <- private$http$DELETE(projectURL, headers)
218 project <- private$httpParser$parseJSONResponse(serverResponse)
220 if(!is.null(project$errors))
231 webDavHostName = NULL,