Implemented collection_create, collection_delete and collection_update
authorFuad Muhic <fmuhic@capeannenterprises.com>
Fri, 1 Dec 2017 15:19:13 +0000 (16:19 +0100)
committerFuad Muhic <fmuhic@capeannenterprises.com>
Fri, 1 Dec 2017 15:19:13 +0000 (16:19 +0100)
methods. Arvados-DCO-1.1-Signed-off-by: Fuad Muhic <fmuhic@capeannenterprises.com>

sdk/R/.RData
sdk/R/DESCRIPTION
sdk/R/R/Arvados.R
sdk/R/R/HttpRequest.R
sdk/R/man/Arvados-class.Rd
sdk/R/man/HttrParser-class.Rd [new file with mode: 0644]
sdk/R/man/collection_create.Rd [new file with mode: 0644]
sdk/R/man/collection_delete.Rd [new file with mode: 0644]
sdk/R/man/collection_get.Rd
sdk/R/man/collection_list.Rd [new file with mode: 0644]

index 13255a2b4738b05a98f32117ea346ef0bf3c02e8..2b5f989a1604d9e79c4c5bd9f85fdca042c5b2f9 100644 (file)
Binary files a/sdk/R/.RData and b/sdk/R/.RData differ
index 35fb870e4333e9a5f4bab34a12bbf5ad123b911b..c6afbbb6959712d4a60094d79adc5c576caecdfe 100644 (file)
@@ -11,4 +11,6 @@ Encoding: UTF-8
 LazyData: true
 RoxygenNote: 6.0.1.9000
 Imports:
-    httr
+    httr,
+    stringr,
+    jsonlite
index 204d87e4e1b816739bcf89e2c21b5c985ac7876e..8b3b40bb2478dfbbe1e7b7bdfec9502d99f79af4 100644 (file)
@@ -5,8 +5,9 @@ source("./R/HttpParser.R")
 #'
 #' All Arvados logic is inside this class
 #'
-#' @field token represents user authentification token.
-#' @field host represents server name we wish to connect to.
+#' @field token Token represents user authentification token.
+#' @field host Host represents server name we wish to connect to.
+#' @examples arv = Arvados("token", "host_name")
 #' @export Arvados
 Arvados <- setRefClass(
 
@@ -21,9 +22,10 @@ Arvados <- setRefClass(
 
         initialize = function(auth_token, host_name) 
         {
+            version <- "v1"
             #Todo(Fudo): Validate token
             token <<- auth_token
-            host  <<- host_name
+            host  <<- paste0("https://", host_name, "/arvados/", version, "/")
         }
     )
 )
