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$group <- c("group_class" = "project", body$group)
164 body <- jsonlite::toJSON(body, auto_unbox = T)
166 serverResponse <- private$http$POST(projectURL, headers, body)
168 project <- private$httpParser$parseJSONResponse(serverResponse)
170 if(!is.null(project$errors))
176 updateProject = function(uuid, body)
178 projectURL <- paste0(private$host, "groups/", uuid)
179 headers <- list("Authorization" = paste("OAuth2", private$token),
180 "Content-Type" = "application/json")
182 names(body) <- c("group")
183 body <- jsonlite::toJSON(body, auto_unbox = T)
185 serverResponse <- private$http$PUT(projectURL, headers, body)
187 project <- private$httpParser$parseJSONResponse(serverResponse)
189 if(!is.null(project$errors))
195 listProjects = function(filters = NULL, limit = 100, offset = 0)
197 projectURL <- paste0(private$host, "groups")
198 headers <- list(Authorization = paste("OAuth2", private$token))
200 names(filters) <- c("groups")
201 filters[[length(filters) + 1]] <- list("group_class", "=", "project")
203 serverResponse <- private$http$GET(projectURL, headers, filters, limit, offset)
204 projects <- private$httpParser$parseJSONResponse(serverResponse)
206 if(!is.null(projects$errors))
207 stop(projects$errors)
212 deleteProject = function(uuid)
214 projectURL <- paste0(private$host, "groups/", uuid)
215 headers <- list("Authorization" = paste("OAuth2", private$token),
216 "Content-Type" = "application/json")
218 serverResponse <- private$http$DELETE(projectURL, headers)
220 project <- private$httpParser$parseJSONResponse(serverResponse)
222 if(!is.null(project$errors))
233 webDavHostName = NULL,