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 new file mode 100644 index 00000000..5996b4b4 --- /dev/null +++ b/R/execution-envs.R @@ -0,0 +1,70 @@ +#' 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"))] + } + ) +) + +#' @export +`[[.ExecutionEnv` <- function(x, name) { + data <- get("data", envir = x) + if (name %in% names(data)) { + return(data[[name]]) + } + get(name, envir = x) +} + +#' @export +`$.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(connect, env)) + } + return(envs) +} 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{