@@ -34,6 +36,8 @@ Arvados <- setRefClass(
 #'
 #' @name collection_get
 #' @field uuid UUID of the given collection
+#' @examples arv = Arvados("token", "hostName")
+#' @examples arv$collection_get("uuid")
 Arvados$methods(
 
     collection_get = function(uuid) 
@@ -56,17 +60,23 @@ Arvados$methods(
 
 #' collection_list
 #'
-#' List Arvados collections based on filter matching
+#' Retreive list of collections based on provided filter.
 #'
 #' @name collection_list
-#' @field uuid UUID of the given collection
+#' @field filters List of filters we want to use to retreive list of collections.
+#' @field limit Limits the number of result returned by server.
+#' @field offset Offset from beginning of the result set.
+#' @examples arv = Arvados("token", "hostName")
+#' @examples arv$collection_list(list("uuid", "=" "aaaaa-bbbbb-ccccccccccccccc"))
 Arvados$methods(
 
     collection_list = function(filters = NULL, limit = NULL, offset = NULL) 
     {
         #Todo(Fudo): Implement limit and offset
         collection_relative_url <- "collections"
-        http_request <- HttpRequest("GET", token, host, collection_relative_url, filters, limit, offset) 
+        http_request <- HttpRequest("GET", token, host, collection_relative_url,
+                                    body = NULL,  filters, limit, offset) 
+
         server_response <- http_request$execute()
 
         httpParser <- HttpParser()
@@ -80,3 +90,93 @@ Arvados$methods(
         return(collection)
     }
 )
+
+#' collection_create
+#'
+#' Create Arvados collection
+#'
+#' @name collection_create
+#' @field body Structure of the collection we want to create.
+#' @examples arv = Arvados("token", "hostName")
+#' @examples arv$collection_create(list(collection = list(name = "myCollection")))
+Arvados$methods(
+
+    collection_create = function(body) 
+    {
+        collection_relative_url <- paste0("collections/", "/?alt=json")
+        body = jsonlite::toJSON(body, auto_unbox = T)
+
+        http_request    <- HttpRequest("POST", token, host, collection_relative_url, body) 
+        server_response <- http_request$execute()
+
+        httpParser <- HttpParser()
+        collection <- httpParser$parseCollectionGet(server_response)
+
+        if(!is.null(collection$errors))
+            stop(collection$errors)       
+
+        class(collection) <- "ArvadosCollection"
+
+        return(collection)
+    }
+)
+
+#' collection_delete
+#'
+#' Delete Arvados collection
+#'
+#' @name collection_delete
+#' @field uuid UUID of the collection we want to delete.
+#' @examples arv = Arvados("token", "hostName")
+#' @examples arv$collection_delete(uuid = "aaaaa-bbbbb-ccccccccccccccc")
+Arvados$methods(
+
+    collection_delete = function(uuid) 
+    {
+        collection_relative_url <- paste0("collections/", uuid, "/?alt=json")
+
+        http_request    <- HttpRequest("DELETE", token, host, collection_relative_url) 
+        server_response <- http_request$execute()
+
+        httpParser <- HttpParser()
+        collection <- httpParser$parseCollectionGet(server_response)
+
+        if(!is.null(collection$errors))
+            stop(collection$errors)       
+
+        class(collection) <- "ArvadosCollection"
+
+        return(collection)
+    }
+)
+
+#' collection_update
+#'
+#' Update Arvados collection
+#'
+#' @name collection_update
+#' @field uuid UUID of the collection we want to update.
+#' @field body New structure of the collection.
+#' @examples arv = Arvados("token", "hostName")
+#' @examples arv$collection_update(uuid = "aaaaa-bbbbb-ccccccccccccccc", list(collection = list(name = "newName")))
+Arvados$methods(
+
+    collection_update = function(uuid, body) 
+    {
+        collection_relative_url <- paste0("collections/", uuid, "/?alt=json")
+        body = jsonlite::toJSON(body, auto_unbox = T)
+
+        http_request    <- HttpRequest("PUT", token, host, collection_relative_url, body) 
+        server_response <- http_request$execute()
+
+        httpParser <- HttpParser()
+        collection <- httpParser$parseCollectionGet(server_response)
+
+        if(!is.null(collection$errors))
+            stop(collection$errors)       
+
+        class(collection) <- "ArvadosCollection"
+
+        return(collection)
+    }
+)
index 96f0a83f2132fd8682f1eb03dfbb2b5db6a5ea0c..041d64d825fe9e842b87c2d97e5e353b04c2238b 100644 (file)
@@ -10,6 +10,7 @@ HttpRequest <- setRefClass(
         server_relative_url = "character",
         auth_token          = "character",
         allowed_methods     = "list",
+        request_body        = "ANY",
         query_filters       = "ANY",
         response_limit      = "ANY",
         query_offset        = "ANY"
@@ -20,6 +21,7 @@ HttpRequest <- setRefClass(
                               token,
                               base_url,
                               relative_url,
+                              body = NULL,
                               filters = NULL,
                               limit = 100,
                               offset = 0) 
@@ -28,6 +30,7 @@ HttpRequest <- setRefClass(
             auth_token          <<- token
             server_base_url     <<- base_url
             server_relative_url <<- relative_url
+            request_body        <<- body
             query_filters       <<- filters
             response_limit      <<- limit
             query_offset        <<- offset
@@ -35,6 +38,7 @@ HttpRequest <- setRefClass(
 
         execute = function() 
         {
+            #Todo(Fudo): Get rid of the switch and make this module more general.
             http_method <- switch(send_method,
                                   "GET"    = .self$getRequest,
                                   "POST"   = .self$postRequest,
@@ -57,20 +61,27 @@ HttpRequest <- setRefClass(
         #Todo(Fudo): Try to make this more generic
         postRequest = function() 
         {
-            #Todo(Fudo): Implement this later on.
-            print("POST method")
+            url <- paste0(server_base_url, server_relative_url)
+            requestHeaders <- httr::add_headers("Authorization" = .self$getAuthHeader(),
+                                                "Content-Type"  = "application/json")
+            response <- POST(url, body = request_body, config = requestHeaders)
         },
 
         putRequest = function() 
         {
-            #Todo(Fudo): Implement this later on.
-            print("PUT method")
+            url <- paste0(server_base_url, server_relative_url)
+            requestHeaders <- httr::add_headers("Authorization" = .self$getAuthHeader(),
+                                                "Content-Type"  = "application/json")
+
+            response <- PUT(url, body = request_body, config = requestHeaders)
         },
 
         deleteRequest = function() 
         {
-            #Todo(Fudo): Implement this later on.
-            print("DELETE method")
+            url <- paste0(server_base_url, server_relative_url)
+            requestHeaders <- httr::add_headers("Authorization" = .self$getAuthHeader(),
+                                                "Content-Type"  = "application/json")
+            response <- DELETE(url, config = requestHeaders)
         },
 
         pathcRequest = function() 
index 2cc6dd17b534bf1a9179fecaf9aa0f85ffdb99be..315f8511b81a746a8a4ad3300b286dbc2eb63024 100644 (file)
@@ -11,9 +11,12 @@ All Arvados logic is inside this class
 \section{Fields}{
 
 \describe{
-\item{\code{token}}{represents user authentification token.}
+\item{\code{token}}{Token represents user authentification token.}
 
-\item{\code{host}}{represents server name we wish to connect to.}
+\item{\code{host}}{Host represents server name we wish to connect to.}
 }}
 
 
+\examples{
+arv = Arvados("token", "host_name")
+}
diff --git a/sdk/R/man/HttrParser-class.Rd b/sdk/R/man/HttrParser-class.Rd
new file mode 100644 (file)
index 0000000..5a6d1c7
--- /dev/null
@@ -0,0 +1,11 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/HttpParser.R
+\docType{class}
+\name{HttrParser-class}
+\alias{HttrParser-class}
+\alias{HttpParser}
+\title{HttpParser}
+\description{
+HttpParser
+}
+
diff --git a/sdk/R/man/collection_create.Rd b/sdk/R/man/collection_create.Rd
new file mode 100644 (file)
index 0000000..4a0509b
--- /dev/null
@@ -0,0 +1,18 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/Arvados.R
+\name{collection_create}
+\alias{collection_create}
+\title{collection_create}
+\description{
+Create Arvados collection
+}
+\section{Fields}{
+
+\describe{
+\item{\code{body}}{Structure of the collection we want to create.}
+}}
+
+\examples{
+arv = Arvados("token", "host_name")
+arv$collection_create(list(collection = list(name = "myCollection")))
+}
diff --git a/sdk/R/man/collection_delete.Rd b/sdk/R/man/collection_delete.Rd
new file mode 100644 (file)
index 0000000..5c37a9b
--- /dev/null
@@ -0,0 +1,24 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/Arvados.R
+\name{collection_delete}
+\alias{collection_delete}
+\title{collection_delete}
+\description{
+Delete Arvados collection
+
+Delete Arvados collection
+}
+\section{Fields}{
+
+\describe{
+\item{\code{uuid}}{UUID of the collection we want to delete.}
+
+\item{\code{uuid}}{UUID of the collection we want to delete.}
+}}
+
+\examples{
+arv = Arvados("token", "host_name")
+arv$collection_delete(uuid = "aaaaa-bbbbb-ccccccccccccccc")
+arv = Arvados("token", "host_name")
+arv$collection_delete(uuid = "aaaaa-bbbbb-ccccccccccccccc")
+}
index fac67e49e20baac2699024703a3aa3365588fed7..e29170bd19da08d621f4a0bcd7e7c7f8d4784aeb 100644 (file)
@@ -12,3 +12,7 @@ Get Arvados collection
 \item{\code{uuid}}{UUID of the given collection}
 }}
 
+\examples{
+arv = Arvados("token", "host_name")
+arv$collection_get("uuid")
+}
diff --git a/sdk/R/man/collection_list.Rd b/sdk/R/man/collection_list.Rd
new file mode 100644 (file)
index 0000000..a1a73d7
--- /dev/null
@@ -0,0 +1,22 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/Arvados.R
+\name{collection_list}
+\alias{collection_list}
+\title{collection_list}
+\description{
+Retreive list of collections based on provided filter.
+}
+\section{Fields}{
+
+\describe{
+\item{\code{filters}}{List of filters we want to use to retreive list of collections.}
+
+\item{\code{limit}}{Limits the number of result returned by server.}
+
+\item{\code{offset}}{Offset from beginning of the result set.}
+}}
+
+\examples{
+arv = Arvados("token", "host_name")
+arv$collection_list(list("uuid", "=" "aaaaa-bbbbb-ccccccccccccccc"))
+}