From 2d458e5f8f106cd7ebe048e85f66cd8f6ca48c34 Mon Sep 17 00:00:00 2001 From: Toph Allen Date: Thu, 2 Jan 2025 17:48:52 -0500 Subject: [PATCH 1/3] first pass at execution environment class --- R/execution-envs.R | 68 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 R/execution-envs.R diff --git a/R/execution-envs.R b/R/execution-envs.R new file mode 100644 index 00000000..609c5d6b --- /dev/null +++ b/R/execution-envs.R @@ -0,0 +1,68 @@ +#' Execution Environment +#' +#' An R6 class representing an execution environment. +#' +#' @family R6 classes +#' @export +ExecutionEnv <- R6::R6Class( + "ExecutionEnv", + public = list( + connect = NULL, + data = NULL, + + initialize = function(connect, data) { + validate_R6_class(connect, "Connect") + self$connect <- connect + self$data <- data + }, + + print = function(...) { + cat("Execution Environment \n") + cat(glue::glue(' Title: "{self$title}"\n', .trim = FALSE)) + cat(glue::glue(' Description: "{self$description}"\n', .trim = FALSE)) + cat(glue::glue(' Name: "{self$name}"\n', .trim = FALSE)) + cat(" Runtimes:\n") + print(self$all_runtimes) + } + ), + + active = list( + all_runtimes = function() { + r <- purrr::map_df(.x = self$r$installations, .f = ~ .x) + r$language <- "r" + + python <- purrr::map_df(.x = self$python$installations, .f = ~ .x) + python$language <- "python" + + quarto <- purrr::map_df(.x = self$quarto$installations, .f = ~ .x) + quarto$language <- "quarto" + + tensorflow <- purrr::map_df(.x = self$tensorflow$installations, .f = ~ .x) + tensorflow$language <- "tensorflow" + + out <- rbind(r, python, quarto, tensorflow) + out[c("language", setdiff(names(out), "language"))] + } + ) +) + +`[[.ExecutionEnv` <- function(x, name) { + data <- get("data", envir = x) + if (name %in% names(data)) { + return(data[[name]]) + } + get(name, envir = x) +} + +`$.ExecutionEnv` <- function(x, name) { + x[[name]] +} + +get_execution_envs <- function(connect) { + res <- connect$GET(v1_url("environments")) + envs <- list() + for (env in res) { + envs <- append(envs, ExecutionEnv$new(client, env)) + } + return(envs) +} From 61f333740ad0710304ad53a26eb395ca4c42767f Mon Sep 17 00:00:00 2001 From: Toph Allen Date: Thu, 2 Jan 2025 17:58:45 -0500 Subject: [PATCH 2/3] register methods --- NAMESPACE | 3 ++ R/execution-envs.R | 2 ++ man/Bundle.Rd | 1 + man/Content.Rd | 1 + man/ContentTask.Rd | 1 + man/EnvironmentR6.Rd | 1 + man/ExecutionEnv.Rd | 66 ++++++++++++++++++++++++++++++++++++++++++ man/PositConnect.Rd | 1 + man/Task.Rd | 1 + man/Vanity.Rd | 1 + man/VariantR6.Rd | 1 + man/VariantSchedule.Rd | 1 + man/VariantTask.Rd | 1 + 13 files changed, 81 insertions(+) create mode 100644 man/ExecutionEnv.Rd diff --git a/NAMESPACE b/NAMESPACE index e66befee..35056726 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,7 +1,9 @@ # Generated by roxygen2: do not edit by hand +S3method("$",ExecutionEnv) S3method("$",connect_tag_tree) S3method("[",connect_tag_tree) +S3method("[[",ExecutionEnv) S3method("[[",connect_tag_tree) S3method(api_build,op_base_connect) S3method(api_build,op_head) @@ -20,6 +22,7 @@ export(Connect) export(Content) export(ContentTask) export(Environment) +export(ExecutionEnv) export(Task) export(Vanity) export(Variant) diff --git a/R/execution-envs.R b/R/execution-envs.R index 609c5d6b..7d7cc23c 100644 --- a/R/execution-envs.R +++ b/R/execution-envs.R @@ -46,6 +46,7 @@ ExecutionEnv <- R6::R6Class( ) ) +#' @export `[[.ExecutionEnv` <- function(x, name) { data <- get("data", envir = x) if (name %in% names(data)) { @@ -54,6 +55,7 @@ ExecutionEnv <- R6::R6Class( get(name, envir = x) } +#' @export `$.ExecutionEnv` <- function(x, name) { x[[name]] } diff --git a/man/Bundle.Rd b/man/Bundle.Rd index c6c06044..9104067a 100644 --- a/man/Bundle.Rd +++ b/man/Bundle.Rd @@ -16,6 +16,7 @@ Other R6 classes: \code{\link{Content}}, \code{\link{ContentTask}}, \code{\link{Environment}}, +\code{\link{ExecutionEnv}}, \code{\link{PositConnect}}, \code{\link{Task}}, \code{\link{Vanity}}, diff --git a/man/Content.Rd b/man/Content.Rd index 760514fa..42097f6a 100644 --- a/man/Content.Rd +++ b/man/Content.Rd @@ -16,6 +16,7 @@ Other R6 classes: \code{\link{Bundle}}, \code{\link{ContentTask}}, \code{\link{Environment}}, +\code{\link{ExecutionEnv}}, \code{\link{PositConnect}}, \code{\link{Task}}, \code{\link{Vanity}}, diff --git a/man/ContentTask.Rd b/man/ContentTask.Rd index 3bcf5747..d7b50f9c 100644 --- a/man/ContentTask.Rd +++ b/man/ContentTask.Rd @@ -16,6 +16,7 @@ Other R6 classes: \code{\link{Bundle}}, \code{\link{Content}}, \code{\link{Environment}}, +\code{\link{ExecutionEnv}}, \code{\link{PositConnect}}, \code{\link{Task}}, \code{\link{Vanity}}, diff --git a/man/EnvironmentR6.Rd b/man/EnvironmentR6.Rd index 7e46b7e3..99e99b58 100644 --- a/man/EnvironmentR6.Rd +++ b/man/EnvironmentR6.Rd @@ -16,6 +16,7 @@ Other R6 classes: \code{\link{Bundle}}, \code{\link{Content}}, \code{\link{ContentTask}}, +\code{\link{ExecutionEnv}}, \code{\link{PositConnect}}, \code{\link{Task}}, \code{\link{Vanity}}, diff --git a/man/ExecutionEnv.Rd b/man/ExecutionEnv.Rd new file mode 100644 index 00000000..53ae3102 --- /dev/null +++ b/man/ExecutionEnv.Rd @@ -0,0 +1,66 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/execution-envs.R +\name{ExecutionEnv} +\alias{ExecutionEnv} +\title{Execution Environment} +\description{ +An R6 class representing an execution environment. +} +\seealso{ +Other R6 classes: +\code{\link{Bundle}}, +\code{\link{Content}}, +\code{\link{ContentTask}}, +\code{\link{Environment}}, +\code{\link{PositConnect}}, +\code{\link{Task}}, +\code{\link{Vanity}}, +\code{\link{Variant}}, +\code{\link{VariantSchedule}}, +\code{\link{VariantTask}} +} +\concept{R6 classes} +\section{Methods}{ +\subsection{Public methods}{ +\itemize{ +\item \href{#method-ExecutionEnv-new}{\code{ExecutionEnv$new()}} +\item \href{#method-ExecutionEnv-print}{\code{ExecutionEnv$print()}} +\item \href{#method-ExecutionEnv-clone}{\code{ExecutionEnv$clone()}} +} +} +\if{html}{\out{
}} +\if{html}{\out{}} +\if{latex}{\out{\hypertarget{method-ExecutionEnv-new}{}}} +\subsection{Method \code{new()}}{ +\subsection{Usage}{ +\if{html}{\out{
}}\preformatted{ExecutionEnv$new(connect, data)}\if{html}{\out{
}} +} + +} +\if{html}{\out{
}} +\if{html}{\out{}} +\if{latex}{\out{\hypertarget{method-ExecutionEnv-print}{}}} +\subsection{Method \code{print()}}{ +\subsection{Usage}{ +\if{html}{\out{
}}\preformatted{ExecutionEnv$print(...)}\if{html}{\out{
}} +} + +} +\if{html}{\out{
}} +\if{html}{\out{}} +\if{latex}{\out{\hypertarget{method-ExecutionEnv-clone}{}}} +\subsection{Method \code{clone()}}{ +The objects of this class are cloneable with this method. +\subsection{Usage}{ +\if{html}{\out{
}}\preformatted{ExecutionEnv$clone(deep = FALSE)}\if{html}{\out{
}} +} + +\subsection{Arguments}{ +\if{html}{\out{
}} +\describe{ +\item{\code{deep}}{Whether to make a deep clone.} +} +\if{html}{\out{
}} +} +} +} diff --git a/man/PositConnect.Rd b/man/PositConnect.Rd index 687d9b38..494ffa81 100644 --- a/man/PositConnect.Rd +++ b/man/PositConnect.Rd @@ -32,6 +32,7 @@ Other R6 classes: \code{\link{Content}}, \code{\link{ContentTask}}, \code{\link{Environment}}, +\code{\link{ExecutionEnv}}, \code{\link{Task}}, \code{\link{Vanity}}, \code{\link{Variant}}, diff --git a/man/Task.Rd b/man/Task.Rd index dc1b6a08..cecb56b6 100644 --- a/man/Task.Rd +++ b/man/Task.Rd @@ -17,6 +17,7 @@ Other R6 classes: \code{\link{Content}}, \code{\link{ContentTask}}, \code{\link{Environment}}, +\code{\link{ExecutionEnv}}, \code{\link{PositConnect}}, \code{\link{Vanity}}, \code{\link{Variant}}, diff --git a/man/Vanity.Rd b/man/Vanity.Rd index 21a99e35..a3f096a0 100644 --- a/man/Vanity.Rd +++ b/man/Vanity.Rd @@ -17,6 +17,7 @@ Other R6 classes: \code{\link{Content}}, \code{\link{ContentTask}}, \code{\link{Environment}}, +\code{\link{ExecutionEnv}}, \code{\link{PositConnect}}, \code{\link{Task}}, \code{\link{Variant}}, diff --git a/man/VariantR6.Rd b/man/VariantR6.Rd index d8dd3348..d664d1db 100644 --- a/man/VariantR6.Rd +++ b/man/VariantR6.Rd @@ -17,6 +17,7 @@ Other R6 classes: \code{\link{Content}}, \code{\link{ContentTask}}, \code{\link{Environment}}, +\code{\link{ExecutionEnv}}, \code{\link{PositConnect}}, \code{\link{Task}}, \code{\link{Vanity}}, diff --git a/man/VariantSchedule.Rd b/man/VariantSchedule.Rd index 6b688356..52700027 100644 --- a/man/VariantSchedule.Rd +++ b/man/VariantSchedule.Rd @@ -17,6 +17,7 @@ Other R6 classes: \code{\link{Content}}, \code{\link{ContentTask}}, \code{\link{Environment}}, +\code{\link{ExecutionEnv}}, \code{\link{PositConnect}}, \code{\link{Task}}, \code{\link{Vanity}}, diff --git a/man/VariantTask.Rd b/man/VariantTask.Rd index 810ccc68..d3b0da27 100644 --- a/man/VariantTask.Rd +++ b/man/VariantTask.Rd @@ -17,6 +17,7 @@ Other R6 classes: \code{\link{Content}}, \code{\link{ContentTask}}, \code{\link{Environment}}, +\code{\link{ExecutionEnv}}, \code{\link{PositConnect}}, \code{\link{Task}}, \code{\link{Vanity}}, From 08092169ffa2886ff5b7383773e61f4ec65fed6b Mon Sep 17 00:00:00 2001 From: Toph Allen Date: Thu, 2 Jan 2025 18:14:59 -0500 Subject: [PATCH 3/3] fix typo --- R/execution-envs.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/execution-envs.R b/R/execution-envs.R index 7d7cc23c..5996b4b4 100644 --- a/R/execution-envs.R +++ b/R/execution-envs.R @@ -64,7 +64,7 @@ get_execution_envs <- function(connect) { res <- connect$GET(v1_url("environments")) envs <- list() for (env in res) { - envs <- append(envs, ExecutionEnv$new(client, env)) + envs <- append(envs, ExecutionEnv$new(connect, env)) } return(envs) }