From a35817cf5ec2f928f62deaadca3c1c97f9e1cd51 Mon Sep 17 00:00:00 2001 From: Ian Mathews Date: Tue, 3 Dec 2024 19:20:32 -0800 Subject: [PATCH] refactor: add $workflow methods --- DESCRIPTION | 4 ++-- R/Notebook.R | 6 ++--- R/Query.R | 10 ++++---- R/Table.R | 12 +++++----- R/Upload.R | 2 +- R/User.R | 23 ++++++++++++++---- R/{Project.R => Workflow.R} | 16 ++++++------- R/index.R | 47 ++++++++++++++++++++++++++----------- 8 files changed, 76 insertions(+), 44 deletions(-) rename R/{Project.R => Workflow.R} (78%) diff --git a/DESCRIPTION b/DESCRIPTION index 786425c..f9ff916 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: redivis Type: Package Title: R interface for Redivis -Version: 0.7.10 +Version: 0.8.0 Author: Redivis Inc. Maintainer: Redivis Description: Supports working with Redivis API through R. @@ -38,7 +38,7 @@ Collate: 'Export.R' 'Variable.R' 'User.R' - 'Project.R' + 'Workflow.R' 'Table.R' 'Organization.R' 'Dataset.R' diff --git a/R/Notebook.R b/R/Notebook.R index 6faf97a..e8ddcaa 100644 --- a/R/Notebook.R +++ b/R/Notebook.R @@ -82,9 +82,9 @@ Notebook <- setRefClass("Notebook", base::file.remove(temp_file_path) - user_name <- unlist(strsplit(Sys.getenv("REDIVIS_DEFAULT_PROJECT"), "[.]"))[1] - project_name <- unlist(strsplit(Sys.getenv("REDIVIS_DEFAULT_PROJECT"), "[.]"))[2] - table <- User$new(name=user_name)$project(name=project_name)$table(name=res$name) + user_name <- unlist(strsplit(Sys.getenv("REDIVIS_DEFAULT_WORKFLOW"), "[.]"))[1] + workflow_name <- unlist(strsplit(Sys.getenv("REDIVIS_DEFAULT_WORKFLOW"), "[.]"))[2] + table <- User$new(name=user_name)$workflow(name=workflow_name)$table(name=res$name) table$properties <- res diff --git a/R/Query.R b/R/Query.R index 8afebff..bd8a106 100644 --- a/R/Query.R +++ b/R/Query.R @@ -1,15 +1,15 @@ -#' @include Dataset.R Project.R api_request.R +#' @include Dataset.R Workflow.R api_request.R Query <- setRefClass("Query", - fields = list(query="character", default_dataset="character", default_project="character", properties="list"), + fields = list(query="character", default_dataset="character", default_workflow="character", properties="list"), methods = list( show = function(){ print(str_interp("")) }, - initialize = function(query, default_dataset=NULL, default_project=NULL){ + initialize = function(query, default_dataset=NULL, default_workflow=NULL){ payload <- list(query=query) - if (!is.null(default_project) && default_project != ""){ - payload$defaultProject <- default_project + if (!is.null(default_workflow) && default_workflow != ""){ + payload$defaultWorkflow <- default_workflow } if (!is.null(default_dataset) && default_dataset != "" ){ payload$defaultDataset <- default_dataset diff --git a/R/Table.R b/R/Table.R index 092a9c0..fbf1a1f 100644 --- a/R/Table.R +++ b/R/Table.R @@ -1,22 +1,22 @@ -#' @include Dataset.R Project.R Variable.R Export.R util.R api_request.R +#' @include Dataset.R Workflow.R Variable.R Export.R util.R api_request.R Table <- setRefClass("Table", - fields = list(name="character", dataset="ANY", project="ANY", properties="list", qualified_reference="character", scoped_reference="character", uri="character"), + fields = list(name="character", dataset="ANY", workflow="ANY", properties="list", qualified_reference="character", scoped_reference="character", uri="character"), methods = list( - initialize = function(..., name="", dataset=NULL, project=NULL, properties=list()){ + initialize = function(..., name="", dataset=NULL, workflow=NULL, properties=list()){ parent_reference <- "" if (!is.null(dataset)) { parent_reference <- str_interp("${dataset$qualified_reference}.") - } else if (!is.null(project)){ - parent_reference <- str_interp("${project$qualified_reference}.") + } else if (!is.null(workflow)){ + parent_reference <- str_interp("${workflow$qualified_reference}.") } scoped_reference_val <- if (length(properties$scopedReference)) properties$scopedReference else name qualified_reference_val <- if (length(properties$qualifiedReference)) properties$qualifiedReference else str_interp("${parent_reference}${name}") callSuper(..., name=name, dataset=dataset, - project=project, + workflow=workflow, qualified_reference=qualified_reference_val, scoped_reference=scoped_reference_val, uri=str_interp("/tables/${URLencode(qualified_reference_val)}"), diff --git a/R/Upload.R b/R/Upload.R index 3eff783..f404cf4 100644 --- a/R/Upload.R +++ b/R/Upload.R @@ -133,7 +133,7 @@ Upload <- setRefClass("Upload", ) get_upload_uri = function(upload){ - str_interp("${project$user$name}.${project$name}") + str_interp("${upload$table$uri}.${upload$name}") } MAX_CHUNK_SIZE = 2 ** 23 diff --git a/R/User.R b/R/User.R index 05066c7..ff8fb1b 100644 --- a/R/User.R +++ b/R/User.R @@ -1,4 +1,4 @@ -#' @include Dataset.R Project.R api_request.R +#' @include Dataset.R Workflow.R api_request.R User <- setRefClass("User", fields = list(name="character"), methods = list( @@ -9,8 +9,13 @@ User <- setRefClass("User", Dataset$new(name=name, version=version, user=.self) }, + workflow = function(name) { + Workflow$new(name=name, user=.self) + }, + project = function(name) { - Project$new(name=name, user=.self) + warning("Deprecation warning: Projects have been renamed to Workflows, please update your code to: user$workflow()") + Workflow$new(name=name, user=.self) }, list_datasets = function(max_results=NULL) { @@ -20,10 +25,18 @@ User <- setRefClass("User", }) }, + list_workflows = function(max_results=NULL) { + workflows <- make_paginated_request(path=str_interp("/users/${.self$name}/workflows"), page_size=100, max_results=max_results) + purrr::map(workflows, function(workflow) { + Workflow$new(name=workflow$name, properties=workflow, user=.self) + }) + }, + list_projects = function(max_results=NULL) { - projects <- make_paginated_request(path=str_interp("/users/${.self$name}/projects"), page_size=100, max_results=max_results) - purrr::map(projects, function(project) { - Project$new(name=project$name, properties=project, user=.self) + warning("Deprecation warning: Projects have been renamed to Workflows, please update your code to: user$list_workflows()") + workflows <- make_paginated_request(path=str_interp("/users/${.self$name}/workflows"), page_size=100, max_results=max_results) + purrr::map(workflows, function(workflow) { + Workflow$new(name=workflow$name, properties=workflow, user=.self) }) } ) diff --git a/R/Project.R b/R/Workflow.R similarity index 78% rename from R/Project.R rename to R/Workflow.R index 5ac69d7..eba1ad2 100644 --- a/R/Project.R +++ b/R/Workflow.R @@ -1,5 +1,5 @@ #' @include User.R api_request.R -Project <- setRefClass("Project", +Workflow <- setRefClass("Workflow", fields = list(name="character", user="ANY", uri="character", @@ -17,18 +17,18 @@ Project <- setRefClass("Project", user=user, qualified_reference=qualified_reference_val, scoped_reference=scoped_reference_val, - uri=str_interp("/projects/${URLencode(qualified_reference_val)}"), + uri=str_interp("/workflows/${URLencode(qualified_reference_val)}"), properties=properties ) }, show = function(){ - print(str_interp("")) + print(str_interp("")) }, get = function(){ res <- make_request(path=.self$uri) - update_project_properties(.self, res) + update_workflow_properties(.self, res) .self }, @@ -46,11 +46,11 @@ Project <- setRefClass("Project", }, table = function(name) { - Table(name=name, project=.self) + Table(name=name, workflow=.self) }, query = function(query){ - redivis::query(query, default_project = .self$qualified_reference) + redivis::query(query, default_workflow = .self$qualified_reference) }, list_tables = function(max_results=NULL) { @@ -60,13 +60,13 @@ Project <- setRefClass("Project", max_results=max_results, ) purrr::map(tables, function(table_properties) { - Table$new(name=table_properties$name, project=.self, properties=table_properties) + Table$new(name=table_properties$name, workflow=.self, properties=table_properties) }) } ) ) -update_project_properties <- function(instance, properties){ +update_workflow_properties <- function(instance, properties){ instance$properties = properties instance$qualified_reference = properties$qualifiedReference instance$scoped_reference = properties$scopedReference diff --git a/R/index.R b/R/index.R index 0988532..c15e4b1 100644 --- a/R/index.R +++ b/R/index.R @@ -1,5 +1,6 @@ #' @importFrom stringr str_interp + #' @title query #' #' @description Create a Redivis SQL query @@ -10,12 +11,12 @@ #' @examples #' output_table <- redivis::query(query = 'SELECT 1 + 1 AS two')$to_tibble() #' @export -query <- function(query="", default_project=NULL, default_dataset=NULL) { - if (is.null(default_project) && is.null(default_dataset)){ - default_project <- Sys.getenv("REDIVIS_DEFAULT_PROJECT") +query <- function(query="", default_workflow=NULL, default_dataset=NULL) { + if (is.null(default_workflow) && is.null(default_dataset)){ + default_workflow <- Sys.getenv("REDIVIS_DEFAULT_WORKFLOW") default_dataset <- Sys.getenv("REDIVIS_DEFAULT_DATASET") } - Query$new(query=query, default_project=default_project, default_dataset=default_dataset) + Query$new(query=query, default_workflow=default_workflow, default_dataset=default_dataset) } @@ -27,10 +28,10 @@ query <- function(query="", default_project=NULL, default_dataset=NULL) { #' #' @return class #' @examples -#' redivis::user('my_username')$project('my_project')$table('my_table')$to_tibble(max_results=100) +#' redivis::user('my_username')$workflow('my_workflow')$table('my_table')$to_tibble(max_results=100) #' -#' We can also construct a query scoped to a particular project, removing the need to fully qualify table names -#' redivis::user('my_username')$project('my_project')$query("SELECT * FROM table_1 INNER JOIN table_2 ON id")$to_tibble() +#' We can also construct a query scoped to a particular workflow, removing the need to fully qualify table names +#' redivis::user('my_username')$workflow('my_workflow')$query("SELECT * FROM table_1 INNER JOIN table_2 ON id")$to_tibble() #' @export user <- function(name){ User$new(name=name) @@ -48,7 +49,7 @@ user <- function(name){ #' redivis::organization('demo_organization')$dataset('some_dataset')$table('a_table')$to_tibble(max_results=100) #' #' We can also construct a query scoped to a particular dataset, removing the need to fully qualify table names -#' redivis::user('my_username')$project('my_project')$query("SELECT * FROM table_1 INNER JOIN table_2 ON id")$to_tibble() +#' redivis::user('my_username')$workflow('my_workflow')$query("SELECT * FROM table_1 INNER JOIN table_2 ON id")$to_tibble() #' @export organization <- function(name){ Organization$new(name=name) @@ -56,7 +57,7 @@ organization <- function(name){ #' @title table #' -#' @description Reference a specific table when the REDIVIS_DEFAULT_PROJECT or REDIVIS_DEFAULT_DATASET env variable is set +#' @description Reference a specific table when the REDIVIS_DEFAULT_WORKFLOW or REDIVIS_DEFAULT_DATASET env variable is set #' #' @param name The table's username #' @@ -69,10 +70,10 @@ organization <- function(name){ table <- function(name){ if (Sys.getenv("REDIVIS_NOTEBOOK_JOB_ID") != ""){ Table$new(name=name) - } else if (Sys.getenv("REDIVIS_DEFAULT_PROJECT") != ""){ - user_name <- unlist(strsplit(Sys.getenv("REDIVIS_DEFAULT_PROJECT"), "[.]"))[1] - project_name <- unlist(strsplit(Sys.getenv("REDIVIS_DEFAULT_PROJECT"), "[.]"))[2] - User$new(name=user_name)$project(name=project_name)$table(name=name) + } else if (Sys.getenv("REDIVIS_DEFAULT_WORKFLOW") != ""){ + user_name <- unlist(strsplit(Sys.getenv("REDIVIS_DEFAULT_WORKFLOW"), "[.]"))[1] + workflow_name <- unlist(strsplit(Sys.getenv("REDIVIS_DEFAULT_WORKFLOW"), "[.]"))[2] + User$new(name=user_name)$workflow(name=workflow_name)$table(name=name) }else if (Sys.getenv("REDIVIS_DEFAULT_DATASET") != ""){ user_name <- unlist(strsplit(Sys.getenv("REDIVIS_DEFAULT_DATASET"), "[.]"))[1] @@ -81,7 +82,7 @@ table <- function(name){ User$new(name=user_name)$dataset(name=dataset_name)$table(name=name) } else{ - stop("Cannot reference an unqualified table if the neither the REDIVIS_DEFAULT_PROJECT or REDIVIS_DEFAULT_DATASET environment variables are set.") + stop("Cannot reference an unqualified table if the neither the REDIVIS_DEFAULT_WORKFLOW or REDIVIS_DEFAULT_DATASET environment variables are set.") } } @@ -132,4 +133,22 @@ authenticate <- function(force_reauthentication=FALSE) { } +#' @title redivis +#' +#' @description Redivis wrapper, all primary methods accessible via $ +#' +#' @return list +#' @examples +#' dataset <- redivis$user("username")$dataset("dataset_name") +#' @export +redivis <- list( + "query"=query, + "user"=user, + "organization"=organization, + "file"=file, + "table"=table, + "current_notebook"=current_notebook, + "authenticate"=authenticate +) +