Skip to content

Commit

Permalink
update to http api 0.4.0
Browse files Browse the repository at this point in the history
  • Loading branch information
MartinSchobben committed Sep 18, 2024
1 parent defa2ca commit b8ba16f
Show file tree
Hide file tree
Showing 14 changed files with 151 additions and 123 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ docs
inst/doc
dev
!dev/Makefile
!dev/extract_irods_services_yaml.R
*.irods
/doc/
/Meta/
Expand Down
3 changes: 2 additions & 1 deletion DESCRIPTION
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,8 @@ Imports:
stats,
testthat (>= 3.0.0),
utils,
withr
withr,
yaml
Suggests:
httptest2,
kableExtra,
Expand Down
25 changes: 25 additions & 0 deletions R/docker-yaml.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
get_docker_compose_path <- function() {
system.file("irods_demo/docker-compose.yml", package = "rirods")
}

get_docker_yaml <- function() {
docker_compose_file <- yaml::read_yaml(get_docker_compose_path(), handlers = list(
# make sure that sequences of size one are read as list
# (defaults to vector of length one)
seq = function(x) {
x <- as.list(x)
x
}
))
}

is_irods_service_in_yaml <- function(services, docker_compose_file) {
docker_compose_service_names <- names(docker_compose_file[["services"]])
irods_services_pattern <- paste0(services, collapse = "|")
grepl(irods_services_pattern, docker_compose_service_names)
}

