and folders in a collection.
Arvados-DCO-1.1-Signed-off-by: Fuad Muhic <fmuhic@capeannenterprises.com>
Imports:
httr,
stringr,
- jsonlite
+ jsonlite,
+ curl,
+ XML
source("./R/HttpRequest.R")
source("./R/HttpParser.R")
+source("./R/custom_classes.R")
#' Arvados SDK Object
#'
"Arvados",
fields = list(
- token = "character",
- host = "character"
+ token = "ANY",
+ host = "ANY"
),
methods = list(
- initialize = function(auth_token, host_name)
+ initialize = function(auth_token = NULL, host_name = NULL)
{
version <- "v1"
- #Todo(Fudo): Validate token
+ #Todo(Fudo): Set environment variables
token <<- auth_token
host <<- paste0("https://", host_name, "/arvados/", version, "/")
}
--- /dev/null
+source("./R/Arvados.R")
+source("./R/HttpParser.R")
+
+#' Collection Object
+#'
+#' @details
+#' Todo: Update description
+#' Collection
+#'
+#' @param uuid Object ID
+#' @param etag Object version
+#' @param owner_uuid No description
+#' @param created_at No description
+#' @param modified_by_client_uuid No description
+#' @param modified_by_user_uuid No description
+#' @param modified_at No description
+#' @param portable_data_hash No description
+#' @param replication_desired No description
+#' @param replication_confirmed_at No description
+#' @param replication_confirmed No description
+#' @param updated_at No description
+#' @param manifest_text No description
+#' @param name No description
+#' @param description No description
+#' @param properties No description
+#' @param delete_at No description
+#' @param file_names No description
+#' @param trash_at No description
+#' @param is_trashed No description
+#'
+#' @export
+Collection <- setRefClass(
+
+ "Collection",
+
+ #NOTE(Fudo): Fix types!
+ fields = list(uuid = "ANY",
+ items = "ANY",
+ etag = "ANY",
+ owner_uuid = "ANY",
+ created_at = "ANY",
+ modified_by_client_uuid = "ANY",
+ modified_by_user_uuid = "ANY",
+ modified_at = "ANY",
+ portable_data_hash = "ANY",
+ replication_desired = "ANY",
+ replication_confirmed_at = "ANY",
+ replication_confirmed = "ANY",
+ updated_at = "ANY",
+ manifest_text = "ANY",
+ name = "ANY",
+ description = "ANY",
+ properties = "ANY",
+ delete_at = "ANY",
+ file_names = "ANY",
+ trash_at = "ANY",
+ is_trashed = "ANY",
+ arvados_api = "Arvados"
+ ),
+
+ methods = list(
+
+ initialize = function(api, uuid)
+ {
+ arvados_api <<- api
+ result <- arvados_api$collection_get(uuid)
+
+ uuid <<- result$uuid
+ etag <<- result$etag
+ owner_uuid <<- result$owner_uuid
+ created_at <<- result$created_at
+ modified_by_client_uuid <<- result$modified_by_client_uuid
+ modified_by_user_uuid <<- result$modified_by_user_uuid
+ modified_at <<- result$modified_at
+ portable_data_hash <<- result$portable_data_hash
+ replication_desired <<- result$replication_desired
+ replication_confirmed_at <<- result$replication_confirmed_at
+ replication_confirmed <<- result$replication_confirmed
+ updated_at <<- result$updated_at
+ manifest_text <<- result$manifest_text
+ name <<- result$name
+ description <<- result$description
+ properties <<- result$properties
+ delete_at <<- result$delete_at
+ file_names <<- result$file_names
+ trash_at <<- result$trash_at
+ is_trashed <<- result$is_trashed
+
+ items <<- getCollectionContent()
+ },
+
+ getCollectionContent = function()
+ {
+ #IMPORTANT(Fudo): This url is hardcoded for now. Fix it later.
+ uri <- URLencode("https://collections.4xphq.arvadosapi.com/c=4xphq-4zz18-9d5b0qm4fgijeyi/_/")
+
+ # fetch directory listing via curl and parse XML response
+ h <- curl::new_handle()
+ curl::handle_setopt(h, customrequest = "PROPFIND")
+
+ #IMPORTANT(Fudo): Token is hardcoded as well. Write it properly.
+ curl::handle_setheaders(h, "Authorization" = paste("OAuth2 4invqy35tf70t7hmvdc83ges8ug9cklhgqq1l8gj2cjn18teuq"))
+ response <- curl::curl_fetch_memory(uri, h)
+
+ HttpParser()$parseWebDAVResponse(response, uri)
+ }
+ )
+)
parsed_response <- httr::content(server_response, as = "parsed", type = "application/json")
#Todo(Fudo): Create new Collection object and populate it
+ },
+
+ parseWebDAVResponse = function(response, uri)
+ {
+ #Todo(Fudo): Move this to HttpParser.
+ text <- rawToChar(response$content)
+ doc <- XML::xmlParse(text, asText=TRUE)
+
+ # calculate relative paths
+ base <- paste(paste("/", strsplit(uri, "/")[[1]][-1:-3], sep="", collapse=""), "/", sep="")
+ result <- unlist(
+ XML::xpathApply(doc, "//D:response/D:href", function(node) {
+ sub(base, "", URLdecode(xmlValue(node)), fixed=TRUE)
+ })
+ )
+ result[result != ""]
}
+
)
)
-#' Collection Object
-#'
-#' @details
-#' Todo: Update description
-#' Collection
-#'
-#' @param uuid Object ID
-#' @param etag Object version
-#' @param owner_uuid No description
-#' @param created_at No description
-#' @param modified_by_client_uuid No description
-#' @param modified_by_user_uuid No description
-#' @param modified_at No description
-#' @param portable_data_hash No description
-#' @param replication_desired No description
-#' @param replication_confirmed_at No description
-#' @param replication_confirmed No description
-#' @param updated_at No description
-#' @param manifest_text No description
-#' @param name No description
-#' @param description No description
-#' @param properties No description
-#' @param delete_at No description
-#' @param file_names No description
-#' @param trash_at No description
-#' @param is_trashed No description
-#'
-#' @return Collection object
-#'
-#' @family Collection functions
-#' @export
-Collection <- function(uuid = NULL,
- etag = NULL,
- owner_uuid = NULL,
- created_at = NULL,
- modified_by_client_uuid = NULL,
- modified_by_user_uuid = NULL,
- modified_at = NULL,
- portable_data_hash = NULL,
- replication_desired = NULL,
- replication_confirmed_at = NULL,
- replication_confirmed = NULL,
- updated_at = NULL,
- manifest_text = NULL,
- name = NULL,
- description = NULL,
- properties = NULL,
- delete_at = NULL,
- file_names = NULL,
- trash_at = NULL,
- is_trashed = NULL)
-{
- structure(list(uuid = uuid,
- etag = etag,
- owner_uuid = owner_uuid,
- created_at = created_at,
- modified_by_client_uuid = modified_by_client_uuid,
- modified_by_user_uuid = modified_by_user_uuid,
- modified_at = modified_at,
- portable_data_hash = portable_data_hash,
- replication_desired = replication_desired,
- replication_confirmed_at = replication_confirmed_at,
- replication_confirmed = replication_confirmed,
- updated_at = updated_at,
- manifest_text = manifest_text,
- name = name,
- description = description,
- properties = properties,
- delete_at = delete_at,
- file_names = file_names,
- trash_at = trash_at,
- is_trashed = is_trashed),
- class = "ArvadosCollection")
-}