diff --git a/DESCRIPTION b/DESCRIPTION
index fbeecd7..6739796 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -1,6 +1,6 @@
Package: enviPathR
Title: Client for the 'enviPath' 'RESTful' API
-Version: 1.0.2
+Version: 1.0.3
Authors@R:
c(person(given = "Giulio", family = "Benedetti",
role = c("aut", "cre", "cph"),
@@ -23,7 +23,7 @@ Imports:
BiocParallel,
httr2,
stats,
- stringr,
+ stringi,
tools
Suggests:
BiocStyle,
@@ -36,8 +36,8 @@ Suggests:
License: Artistic-2.0
Encoding: UTF-8
Roxygen: list(markdown = TRUE)
-RoxygenNote: 8.0.0
-URL: https://envipath.github.io/enviPathR/
+URL: https://github.com/enviPath/enviPathR, https://envipath.github.io/enviPathR
BugReports: https://github.com/enviPath/enviPathR/issues
Config/testthat/edition: 3
VignetteBuilder: knitr
+Config/roxygen2/version: 8.1.1
diff --git a/NAMESPACE b/NAMESPACE
index 803317e..d14a21f 100644
--- a/NAMESPACE
+++ b/NAMESPACE
@@ -7,21 +7,28 @@ export(epLogin)
export(epLogout)
export(epModel)
export(epTypes)
-importFrom(BiocParallel,bplapply)
-importFrom(BiocParallel,bpmapply)
-importFrom(BiocParallel,bpparam)
-importFrom(httr2,req_body_form)
-importFrom(httr2,req_cookie_preserve)
-importFrom(httr2,req_error)
-importFrom(httr2,req_method)
-importFrom(httr2,req_perform)
-importFrom(httr2,req_retry)
-importFrom(httr2,req_throttle)
-importFrom(httr2,req_url_path_append)
-importFrom(httr2,request)
-importFrom(httr2,resp_body_json)
+importFrom(BiocParallel,
+ bplapply,
+ bpmapply,
+ bpparam
+)
+importFrom(httr2,
+ req_body_form,
+ req_cookie_preserve,
+ req_error,
+ req_get_body,
+ req_method,
+ req_perform,
+ req_retry,
+ req_throttle,
+ req_url_path_append,
+ request,
+ resp_body_json,
+ resp_url
+)
importFrom(stats,complete.cases)
-importFrom(stringr,fixed)
-importFrom(stringr,str_remove)
-importFrom(stringr,str_split)
+importFrom(stringi,
+ stri_replace_first_regex,
+ stri_split_fixed
+)
importFrom(tools,R_user_dir)
diff --git a/NEWS b/NEWS
index 4a2ed1f..ff6c4da 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,6 @@
Changes in version 1.0.x
* Submitted to CRAN
+* Included raw API calls in output metadata
Changes in version 0.99.x
* Introduced epTypes, epLogin, epLogout, epList, epLink, epGet and epModel
\ No newline at end of file
diff --git a/R/get.R b/R/get.R
index ca25b0b..167e2d7 100644
--- a/R/get.R
+++ b/R/get.R
@@ -30,7 +30,11 @@
#' not serial. (Default: \code{5})
#'
#' @returns
-#' A list of objects.
+#' A list of retrieved objects.
+#'
+#' @details
+#' For transparency, the performed raw API calls can be accessed with
+#' \code{attr(x, "call")}, where \code{x} is the output of \code{epGet}.
#'
#' @examples
#' \dontshow{
@@ -76,10 +80,15 @@ epGet <- function(type, init = NULL, pkg = NULL, property = NULL,
SIMPLIFY = FALSE,
BPPARAM = BPPARAM
)
+ # Store raw API calls in corresponding attribute
+ attr(out, "call")$url <- vapply(
+ out, attr, character(1L), "call", USE.NAMES = FALSE
+ )
return(out)
}
-#' @importFrom httr2 request req_url_path_append req_cookie_preserve req_throttle resp_body_json
+#' @importFrom httr2 request req_url_path_append req_cookie_preserve
+#' req_throttle resp_url resp_body_json
.ep_get <- function(init, type, pkg, property, rate){
# Prepare get request
req <- request(eP_env$url) |>
@@ -92,5 +101,7 @@ epGet <- function(type, init = NULL, pkg = NULL, property = NULL,
resp <- .ep_perform(req)
# Process response
out <- resp_body_json(resp, simplifyVector = TRUE)
+ # Store raw API call in corresponding attribute
+ attr(out, "call") <- resp_url(resp)
return(out)
}
diff --git a/R/link.R b/R/link.R
index 1e97ff5..1eb0977 100644
--- a/R/link.R
+++ b/R/link.R
@@ -32,6 +32,10 @@
#' @returns
#' A data frame with links between from and to.
#'
+#' @details
+#' For transparency, the performed raw API calls can be accessed with
+#' \code{attr(x, "call")}, where \code{x} is the output of \code{epLink}.
+#'
#' @examples
#' \dontshow{
#' username <- Sys.getenv("EP_USERNAME")
@@ -54,7 +58,7 @@ NULL
#' @export
#' @rdname epLink
#' @importFrom BiocParallel bplapply bpparam
-#' @importFrom stringr str_remove
+#' @importFrom stringi stri_replace_first_regex
#' @importFrom stats complete.cases
epLink <- function(from, to, init = NULL, pkg = NULL, BPPARAM = bpparam(), rate = 5){
# Check from
@@ -97,6 +101,8 @@ epLink <- function(from, to, init = NULL, pkg = NULL, BPPARAM = bpparam(), rate
x = rep(init, lengths(out, use.names = FALSE)),
y = unlist(out, use.names = FALSE)
)
+ # Store raw API calls in corresponding attribute
+ attr(linkmap, "call")$url <- vapply(out, attr, character(1L), "call")
# Set linkmap column names
colnames(linkmap) <- c(from, to)
# Remove missing values
@@ -108,19 +114,21 @@ epLink <- function(from, to, init = NULL, pkg = NULL, BPPARAM = bpparam(), rate
}
# Remove structure identifier for compounds
if( by == "pathway2compound" ){
- linkmap[to] <- str_remove(linkmap[[to]], "/structure/.*")
+ linkmap[to] <- linkmap[[to]] |>
+ stri_replace_first_regex("/structure/.*", "")
}
if( by == "pathway2reaction" ){
rxn_df <- epList("reaction", pkg = pkg)
linkmap[to] <- rxn_df$id[rxn_df$name %in% linkmap[[to]]]
}
# Remove id prefix
- linkmap[to] <- str_remove(linkmap[[to]], ".*/")
+ linkmap[to] <- stri_replace_first_regex(linkmap[[to]], ".*/", "")
return(linkmap)
}
-#' @importFrom httr2 request req_url_path_append req_cookie_preserve req_throttle resp_body_json
+#' @importFrom httr2 request req_url_path_append req_cookie_preserve
+#' req_throttle resp_url resp_body_json
.ep_link <- function(init, from, to, pkg, rate){
# Prepare link request
req <- request(eP_env$url) |>
@@ -137,6 +145,8 @@ epLink <- function(from, to, init = NULL, pkg = NULL, BPPARAM = bpparam(), rate
unlist(use.names = FALSE)
# Simplify list to single object
if( is.null(out) ) out <- NA
+ # Store raw API call in corresponding attribute
+ attr(out, "call") <- resp_url(resp)
return(out)
}
diff --git a/R/list.R b/R/list.R
index 970b678..8bf02da 100644
--- a/R/list.R
+++ b/R/list.R
@@ -15,6 +15,10 @@
#' @returns
#' A data frame with all objects belonging to \code{type} in \code{pkg}.
#'
+#' @details
+#' For transparency, the performed raw API call can be accessed with
+#' \code{attr(x, "call")}, where \code{x} is the output of \code{epList}.
+#'
#' @examples
#' \dontshow{
#' username <- Sys.getenv("EP_USERNAME")
@@ -53,8 +57,8 @@ NULL
#' @export
#' @rdname epList
-#' @importFrom httr2 req_url_path_append req_cookie_preserve resp_body_json
-#' @importFrom stringr str_remove
+#' @importFrom httr2 req_url_path_append req_cookie_preserve resp_url resp_body_json
+#' @importFrom stringi stri_replace_first_regex
epList <- function(type, pkg = NULL){
# Check type
.check_type(type)
@@ -64,36 +68,40 @@ epList <- function(type, pkg = NULL){
if( type == "package" && is_pkg ){
stop("'pkg' cannot be defined when listing packages.", call. = FALSE)
}
-
+ # Initialise request and preserve cookies
req <- request(eP_env$url) |>
req_cookie_preserve(eP_env$cookies)
-
+ # Append package id to call url
if( is_pkg ) req <- req_url_path_append(req, "package", pkg)
-
+ # Append object type to call url
req <- req_url_path_append(req, type)
-
+ # Perform query
resp <- .ep_perform(req)
-
+ # Retrieve result from response
out <- resp_body_json(resp, simplifyVector = TRUE)
# Extract data.frame
df <- out[[1L]]
# Remove id prefix
- df$id <- str_remove(df$id, ".*/")
-
+ df$id <- stri_replace_first_regex(df$id, ".*/", "")
+ # Select relevant variables to keep
to_keep <- c("name", "id")
# Include review status except for type setting
if( type != "setting" ) to_keep <- c(to_keep, "reviewStatus")
-
+ # Add package-specific stats
if( type == "package" ){
-
+ # Retrieve object types
obj.types <- names(df$links[[1L]])
+ # Count objects for each type
obj.counts <- vapply(obj.types, .extract_obj_counts, numeric(nrow(df)), df)
-
+ # Combine object counts into table
df <- cbind(df, obj.counts)
+ # Add description and object counts to relevant variables
to_keep <- c(to_keep, "description", obj.types)
}
# Select relevant columns
df <- df[ , to_keep]
+ # Store raw API call in corresponding attribute
+ attr(df, "call")$url <- resp_url(resp)
return(df)
}
diff --git a/R/model.R b/R/model.R
index 26abda7..d895a7f 100644
--- a/R/model.R
+++ b/R/model.R
@@ -17,6 +17,10 @@
#' A list with two data frames with information on nodes and edges,
#' respectively.
#'
+#' @details
+#' For transparency, the performed raw API call can be accessed with
+#' \code{attr(x, "call")}, where \code{x} is the output of \code{epModel}.
+#'
#' @examples
#' \dontshow{
#' username <- Sys.getenv("EP_USERNAME")
@@ -77,7 +81,8 @@ NULL
#' @export
#' @rdname epModel
-#' @importFrom httr2 request req_method req_url_path_append req_body_form req_cookie_preserve resp_body_json
+#' @importFrom httr2 request req_method req_url_path_append req_body_form
+#' req_cookie_preserve req_get_body resp_url resp_body_json
epModel <- function(smiles, setting = NULL){
# Check smiles
if( !is.character(smiles) || !nzchar(smiles) ){
@@ -99,6 +104,9 @@ epModel <- function(smiles, setting = NULL){
resp <- .ep_perform(req)
# Process response
out <- resp_body_json(resp, simplifyVector = TRUE)
+ # Store raw API call in corresponding attribute
+ attr(out, "call")$url <- resp_url(resp)
+ attr(out, "call")$body <- req_get_body(req)
# Process rule variables
if( is.data.frame(out$edges$rule) ){
out$edges$ruleId <- out$edges$rule$uuid
diff --git a/R/types.R b/R/types.R
index 5caea21..62b450a 100644
--- a/R/types.R
+++ b/R/types.R
@@ -25,12 +25,12 @@ NULL
#' @export
#' @rdname epTypes
-#' @importFrom stringr str_split fixed
+#' @importFrom stringi stri_split_fixed
epTypes <- function(){
# Retrieve links between object types
links <- eP_env$links |>
names() |>
- str_split(fixed("2"), simplify = TRUE) |>
+ stri_split_fixed("2", simplify = TRUE) |>
as.data.frame()
# Give names to link columns
colnames(links) <- c("from", "to")
diff --git a/README.md b/README.md
index 2f8e47d..7b1c643 100644
--- a/README.md
+++ b/README.md
@@ -4,8 +4,8 @@
[](https://github.com/enviPath/enviPathR/pulls)
[](https://CRAN.R-project.org/package=enviPathR)
[](https://github.com/enviPath/enviPathR/actions)
-[](https://cran.r-project.org/package=enviPathR)
[](https://www.codefactor.io/repository/github/enviPath/envipathr)
+[](https://cran.r-project.org/package=enviPathR)
This package provides a client to the enviPath biotransformation database and
pathway prediction system. It accesses enviPath resources through its [legacy
diff --git a/man/epGet.Rd b/man/epGet.Rd
index 307f5c5..1703c7a 100644
--- a/man/epGet.Rd
+++ b/man/epGet.Rd
@@ -39,11 +39,15 @@ requests per second to be sent to the enviPath API when \code{BPPARAM} is
not serial. (Default: \code{5})}
}
\value{
-A list of objects.
+A list of retrieved objects.
}
\description{
epGet returns raw objects from enviPath.
}
+\details{
+For transparency, the performed raw API calls can be accessed with
+\code{attr(x, "call")}, where \code{x} is the output of \code{epGet}.
+}
\examples{
\dontshow{
username <- Sys.getenv("EP_USERNAME")
diff --git a/man/epLink.Rd b/man/epLink.Rd
index 69a93e6..97ed554 100644
--- a/man/epLink.Rd
+++ b/man/epLink.Rd
@@ -37,6 +37,10 @@ A data frame with links between from and to.
\description{
epLink returns mappings between enviPath object types.
}
+\details{
+For transparency, the performed raw API calls can be accessed with
+\code{attr(x, "call")}, where \code{x} is the output of \code{epLink}.
+}
\examples{
\dontshow{
username <- Sys.getenv("EP_USERNAME")
diff --git a/man/epList.Rd b/man/epList.Rd
index 66a7130..c3e593a 100644
--- a/man/epList.Rd
+++ b/man/epList.Rd
@@ -20,6 +20,10 @@ A data frame with all objects belonging to \code{type} in \code{pkg}.
\description{
epList returns a list with info on objects available in enviPath.
}
+\details{
+For transparency, the performed raw API call can be accessed with
+\code{attr(x, "call")}, where \code{x} is the output of \code{epList}.
+}
\examples{
\dontshow{
username <- Sys.getenv("EP_USERNAME")
diff --git a/man/epModel.Rd b/man/epModel.Rd
index 4d86911..c2a7dd1 100644
--- a/man/epModel.Rd
+++ b/man/epModel.Rd
@@ -22,6 +22,10 @@ respectively.
epModel predicts the biotransformation pathway for a compound expressed with
\code{smiles} using the selected model \code{setting}.
}
+\details{
+For transparency, the performed raw API call can be accessed with
+\code{attr(x, "call")}, where \code{x} is the output of \code{epModel}.
+}
\examples{
\dontshow{
username <- Sys.getenv("EP_USERNAME")
diff --git a/pkgdown/_pkgdown.yml b/pkgdown/_pkgdown.yml
index 8a43e28..44ff7d9 100644
--- a/pkgdown/_pkgdown.yml
+++ b/pkgdown/_pkgdown.yml
@@ -1,4 +1,12 @@
+url: https://envipath.github.io/enviPathR
destination: docs
+
+template:
+ bootstrap: 5
+ light-switch: true
+ bslib:
+ navbar-bg: "#142D4A"
+
reference:
- title: Work with enviPath API
- contents:
diff --git a/tests/httptest/get/package_reaction/wrong.R b/tests/httptest/get/package_reaction/wrong.R
index b807eb6..2191fff 100644
--- a/tests/httptest/get/package_reaction/wrong.R
+++ b/tests/httptest/get/package_reaction/wrong.R
@@ -1,12 +1,12 @@
structure(list(method = "GET", url = "https://package_reaction/wrong",
status_code = 404L, headers = structure(list(Server = "nginx/1.24.0 (Ubuntu)",
- Date = "Sat, 24 Oct 2026 03:32:42 GMT", `Content-Type` = "text/html; charset=utf-8",
+ Date = "Fri, 13 Nov 2026 02:48:31 GMT", `Content-Type` = "text/html; charset=utf-8",
`Transfer-Encoding` = "chunked", Connection = "keep-alive",
Vary = "Authorization, Cookie", `X-Frame-Options` = "DENY",
`X-Content-Type-Options` = "nosniff", `Referrer-Policy` = "same-origin",
- `Cross-Origin-Opener-Policy` = "same-origin", `Set-Cookie` = "csrftoken=9u2FC7Dz4uZvd2M57D4NgVQKCxqiSjaO; expires=Sat, 23 Oct 2027 03:32:42 GMT; Max-Age=31449600; Path=/; SameSite=Lax",
+ `Cross-Origin-Opener-Policy` = "same-origin", `Set-Cookie` = "csrftoken=TUPLC8ByY6rJp7zLNJIxlk4OAyW5YNW2; expires=Fri, 12 Nov 2027 02:48:31 GMT; Max-Age=31449600; Path=/; SameSite=Lax",
`Content-Encoding` = "gzip"), class = "httr2_headers"),
- body = charToRaw("\n\n \n
\n enviPath\n \n \n \n\n \n \n\n \n \n\n \n \n \n\n \n \n \n \n \n \n \n \n\n \n \n\n \n \n\n \n\n \n \n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n \n \n \n \n\n \n \n \n \n\n \n \n
\n
\n
\n
\n
\n
Page Not Found
\n
The page you're looking for doesn't exist.
\n
\n
\n\n
\n
\n
404 Error
\n
\n The page or resource you requested could not be found. It may have\n been moved, deleted, or the URL might be incorrect.\n
\n
\n
\n
\n
\n
\n\n\n \n \n
\n \n \n\n \n\n \n \n
\n\n\n \n \n\n \n \n\n \n\n \n \n\n"),
- timing = c(redirect = 0, namelookup = 2.7e-05, connect = 0,
- pretransfer = 0.000101, starttransfer = 0.389223, total = 0.389606
+ body = charToRaw("\n\n \n \n enviPath\n \n \n \n\n \n \n\n \n \n\n \n \n \n\n \n \n \n \n \n \n \n \n\n \n \n\n \n \n\n \n\n \n \n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n \n \n \n \n\n \n \n \n \n\n \n \n
\n
\n
\n
\n
\n
Page Not Found
\n
The page you're looking for doesn't exist.
\n
\n
\n\n
\n
\n
404 Error
\n
\n The page or resource you requested could not be found. It may have\n been moved, deleted, or the URL might be incorrect.\n
\n
\n
\n
\n
\n
\n\n\n \n \n
\n \n \n\n \n\n \n \n
\n\n\n \n \n\n \n \n\n \n\n \n \n\n"),
+ timing = c(redirect = 0, namelookup = 3.4e-05, connect = 0,
+ pretransfer = 0.000406, starttransfer = 0.38394, total = 0.38436
), cache = new.env(parent = emptyenv())), class = "httr2_response")
diff --git a/tests/httptest/link/package_compound/wrong.R b/tests/httptest/link/package_compound/wrong.R
index 83f4554..ba22f90 100644
--- a/tests/httptest/link/package_compound/wrong.R
+++ b/tests/httptest/link/package_compound/wrong.R
@@ -1,12 +1,12 @@
structure(list(method = "GET", url = "https://package_compound/wrong",
status_code = 404L, headers = structure(list(Server = "nginx/1.24.0 (Ubuntu)",
- Date = "Sat, 24 Oct 2026 03:32:43 GMT", `Content-Type` = "text/html; charset=utf-8",
+ Date = "Fri, 13 Nov 2026 02:48:32 GMT", `Content-Type` = "text/html; charset=utf-8",
`Transfer-Encoding` = "chunked", Connection = "keep-alive",
Vary = "Authorization, Cookie", `X-Frame-Options` = "DENY",
`X-Content-Type-Options` = "nosniff", `Referrer-Policy` = "same-origin",
- `Cross-Origin-Opener-Policy` = "same-origin", `Set-Cookie` = "csrftoken=9u2FC7Dz4uZvd2M57D4NgVQKCxqiSjaO; expires=Sat, 23 Oct 2027 03:32:43 GMT; Max-Age=31449600; Path=/; SameSite=Lax",
+ `Cross-Origin-Opener-Policy` = "same-origin", `Set-Cookie` = "csrftoken=TUPLC8ByY6rJp7zLNJIxlk4OAyW5YNW2; expires=Fri, 12 Nov 2027 02:48:32 GMT; Max-Age=31449600; Path=/; SameSite=Lax",
`Content-Encoding` = "gzip"), class = "httr2_headers"),
- body = charToRaw("\n\n \n \n enviPath\n \n \n \n\n \n \n\n \n \n\n \n \n \n\n \n \n \n \n \n \n \n \n\n \n \n\n \n \n\n \n\n \n \n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n \n \n \n \n\n \n \n \n \n\n \n \n
\n
\n
\n
\n
\n
Page Not Found
\n
The page you're looking for doesn't exist.
\n
\n
\n\n
\n
\n
404 Error
\n
\n The page or resource you requested could not be found. It may have\n been moved, deleted, or the URL might be incorrect.\n
\n
\n
\n
\n
\n
\n\n\n \n \n
\n \n \n\n \n\n \n \n
\n\n\n \n \n\n \n \n\n \n\n \n \n\n"),
- timing = c(redirect = 0, namelookup = 4.5e-05, connect = 0,
- pretransfer = 0.000137, starttransfer = 0.409759, total = 0.41017
+ body = charToRaw("\n\n \n \n enviPath\n \n \n \n\n \n \n\n \n \n\n \n \n \n\n \n \n \n \n \n \n \n \n\n \n \n\n \n \n\n \n\n \n \n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n \n \n \n \n\n \n \n \n \n\n \n \n
\n
\n
\n
\n
\n
Page Not Found
\n
The page you're looking for doesn't exist.
\n
\n
\n\n
\n
\n
404 Error
\n
\n The page or resource you requested could not be found. It may have\n been moved, deleted, or the URL might be incorrect.\n
\n
\n
\n
\n
\n
\n\n\n \n \n
\n \n \n\n \n\n \n \n
\n\n\n \n \n\n \n \n\n \n\n \n \n\n"),
+ timing = c(redirect = 0, namelookup = 2.9e-05, connect = 0,
+ pretransfer = 0.000157, starttransfer = 0.302038, total = 0.302402
), cache = new.env(parent = emptyenv())), class = "httr2_response")
diff --git a/tests/httptest/list/package.json b/tests/httptest/list/package.json
index e4422b5..4de312b 100644
--- a/tests/httptest/list/package.json
+++ b/tests/httptest/list/package.json
@@ -1,13 +1,13 @@
{
"package": [
{
- "description": "Package to make Prediction Models publicly available",
- "id": "https://envipath.org/package/134886bb-b52e-4ad6-91d3-a02cecde6d95",
+ "description": "This Package was generated automatically for the batch prediction task.",
+ "id": "https://envipath.org/package/5b594bf6-56a8-4ce5-9a63-5fd4b525756e",
"links": [
{
"Pathways": [
"https://envipath.org/package_pathway",
- 0
+ 1
]
},
{
@@ -19,19 +19,19 @@
{
"Compounds": [
"https://envipath.org/package_compound",
- 0
+ 24
]
},
{
"Reactions": [
"https://envipath.org/package_reaction",
- 0
+ 38
]
},
{
"Relative Reasoning": [
"https://envipath.org/package_relative-reasoning",
- 5
+ 0
]
},
{
@@ -41,33 +41,33 @@
]
}
],
- "name": "Public Prediction Models",
+ "name": "Autogenerated Package for Batch Prediction 2026-09-01 00:04:40.517620",
"primaryGroup": null,
"readers": [
{
- "id": "https://envipath.org/user/fce36893-bdb1-4a6f-87bd-5fd893feca89",
+ "id": "https://envipath.org/user/f3ce2e6a-b8c4-46d2-a6ed-6be4d8ae23fa",
"identifier": "user",
- "name": "admin"
+ "name": "RiboRings"
}
],
"reviewComment": "",
- "reviewStatus": "reviewed",
+ "reviewStatus": "unreviewed",
"writers": [
{
- "id": "https://envipath.org/user/fce36893-bdb1-4a6f-87bd-5fd893feca89",
+ "id": "https://envipath.org/user/f3ce2e6a-b8c4-46d2-a6ed-6be4d8ae23fa",
"identifier": "user",
- "name": "admin"
+ "name": "RiboRings"
}
]
},
{
- "description": "This Package was generated automatically for the batch prediction task.",
- "id": "https://envipath.org/package/5b594bf6-56a8-4ce5-9a63-5fd4b525756e",
+ "description": "This package was generated during registration.",
+ "id": "https://envipath.org/package/aee2524b-79f3-4640-a519-aac543ac05e3",
"links": [
{
"Pathways": [
"https://envipath.org/package_pathway",
- 1
+ 4
]
},
{
@@ -79,13 +79,13 @@
{
"Compounds": [
"https://envipath.org/package_compound",
- 24
+ 33
]
},
{
"Reactions": [
"https://envipath.org/package_reaction",
- 38
+ 66
]
},
{
@@ -101,7 +101,7 @@
]
}
],
- "name": "Autogenerated Package for Batch Prediction 2026-09-01 00:04:40.517620",
+ "name": "RiboRings’ Package",
"primaryGroup": null,
"readers": [
{
@@ -122,7 +122,7 @@
},
{
"description": "This Package was generated automatically for the batch prediction task.",
- "id": "https://envipath.org/package/995230c9-167a-4108-8002-d8fadd242dff",
+ "id": "https://envipath.org/package/7a3bddd7-c1a2-4699-a885-8b9044fd4fe2",
"links": [
{
"Pathways": [
@@ -161,7 +161,7 @@
]
}
],
- "name": "Autogenerated Package for Batch Prediction 2026-09-01 00:04:22.775931",
+ "name": "Autogenerated Package for Batch Prediction 2026-09-01 00:06:57.531194",
"primaryGroup": null,
"readers": [
{
@@ -181,13 +181,13 @@
]
},
{
- "description": "\"EAWAG-SOIL\" package contains pathway information from soil degradation studies, stored in a biotransformation reaction scheme in the object pathway<\/a>. This information is extracted from pesticide registration dossiers (draft assessment reports, DAR) made publically available through the European Food Safety Authority (EFSA<\/a>). The package also contains information on different experimental conditions that are stored in the object scenario<\/a>. Compounds<\/a> in the pathway are associated with a given scenario<\/a> if they have been observed under the specific experimental conditions. If available, a biotransformation half-life (DT50) value is additionally associated with a given compound in the pathway and a specific scenario. More details concerning enviPath conventions that were used to store specific data from DAR, and their description can be found in our wiki<\/a>.",
- "id": "https://envipath.org/package/5882df9c-dae1-4d80-a40e-db4724271456",
+ "description": "string",
+ "id": "https://envipath.org/package/d1898032-350b-438a-a702-63906c7ed76a",
"links": [
{
"Pathways": [
"https://envipath.org/package_pathway",
- 317
+ 0
]
},
{
@@ -199,13 +199,13 @@
{
"Compounds": [
"https://envipath.org/package_compound",
- 2608
+ 0
]
},
{
"Reactions": [
"https://envipath.org/package_reaction",
- 2445
+ 0
]
},
{
@@ -217,37 +217,37 @@
{
"Scenarios": [
"https://envipath.org/package_scenario",
- 4881
+ 0
]
}
],
- "name": "EAWAG-SOIL",
+ "name": "32de3cf4-e3e6-4168-956e-32fa5ddb0ce1",
"primaryGroup": null,
"readers": [
{
- "id": "https://envipath.org/user/fce36893-bdb1-4a6f-87bd-5fd893feca89",
+ "id": "https://envipath.org/user/f3ce2e6a-b8c4-46d2-a6ed-6be4d8ae23fa",
"identifier": "user",
- "name": "admin"
+ "name": "RiboRings"
}
],
"reviewComment": "",
- "reviewStatus": "reviewed",
+ "reviewStatus": "unreviewed",
"writers": [
{
- "id": "https://envipath.org/user/fce36893-bdb1-4a6f-87bd-5fd893feca89",
+ "id": "https://envipath.org/user/f3ce2e6a-b8c4-46d2-a6ed-6be4d8ae23fa",
"identifier": "user",
- "name": "admin"
+ "name": "RiboRings"
}
]
},
{
- "description": "This package was generated during registration.",
- "id": "https://envipath.org/package/aee2524b-79f3-4640-a519-aac543ac05e3",
+ "description": "The \"EAWAG-SEDIMENT\" package contains pathways and kinetic data from biodegradation studies performed in water-sediment systems. This information is extracted from pesticide registration dossiers (draft assessment reports, DAR) made publically available through the European Food Safety Authority (EFSA<\/a>). The package also contains information on different experimental conditions that are stored in the object scenario<\/a>. Compounds<\/a> in the pathway are associated with a given scenario<\/a> if they have been observed under the specific experimental conditions. If available, a total system biotransformation half-life (DT50) value is associated with a given compound in the pathway and a specific scenario, along with dissipation half-lives from the water and the sediment phases.",
+ "id": "https://envipath.org/package/f05e38d8-e9b4-4c3e-b0d8-9ab29966eccf",
"links": [
{
"Pathways": [
"https://envipath.org/package_pathway",
- 4
+ 179
]
},
{
@@ -259,13 +259,13 @@
{
"Compounds": [
"https://envipath.org/package_compound",
- 33
+ 810
]
},
{
"Reactions": [
"https://envipath.org/package_reaction",
- 66
+ 961
]
},
{
@@ -277,37 +277,37 @@
{
"Scenarios": [
"https://envipath.org/package_scenario",
- 0
+ 1622
]
}
],
- "name": "RiboRings’ Package",
+ "name": "EAWAG-SEDIMENT",
"primaryGroup": null,
"readers": [
{
- "id": "https://envipath.org/user/f3ce2e6a-b8c4-46d2-a6ed-6be4d8ae23fa",
+ "id": "https://envipath.org/user/fce36893-bdb1-4a6f-87bd-5fd893feca89",
"identifier": "user",
- "name": "RiboRings"
+ "name": "admin"
}
],
"reviewComment": "",
- "reviewStatus": "unreviewed",
+ "reviewStatus": "reviewed",
"writers": [
{
- "id": "https://envipath.org/user/f3ce2e6a-b8c4-46d2-a6ed-6be4d8ae23fa",
+ "id": "https://envipath.org/user/fce36893-bdb1-4a6f-87bd-5fd893feca89",
"identifier": "user",
- "name": "RiboRings"
+ "name": "admin"
}
]
},
{
- "description": "This Package was generated automatically for the batch prediction task.",
- "id": "https://envipath.org/package/c3c6699a-8c78-4987-af4d-4a041ffc448d",
+ "description": "A collection of literature-reported biotransformation pathways for per- and polyfluorinated alkyl substances (PFASs). Last updated on June 9th 2026.",
+ "id": "https://envipath.org/package/87a49584-d937-482c-9c33-25928dcb02a8",
"links": [
{
"Pathways": [
"https://envipath.org/package_pathway",
- 2
+ 214
]
},
{
@@ -319,13 +319,13 @@
{
"Compounds": [
"https://envipath.org/package_compound",
- 21
+ 590
]
},
{
"Reactions": [
"https://envipath.org/package_reaction",
- 23
+ 915
]
},
{
@@ -337,37 +337,57 @@
{
"Scenarios": [
"https://envipath.org/package_scenario",
- 0
+ 288
]
}
],
- "name": "Autogenerated Package for Batch Prediction 2026-09-01 00:08:26.613909",
+ "name": "enviPath-PFAS",
"primaryGroup": null,
"readers": [
{
- "id": "https://envipath.org/user/f3ce2e6a-b8c4-46d2-a6ed-6be4d8ae23fa",
+ "id": "https://envipath.org/user/159affc8-6988-4cd7-9d09-9dfb56075cd3",
"identifier": "user",
- "name": "RiboRings"
+ "name": "lorsbach"
+ },
+ {
+ "id": "https://envipath.org/user/6971e514-9d36-4598-bf11-ee72562b7779",
+ "identifier": "user",
+ "name": "flurin_jenny"
+ },
+ {
+ "id": "https://envipath.org/user/bbc3390d-a5f9-41e8-843d-7283f698236a",
+ "identifier": "user",
+ "name": "jasmin"
}
],
"reviewComment": "",
- "reviewStatus": "unreviewed",
+ "reviewStatus": "reviewed",
"writers": [
{
- "id": "https://envipath.org/user/f3ce2e6a-b8c4-46d2-a6ed-6be4d8ae23fa",
+ "id": "https://envipath.org/user/159affc8-6988-4cd7-9d09-9dfb56075cd3",
"identifier": "user",
- "name": "RiboRings"
+ "name": "lorsbach"
+ },
+ {
+ "id": "https://envipath.org/user/6971e514-9d36-4598-bf11-ee72562b7779",
+ "identifier": "user",
+ "name": "flurin_jenny"
+ },
+ {
+ "id": "https://envipath.org/user/bbc3390d-a5f9-41e8-843d-7283f698236a",
+ "identifier": "user",
+ "name": "jasmin"
}
]
},
{
- "description": "The EAWAG-SLUDGE<\/a> package contains pathways and kinetic information about microbially mediated transformation processes in biological wastewater treatment. The information was extracted from scientific publications in different journals. The biotransformation reaction schemes are stored as pathways<\/a>. The experimental conditions and additional information (e. g. sludge source) are collected in the scenario<\/a> objects. Any observed transformation products (compounds<\/a>) are linked to their corresponding experimental metadata (scenario<\/a>). Kinetic parameters (rate constants and/or half-lives) including corresponding scenarios are indicated for compounds for which such data is available. More details regarding enviPath conventions can be found in our wiki<\/a>.",
- "id": "https://envipath.org/package/521c547a-fd2a-491c-ad5b-7eaa1577fb65",
+ "description": "Package to make Prediction Models publicly available",
+ "id": "https://envipath.org/package/134886bb-b52e-4ad6-91d3-a02cecde6d95",
"links": [
{
"Pathways": [
"https://envipath.org/package_pathway",
- 183
+ 0
]
},
{
@@ -379,29 +399,29 @@
{
"Compounds": [
"https://envipath.org/package_compound",
- 1067
+ 0
]
},
{
"Reactions": [
"https://envipath.org/package_reaction",
- 494
+ 0
]
},
{
"Relative Reasoning": [
"https://envipath.org/package_relative-reasoning",
- 0
+ 5
]
},
{
"Scenarios": [
"https://envipath.org/package_scenario",
- 85
+ 0
]
}
],
- "name": "EAWAG-SLUDGE",
+ "name": "Public Prediction Models",
"primaryGroup": null,
"readers": [
{
@@ -421,8 +441,8 @@
]
},
{
- "description": "string",
- "id": "https://envipath.org/package/7245f711-51d0-4b1e-b49d-99a9d9744c96",
+ "description": "This Package was generated automatically for the batch prediction task.",
+ "id": "https://envipath.org/package/995230c9-167a-4108-8002-d8fadd242dff",
"links": [
{
"Pathways": [
@@ -461,7 +481,7 @@
]
}
],
- "name": "32de3cf4-e3e6-4168-956e-32fa5ddb0ce1",
+ "name": "Autogenerated Package for Batch Prediction 2026-09-01 00:04:22.775931",
"primaryGroup": null,
"readers": [
{
@@ -481,13 +501,13 @@
]
},
{
- "description": "This Package was generated automatically for the batch prediction task.",
- "id": "https://envipath.org/package/7a3bddd7-c1a2-4699-a885-8b9044fd4fe2",
+ "description": "\"EAWAG-SOIL\" package contains pathway information from soil degradation studies, stored in a biotransformation reaction scheme in the object pathway<\/a>. This information is extracted from pesticide registration dossiers (draft assessment reports, DAR) made publically available through the European Food Safety Authority (EFSA<\/a>). The package also contains information on different experimental conditions that are stored in the object scenario<\/a>. Compounds<\/a> in the pathway are associated with a given scenario<\/a> if they have been observed under the specific experimental conditions. If available, a biotransformation half-life (DT50) value is additionally associated with a given compound in the pathway and a specific scenario. More details concerning enviPath conventions that were used to store specific data from DAR, and their description can be found in our wiki<\/a>.",
+ "id": "https://envipath.org/package/5882df9c-dae1-4d80-a40e-db4724271456",
"links": [
{
"Pathways": [
"https://envipath.org/package_pathway",
- 0
+ 317
]
},
{
@@ -499,13 +519,13 @@
{
"Compounds": [
"https://envipath.org/package_compound",
- 0
+ 2608
]
},
{
"Reactions": [
"https://envipath.org/package_reaction",
- 0
+ 2445
]
},
{
@@ -517,37 +537,37 @@
{
"Scenarios": [
"https://envipath.org/package_scenario",
- 0
+ 4881
]
}
],
- "name": "Autogenerated Package for Batch Prediction 2026-09-01 00:06:57.531194",
+ "name": "EAWAG-SOIL",
"primaryGroup": null,
"readers": [
{
- "id": "https://envipath.org/user/f3ce2e6a-b8c4-46d2-a6ed-6be4d8ae23fa",
+ "id": "https://envipath.org/user/fce36893-bdb1-4a6f-87bd-5fd893feca89",
"identifier": "user",
- "name": "RiboRings"
+ "name": "admin"
}
],
"reviewComment": "",
- "reviewStatus": "unreviewed",
+ "reviewStatus": "reviewed",
"writers": [
{
- "id": "https://envipath.org/user/f3ce2e6a-b8c4-46d2-a6ed-6be4d8ae23fa",
+ "id": "https://envipath.org/user/fce36893-bdb1-4a6f-87bd-5fd893feca89",
"identifier": "user",
- "name": "RiboRings"
+ "name": "admin"
}
]
},
{
- "description": "string",
- "id": "https://envipath.org/package/d1898032-350b-438a-a702-63906c7ed76a",
+ "description": "This Package was generated automatically for the batch prediction task.",
+ "id": "https://envipath.org/package/c3c6699a-8c78-4987-af4d-4a041ffc448d",
"links": [
{
"Pathways": [
"https://envipath.org/package_pathway",
- 0
+ 2
]
},
{
@@ -559,13 +579,13 @@
{
"Compounds": [
"https://envipath.org/package_compound",
- 0
+ 21
]
},
{
"Reactions": [
"https://envipath.org/package_reaction",
- 0
+ 23
]
},
{
@@ -581,7 +601,7 @@
]
}
],
- "name": "32de3cf4-e3e6-4168-956e-32fa5ddb0ce1",
+ "name": "Autogenerated Package for Batch Prediction 2026-09-01 00:08:26.613909",
"primaryGroup": null,
"readers": [
{
@@ -601,13 +621,13 @@
]
},
{
- "description": "The \"EAWAG-SEDIMENT\" package contains pathways and kinetic data from biodegradation studies performed in water-sediment systems. This information is extracted from pesticide registration dossiers (draft assessment reports, DAR) made publically available through the European Food Safety Authority (EFSA<\/a>). The package also contains information on different experimental conditions that are stored in the object scenario<\/a>. Compounds<\/a> in the pathway are associated with a given scenario<\/a> if they have been observed under the specific experimental conditions. If available, a total system biotransformation half-life (DT50) value is associated with a given compound in the pathway and a specific scenario, along with dissipation half-lives from the water and the sediment phases.",
- "id": "https://envipath.org/package/f05e38d8-e9b4-4c3e-b0d8-9ab29966eccf",
+ "description": "The EAWAG-SLUDGE<\/a> package contains pathways and kinetic information about microbially mediated transformation processes in biological wastewater treatment. The information was extracted from scientific publications in different journals. The biotransformation reaction schemes are stored as pathways<\/a>. The experimental conditions and additional information (e. g. sludge source) are collected in the scenario<\/a> objects. Any observed transformation products (compounds<\/a>) are linked to their corresponding experimental metadata (scenario<\/a>). Kinetic parameters (rate constants and/or half-lives) including corresponding scenarios are indicated for compounds for which such data is available. More details regarding enviPath conventions can be found in our wiki<\/a>.",
+ "id": "https://envipath.org/package/521c547a-fd2a-491c-ad5b-7eaa1577fb65",
"links": [
{
"Pathways": [
"https://envipath.org/package_pathway",
- 179
+ 183
]
},
{
@@ -619,13 +639,13 @@
{
"Compounds": [
"https://envipath.org/package_compound",
- 810
+ 1067
]
},
{
"Reactions": [
"https://envipath.org/package_reaction",
- 961
+ 494
]
},
{
@@ -637,11 +657,11 @@
{
"Scenarios": [
"https://envipath.org/package_scenario",
- 1622
+ 85
]
}
],
- "name": "EAWAG-SEDIMENT",
+ "name": "EAWAG-SLUDGE",
"primaryGroup": null,
"readers": [
{
@@ -661,31 +681,31 @@
]
},
{
- "description": "Migration package for pathways, reactions and compounds from the EAWAG-BBD database",
- "id": "https://envipath.org/package/32de3cf4-e3e6-4168-956e-32fa5ddb0ce1",
+ "description": "string",
+ "id": "https://envipath.org/package/7245f711-51d0-4b1e-b49d-99a9d9744c96",
"links": [
{
"Pathways": [
"https://envipath.org/package_pathway",
- 219
+ 0
]
},
{
"Rules": [
"https://envipath.org/package_rule",
- 499
+ 0
]
},
{
"Compounds": [
"https://envipath.org/package_compound",
- 1399
+ 0
]
},
{
"Reactions": [
"https://envipath.org/package_reaction",
- 1480
+ 0
]
},
{
@@ -697,55 +717,55 @@
{
"Scenarios": [
"https://envipath.org/package_scenario",
- 1915
+ 0
]
}
],
- "name": "EAWAG-BBD",
+ "name": "32de3cf4-e3e6-4168-956e-32fa5ddb0ce1",
"primaryGroup": null,
"readers": [
{
- "id": "https://envipath.org/user/fce36893-bdb1-4a6f-87bd-5fd893feca89",
+ "id": "https://envipath.org/user/f3ce2e6a-b8c4-46d2-a6ed-6be4d8ae23fa",
"identifier": "user",
- "name": "admin"
+ "name": "RiboRings"
}
],
"reviewComment": "",
- "reviewStatus": "reviewed",
+ "reviewStatus": "unreviewed",
"writers": [
{
- "id": "https://envipath.org/user/fce36893-bdb1-4a6f-87bd-5fd893feca89",
+ "id": "https://envipath.org/user/f3ce2e6a-b8c4-46d2-a6ed-6be4d8ae23fa",
"identifier": "user",
- "name": "admin"
+ "name": "RiboRings"
}
]
},
{
- "description": "A collection of literature-reported biotransformation pathways for per- and polyfluorinated alkyl substances (PFASs). Last updated on June 9th 2026.",
- "id": "https://envipath.org/package/87a49584-d937-482c-9c33-25928dcb02a8",
+ "description": "Migration package for pathways, reactions and compounds from the EAWAG-BBD database",
+ "id": "https://envipath.org/package/32de3cf4-e3e6-4168-956e-32fa5ddb0ce1",
"links": [
{
"Pathways": [
"https://envipath.org/package_pathway",
- 214
+ 219
]
},
{
"Rules": [
"https://envipath.org/package_rule",
- 0
+ 499
]
},
{
"Compounds": [
"https://envipath.org/package_compound",
- 590
+ 1399
]
},
{
"Reactions": [
"https://envipath.org/package_reaction",
- 915
+ 1480
]
},
{
@@ -757,46 +777,26 @@
{
"Scenarios": [
"https://envipath.org/package_scenario",
- 288
+ 1915
]
}
],
- "name": "enviPath-PFAS",
+ "name": "EAWAG-BBD",
"primaryGroup": null,
"readers": [
{
- "id": "https://envipath.org/user/159affc8-6988-4cd7-9d09-9dfb56075cd3",
- "identifier": "user",
- "name": "lorsbach"
- },
- {
- "id": "https://envipath.org/user/6971e514-9d36-4598-bf11-ee72562b7779",
- "identifier": "user",
- "name": "flurin_jenny"
- },
- {
- "id": "https://envipath.org/user/bbc3390d-a5f9-41e8-843d-7283f698236a",
+ "id": "https://envipath.org/user/fce36893-bdb1-4a6f-87bd-5fd893feca89",
"identifier": "user",
- "name": "jasmin"
+ "name": "admin"
}
],
"reviewComment": "",
"reviewStatus": "reviewed",
"writers": [
{
- "id": "https://envipath.org/user/159affc8-6988-4cd7-9d09-9dfb56075cd3",
- "identifier": "user",
- "name": "lorsbach"
- },
- {
- "id": "https://envipath.org/user/6971e514-9d36-4598-bf11-ee72562b7779",
- "identifier": "user",
- "name": "flurin_jenny"
- },
- {
- "id": "https://envipath.org/user/bbc3390d-a5f9-41e8-843d-7283f698236a",
+ "id": "https://envipath.org/user/fce36893-bdb1-4a6f-87bd-5fd893feca89",
"identifier": "user",
- "name": "jasmin"
+ "name": "admin"
}
]
}
diff --git a/tests/httptest/list/package/wrong/reaction.R b/tests/httptest/list/package/wrong/reaction.R
index 42c95ec..93b9ec8 100644
--- a/tests/httptest/list/package/wrong/reaction.R
+++ b/tests/httptest/list/package/wrong/reaction.R
@@ -1,12 +1,12 @@
structure(list(method = "GET", url = "https://package/wrong/reaction",
status_code = 404L, headers = structure(list(Server = "nginx/1.24.0 (Ubuntu)",
- Date = "Sat, 24 Oct 2026 03:32:44 GMT", `Content-Type` = "text/html; charset=utf-8",
+ Date = "Fri, 13 Nov 2026 02:48:33 GMT", `Content-Type` = "text/html; charset=utf-8",
`Transfer-Encoding` = "chunked", Connection = "keep-alive",
Vary = "Authorization, Cookie", `X-Frame-Options` = "DENY",
`X-Content-Type-Options` = "nosniff", `Referrer-Policy` = "same-origin",
- `Cross-Origin-Opener-Policy` = "same-origin", `Set-Cookie` = "csrftoken=9u2FC7Dz4uZvd2M57D4NgVQKCxqiSjaO; expires=Sat, 23 Oct 2027 03:32:44 GMT; Max-Age=31449600; Path=/; SameSite=Lax",
+ `Cross-Origin-Opener-Policy` = "same-origin", `Set-Cookie` = "csrftoken=TUPLC8ByY6rJp7zLNJIxlk4OAyW5YNW2; expires=Fri, 12 Nov 2027 02:48:33 GMT; Max-Age=31449600; Path=/; SameSite=Lax",
`Content-Encoding` = "gzip"), class = "httr2_headers"),
- body = charToRaw("\n\n \n \n enviPath\n \n \n \n\n \n \n\n \n \n\n \n \n \n\n \n \n \n \n \n \n \n \n\n \n \n\n \n \n\n \n\n \n \n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n \n \n \n \n\n \n \n \n \n\n \n \n
\n
\n
\n
\n
\n
Page Not Found
\n
The page you're looking for doesn't exist.
\n
\n
\n\n
\n
\n
404 Error
\n
\n The page or resource you requested could not be found. It may have\n been moved, deleted, or the URL might be incorrect.\n
\n
\n
\n
\n
\n
\n\n\n \n \n
\n \n \n\n \n\n \n \n
\n\n\n \n \n\n \n \n\n \n\n \n \n\n"),
- timing = c(redirect = 0, namelookup = 3.8e-05, connect = 0,
- pretransfer = 0.000127, starttransfer = 0.415744, total = 0.416422
+ body = charToRaw("\n\n \n \n enviPath\n \n \n \n\n \n \n\n \n \n\n \n \n \n\n \n \n \n \n \n \n \n \n\n \n \n\n \n \n\n \n\n \n \n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n \n \n \n \n\n \n \n \n \n\n \n \n
\n
\n
\n
\n
\n
Page Not Found
\n
The page you're looking for doesn't exist.
\n
\n
\n\n
\n
\n
404 Error
\n
\n The page or resource you requested could not be found. It may have\n been moved, deleted, or the URL might be incorrect.\n
\n
\n
\n
\n
\n
\n\n\n \n \n
\n \n \n\n \n\n \n \n
\n\n\n \n \n\n \n \n\n \n\n \n \n\n"),
+ timing = c(redirect = 0, namelookup = 3.1e-05, connect = 0,
+ pretransfer = 0.000174, starttransfer = 0.37631, total = 0.376814
), cache = new.env(parent = emptyenv())), class = "httr2_response")
diff --git a/tests/httptest/login/NA-2f7c1a-POST.R b/tests/httptest/login/NA-2f7c1a-POST.R
index afcea48..ae80623 100644
--- a/tests/httptest/login/NA-2f7c1a-POST.R
+++ b/tests/httptest/login/NA-2f7c1a-POST.R
@@ -1,11 +1,11 @@
structure(list(method = "POST", url = "https://", status_code = 500L,
headers = structure(list(Server = "nginx/1.24.0 (Ubuntu)",
- Date = "Sat, 24 Oct 2026 03:32:45 GMT", `Content-Type` = "text/html; charset=utf-8",
+ Date = "Fri, 13 Nov 2026 02:48:34 GMT", `Content-Type` = "text/html; charset=utf-8",
`Content-Length` = "43025", Connection = "keep-alive",
Vary = "Authorization, Cookie", `X-Frame-Options` = "DENY",
`X-Content-Type-Options` = "nosniff", `Referrer-Policy` = "same-origin",
- `Cross-Origin-Opener-Policy` = "same-origin", `Set-Cookie` = "csrftoken=9u2FC7Dz4uZvd2M57D4NgVQKCxqiSjaO; expires=Sat, 23 Oct 2027 03:32:45 GMT; Max-Age=31449600; Path=/; SameSite=Lax"), class = "httr2_headers"),
- body = charToRaw("\n\n \n \n enviPath\n \n \n \n\n \n \n\n \n \n\n \n \n \n\n \n \n \n \n \n \n \n \n\n \n \n\n \n \n\n \n\n \n \n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n \n \n \n \n\n \n \n \n \n\n \n \n
\n
\n
\n
\n
\n
\n Internal Server Error\n
\n
\n An unexpected error occurred. Please try again later.\n
\n
\n
\n\n
\n
\n
Oops! Something went wrong
\n
\n We encountered an unexpected error while processing your request. Our team has been notified and is working to resolve the issue.\n
\n
\n
\n
\n
\n
\n\n\n \n \n
\n \n \n\n \n\n \n \n
\n\n\n \n \n\n \n \n\n \n\n \n \n\n"),
- timing = c(redirect = 0, namelookup = 3e-05, connect = 0,
- pretransfer = 0.000116, starttransfer = 0.422185, total = 0.830267
+ `Cross-Origin-Opener-Policy` = "same-origin", `Set-Cookie` = "csrftoken=TUPLC8ByY6rJp7zLNJIxlk4OAyW5YNW2; expires=Fri, 12 Nov 2027 02:48:34 GMT; Max-Age=31449600; Path=/; SameSite=Lax"), class = "httr2_headers"),
+ body = charToRaw("\n\n \n \n enviPath\n \n \n \n\n \n \n\n \n \n\n \n \n \n\n \n \n \n \n \n \n \n \n\n \n \n\n \n \n\n \n\n \n \n\n \n \n \n \n \n \n \n \n\n\n\n\n\n\n \n \n \n \n \n\n \n \n \n \n\n \n \n
\n
\n
\n
\n
\n
\n Internal Server Error\n
\n
\n An unexpected error occurred. Please try again later.\n
\n
\n
\n\n
\n
\n
Oops! Something went wrong
\n
\n We encountered an unexpected error while processing your request. Our team has been notified and is working to resolve the issue.\n
\n
\n
\n
\n
\n
\n\n\n \n \n
\n \n \n\n \n\n \n \n
\n\n\n \n \n\n \n \n\n \n\n \n \n\n"),
+ timing = c(redirect = 0, namelookup = 3.2e-05, connect = 0,
+ pretransfer = 0.000204, starttransfer = 0.466815, total = 0.776248
), cache = new.env(parent = emptyenv())), class = "httr2_response")
diff --git a/tests/httptest/model/util-e1f28b-POST.R b/tests/httptest/model/util-e1f28b-POST.R
index b938604..f41f085 100644
--- a/tests/httptest/model/util-e1f28b-POST.R
+++ b/tests/httptest/model/util-e1f28b-POST.R
@@ -1,11 +1,11 @@
structure(list(method = "POST", url = "https://util", status_code = 403L,
headers = structure(list(Server = "nginx/1.24.0 (Ubuntu)",
- Date = "Sat, 24 Oct 2026 03:32:47 GMT", `Content-Type` = "application/json; charset=utf-8",
+ Date = "Fri, 13 Nov 2026 02:48:36 GMT", `Content-Type` = "application/json; charset=utf-8",
`Content-Length` = "139", Connection = "keep-alive",
Vary = "Authorization, Cookie", `X-Frame-Options` = "DENY",
`X-Content-Type-Options` = "nosniff", `Referrer-Policy` = "same-origin",
`Cross-Origin-Opener-Policy` = "same-origin"), class = "httr2_headers"),
body = charToRaw("{\"message\": \"Getting Setting with id https://envipath.org/setting/1d915a48-286a-4394-9693-bfaa187326a5 failed due to insufficient rights!\"}"),
- timing = c(redirect = 0, namelookup = 3.3e-05, connect = 0,
- pretransfer = 0.000128, starttransfer = 0.412069, total = 0.412121
+ timing = c(redirect = 0, namelookup = 3.2e-05, connect = 0,
+ pretransfer = 0.000168, starttransfer = 0.314536, total = 0.314576
), cache = new.env(parent = emptyenv())), class = "httr2_response")