extract_irods_services_names <- function(services) {
docker_compose_file <- get_docker_yaml()
names(docker_compose_file[["services"]])[is_irods_service_in_yaml(services, docker_compose_file)]
}
20 changes: 8 additions & 12 deletions R/irods-demo.R
Original file line number Diff line number Diff line change
Expand Up @@ -118,17 +118,15 @@ stop_irods_demo <- function(verbose = TRUE) {
#' @examples
#' is_irods_demo_running()
is_irods_demo_running <- function(...) {
# first check if Docker exist
# first check if Docker exists
if (!check_docker(FALSE)) {
return(FALSE)
}
# then check if images exist
# then check if images exists
if (!check_irods_images()) {
return(FALSE)
}
# check for client-icommand is not required (only needed for demo itself)
ref <- irods_containers_ref()
ref <- ref[ref != "irods-demo-irods-client-icommands-1"]
irods_containers_state <-
vapply(ref, is_irods_demo_running_, integer(1))

Expand Down Expand Up @@ -163,9 +161,9 @@ remove_docker_images <- function() {

start_irods <- function(verbose, recreate = TRUE) {
if (isTRUE(recreate)) {
cmd <- " ; docker compose up -d --force-recreate nginx-reverse-proxy irods-client-http-api irods-client-icommands"
cmd <- " ; docker compose up -d --force-recreate "
} else {
cmd <- " ; docker compose up -d nginx-reverse-proxy irods-client-http-api irods-client-icommands"
cmd <- " ; docker compose up -d "
}
system(
paste0("cd ", path_to_demo(), cmd),
Expand Down Expand Up @@ -219,6 +217,7 @@ is_http_server_running_correct <- function(user, pass, host, lpath) {
is_irods_server_running_correct <- function() {
system2(
system.file(package = "rirods", "shell_scripts", "dry-run-irods-icommands.sh"),
system.file("irods_demo", package = "rirods"),
stdout = FALSE,
stderr = FALSE
) == 0
Expand Down Expand Up @@ -262,12 +261,9 @@ check_docker <- function(verbose = TRUE) {
!(Sys.which("bash") == "" || Sys.which("docker") == "" || docker_version == "")
}

irods_containers_ref <- function() {
irods_demo_yml <- system.file("irods_demo", "docker-compose.yml", package = "rirods")
irods_demo_file <- readLines(irods_demo_yml)
irods_images_ref <- grep("^\\s{4}[[:graph:]]*?:$", irods_demo_file)
irods_images <- irods_demo_file[irods_images_ref]
paste0("irods-demo-", trimws(gsub( ":$", "", irods_images)), "-1")
irods_containers_ref <- function(services = c("nginx", "http-api", "icommands", "catalog")) {
docker_compose_service_names = extract_irods_services_names(services)
paste0("irods-demo-", docker_compose_service_names, "-1")
}

irods_images <- c(
Expand Down
2 changes: 1 addition & 1 deletion R/zzz.R
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@

.onLoad <- function(libname, pkgname) {
ns <- topenv()
ns$.irods_host <- "http://localhost:9001/irods-http-api/0.2.0"
ns$.irods_host <- "http://localhost:9001/irods-http-api/0.4.0"
}
2 changes: 1 addition & 1 deletion README.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ substitute(create_irods(x), list(x = rirods:::.irods_host))
```

```{r project, eval=is_irods_demo_running(), echo=FALSE}
eval(substitute(create_irods(x), list(x = rirods:::.irods_host)))
eval(substitute(create_irods(x), list(x = URLencode(rirods:::.irods_host))))
```

### Authentication
Expand Down
43 changes: 2 additions & 41 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ Launch a local demonstration iRODS service (including the HTTP API):
use_irods_demo("alice", "passWORD")

This will result in the demonstration HTTP API running at
<http://localhost:9001/irods-http-api/0.2.0>.
<http://localhost:9001/irods-http-api/0.4.0>.

These Docker containers are designed to easily stand up a
**DEMONSTRATION** of the iRODS server. It is intended for education and
Expand All @@ -49,7 +49,7 @@ To connect to the HTTP API endpoint of your choice, load `rirods`,
connect with `create_irods()`, and authenticate with your iRODS
credentials:

create_irods("http://localhost:9001/irods-http-api/0.2.0")
create_irods("http://localhost:9001/irods-http-api/0.4.0")

### Authentication

Expand All @@ -70,7 +70,6 @@ session to an iRODS collection. For this, use the `isaveRDS()` command:

# check where we are in the iRODS namespace
ipwd()
#> [1] "/tempZone/home/alice"

# store data in iRODS
isaveRDS(foo, "foo.rds")
Expand All @@ -89,12 +88,6 @@ describes the data object “foo”:

# check if file is stored with associated metadata
ils(metadata = TRUE)
#>
#> ==========
#> iRODS Zone
#> ==========
#> logical_path attribute value units
#> /tempZone/home/alice/foo.rds foo bar baz

For more on using metadata, check out `vignette("metadata")`.

Expand All @@ -105,10 +98,6 @@ current R session, she would use `ireadRDS()`:

# retrieve in native R format
ireadRDS("foo.rds")
#> x y
#> 1 1 x
#> 2 8 y
#> 3 9 z

### Other file formats

Expand All @@ -126,34 +115,13 @@ a file type that can be accessed by other programs. For this, use the

# check whether it is stored
ils()
#>
#> ==========
#> iRODS Zone
#> ==========
#> logical_path
#> /tempZone/home/alice/foo.csv
#> /tempZone/home/alice/foo.rds

Later on somebody else might want to download this file again and store
it locally:

# retrieve it again later
iget("foo.csv", "foo.csv")
read_csv("foo.csv")
#> Rows: 3 Columns: 2
#> ── Column specification ────────────────────────────────────────────────────────
#> Delimiter: ","
#> chr (1): y
#> dbl (1): x
#>
#> ℹ Use `spec()` to retrieve the full column specification for this data.
#> ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
#> # A tibble: 3 × 2
#> x y
#> <dbl> <chr>
#> 1 1 x
#> 2 8 y
#> 3 9 z

### Query

Expand All @@ -163,15 +131,9 @@ future projects. Objects can be searched with General Queries and

# look for objects in the home collection with a wildcard `%`
iquery("SELECT COLL_NAME, DATA_NAME WHERE COLL_NAME LIKE '/tempZone/home/%'")
#> COLL_NAME DATA_NAME
#> 1 /tempZone/home/alice foo.csv
#> 2 /tempZone/home/alice foo.rds

# or for data objects with a name that starts with "foo"
iquery("SELECT COLL_NAME, DATA_NAME WHERE DATA_NAME LIKE 'foo%'")
#> COLL_NAME DATA_NAME
#> 1 /tempZone/home/alice foo.csv
#> 2 /tempZone/home/alice foo.rds

For more on querying, check out `vignette("metadata")`.

Expand All @@ -185,7 +147,6 @@ Finally, we can clean up Alice’s home collection:

# check if objects are removed
ils()
#> This collection does not contain any objects or collections.

# close the server
stop_irods_demo()
Expand Down
20 changes: 10 additions & 10 deletions dev/Makefile
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
# prepare for CRAN by removing unneeded irods_demo bagage
.ONESHELL:
SHELL = /bin/bash
PATH_MODULES := ../inst/irods_demo
DOCKER_MODULES := $(addprefix $(PATH_MODULES)/,irods_client_nfsrods irods_client_zone_management_tool metalnx-db metalnx minio-data)
PATH_MODULES := ../inst/irods_demo/.
IRODS_MODULES := nginx http icommands catalog
SPACE = $(eval) $(eval)
DOCKER_MODULES = $(subst $(SPACE),\|,$(IRODS_MODULES))
DOCKER_MODULES_REGEX = ".*\($(DOCKER_MODULES)\).*"

all: update remove clean
.PHONY: update clean

all: update clean

# update modules
update:
git submodule sync --recursive
git submodule update --init --force --recursive --remote
# delete unnecessary docker modules
remove:
rm -rf $(DOCKER_MODULES)
# remove lines docker-compose
clean:
head -n 65 '$(PATH_MODULES)/docker-compose.yml' > temp.yml
mv temp.yml '$(PATH_MODULES)/docker-compose.yml'
$(shell find $(PATH_MODULES) -type d ! -regex $(DOCKER_MODULES_REGEX) -exec rm -rf {} +)
Rscript extract_irods_services_yaml.R $(DOCKER_MODULES)
15 changes: 15 additions & 0 deletions dev/extract_irods_services_yaml.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#!/usr/bin/env Rscript --vanilla

args <- commandArgs(trailingOnly = TRUE)

devtools::load_all()

extract_irods_services <- function(services = args[1]) {
new_docker_compose_file <- docker_compose_file <- get_docker_yaml()
grep_services <- is_irods_service_in_yaml(services, docker_compose_file)
new_docker_compose_file[["services"]] <- docker_compose_file[["services"]][grep_services]
yaml::write_yaml(new_docker_compose_file, get_docker_compose_path())
invisible(NULL)
}

extract_irods_services()
3 changes: 1 addition & 2 deletions inst/shell_scripts/dry-run-irods-icommands.sh
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
#!/bin/sh

DIR="$(dirname "$(realpath "$0")")"
DIR=$(realpath $1)

cd $DIR
cd ../irods_demo

docker exec irods-demo-irods-client-icommands-1 ils
Loading

0 comments on commit b8ba16f

Please sign in to comment.