Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 1 addition & 25 deletions .github/ISSUE_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -1,25 +1 @@
Please specify whether your issue is about:

- [ ] a possible bug
- [ ] a question about package functionality
- [ ] a suggested code or documentation change, improvement to the code, or feature request

If you are reporting (1) a bug or (2) a question about code, please supply:

- [a fully reproducible example](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) using a publicly available dataset (or provide your data)
- if an error is occurring, include the output of `traceback()` run immediately after the error occurs
- the output of `sessionInfo()`

Put your code here:

```R
## load package
library("dataverse")

## code goes here


## session info for your system
sessionInfo()
```

If you are reporting a bug, please supply a reproducible dataset using [reprex](https://reprex.tidyverse.org/).
2 changes: 1 addition & 1 deletion .github/workflows/R-CMD-check-dev.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ name: R-CMD-check-dev

jobs:
R-CMD-check-dev:
runs-on: ubuntu-22.04
runs-on: ubuntu-latest
env:
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
steps:
Expand Down
28 changes: 4 additions & 24 deletions .github/workflows/R-CMD-check-thorough.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ jobs:
- {os: windows-latest, r: 'devel'}
- {os: windows-latest, r: 'release'}
# - {os: windows-latest, r: '3.6'}
- {os: ubuntu-20.04, r: 'devel'}
- {os: ubuntu-20.04, r: 'release'}
- {os: ubuntu-latest, r: 'devel'}
- {os: ubuntu-latest, r: 'release'}
# - {os: ubuntu-18.04, r: 'devel', rspm: "https://packagemanager.rstudio.com/cran/__linux__/bionic/latest", http-user-agent: "R/4.0.0 (ubuntu-18.04) R (4.0.0 x86_64-pc-linux-gnu x86_64 linux-gnu) on GitHub Actions" }
# - {os: ubuntu-18.04, r: 'oldrel', rspm: "https://packagemanager.rstudio.com/cran/__linux__/bionic/latest"}
# - {os: ubuntu-18.04, r: '3.5', rspm: "https://packagemanager.rstudio.com/cran/__linux__/bionic/latest"}
Expand All @@ -47,29 +47,9 @@ jobs:
- uses: r-lib/actions/setup-r-dependencies@v2
with:
cache: "always"
- uses: r-lib/actions/setup-pandoc@v2

- name: Restore R package cache
uses: actions/cache@v3
with:
path: |
${{ env.R_LIBS_USER }}
!${{ env.R_LIBS_USER }}/pak
key: ${{ matrix.config.os }}-${{ steps.install-r.outputs.installed-r-version }}-1-${{ hashFiles('.github/r-depends.rds') }}
restore-keys: ${{ matrix.config.os }}-${{ steps.install-r.outputs.installed-r-version }}-1-
extra-packages: any::rcmdcheck

- name: Install system dependencies
if: runner.os == 'Linux'
run: |
pak::local_system_requirements(execute = TRUE)
pak::pkg_system_requirements("rcmdcheck", execute = TRUE)
shell: Rscript {0}

- name: Install dependencies
run: |
pak::local_install_dev_deps(upgrade = TRUE)
pak::pkg_install("rcmdcheck")
shell: Rscript {0}
- uses: r-lib/actions/setup-pandoc@v2

- name: Session info
run: |
Expand Down
12 changes: 9 additions & 3 deletions DESCRIPTION
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Package: dataverse
Version: 0.3.16
Version: 0.3.17
Title: Client for Dataverse 4+ Repositories
Authors@R:
c(person(given = "Shiro",
Expand Down Expand Up @@ -46,10 +46,16 @@ Authors@R:
person(given = "Konrad",
family = "Oberwimmer",
role = "ctb",
email = "konrad.oberwimmer@gmail.com"))
email = "konrad.oberwimmer@gmail.com"),
person(given = "Christopher T.",
family = "Kenny",
role = c("ctb"),
email = "ctkenny@proton.me",
comment = c(ORCID = "0000-0002-9386-6860")))
Imports:
checkmate,
httr,
curl,
httr2,
memoise,
cachem,
jsonlite,
Expand Down
4 changes: 4 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# dataverse

# CHANGES in dataverse 0.3.17

* Update to use `httr2` internally over `httr`.

# CHANGES in dataverse 0.3.16

* Fix API calls to set X-Dataverse-key header correctly (#140, by @konradoberwimmer)
Expand Down
4 changes: 2 additions & 2 deletions R/SWORD.R
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
#' @export
service_document <- function(key = Sys.getenv("DATAVERSE_KEY"), server = Sys.getenv("DATAVERSE_SERVER"), ...) {
u <- paste0(api_url(server, prefix = "dvn/api/"), "data-deposit/v1.1/swordv2/service-document")
r <- api_get(u, httr::authenticate(key, ""), ...)
r <- api_get(u, ..., key = key, sword = TRUE)
x <- xml2::as_list(xml2::read_xml(r))
w <- x$workspace
out <- list()
Expand Down Expand Up @@ -73,7 +73,7 @@ list_datasets <- function(dataverse, key = Sys.getenv("DATAVERSE_KEY"), server =
dataverse <- get_dataverse(dataverse, key = key, server = server, ...)$alias
}
u <- paste0(api_url(server, prefix = "dvn/api/"), "data-deposit/v1.1/swordv2/collection/dataverse/", dataverse)
r <- api_get(u, httr::authenticate(key, ""), ..., as = "raw")
r <- api_get(u, ..., key = key, sword = TRUE, as = "raw")

# clean up response structure
x <- xml2::as_list(xml2::read_xml(r))
Expand Down
40 changes: 28 additions & 12 deletions R/SWORD_dataset.R
Original file line number Diff line number Diff line change
Expand Up @@ -54,14 +54,19 @@ initiate_sword_dataset <- function(dataverse, body, key = Sys.getenv("DATAVERSE_
dataverse <- get_dataverse(dataverse)$alias
}
u <- paste0(api_url(server, prefix="dvn/api/"), "data-deposit/v1.1/swordv2/collection/dataverse/", dataverse)
req <- httr2::request(u) |>
httr2::req_auth_basic(key, "")
if (is.character(body) && file.exists(body)) {
b <- httr::upload_file(body)
req <- httr2::req_body_file(req, body, type = "application/atom+xml")
} else {
b <- do.call("build_metadata", c(body, metadata_format = "dcterms"))
req <- httr2::req_body_raw(req, b, type = "application/atom+xml")
}
r <- httr::POST(u, httr::authenticate(key, ""), httr::add_headers("Content-Type" = "application/atom+xml"), body = b, ...)
httr::stop_for_status(r, task = httr::content(r)$message)
structure(parse_atom(httr::content(r, as = "text", encoding = "UTF-8")))
req <- httr2::req_error(req, body = function(resp) {
tryCatch(httr2::resp_body_json(resp, simplifyVector = FALSE)$message, error = function(e) NULL)
})
r <- httr2::req_perform(req)
structure(parse_atom(httr2::resp_body_string(r)))
}

#' @title Delete dataset (SWORD)
Expand Down Expand Up @@ -106,9 +111,14 @@ delete_sword_dataset <- function(dataset, key = Sys.getenv("DATAVERSE_KEY"), ser
u <- paste0(api_url(server, prefix="dvn/api/"), "data-deposit/v1.1/swordv2/edit/study/", dataset)
}

r <- httr::DELETE(u, httr::authenticate(key, ""), ...)
httr::stop_for_status(r, task = httr::content(r)$message)
cont <- httr::content(r, as = "text", encoding = "UTF-8")
req <- httr2::request(u) |>
httr2::req_auth_basic(key, "") |>
httr2::req_method("DELETE") |>
httr2::req_error(body = function(resp) {
tryCatch(httr2::resp_body_json(resp, simplifyVector = FALSE)$message, error = function(e) NULL)
})
r <- httr2::req_perform(req)
cont <- httr2::resp_body_string(r)
if (cont == "") {
return(TRUE)
} else {
Expand Down Expand Up @@ -161,9 +171,15 @@ publish_sword_dataset <- function(dataset, key = Sys.getenv("DATAVERSE_KEY"), se
u <- paste0(api_url(server, prefix = "dvn/api/"), "data-deposit/v1.1/swordv2/edit/study/", dataset)
}

r <- httr::POST(u, httr::authenticate(key, ""), httr::add_headers("In-Progress" = "false"), ...)
httr::stop_for_status(r, task = httr::content(r)$message)
out <- xml2::as_list(xml2::read_xml(httr::content(r, as = "text", encoding = "UTF-8")))
req <- httr2::request(u) |>
httr2::req_auth_basic(key, "") |>
httr2::req_headers("In-Progress" = "false") |>
httr2::req_method("POST") |>
httr2::req_error(body = function(resp) {
tryCatch(httr2::resp_body_json(resp, simplifyVector = FALSE)$message, error = function(e) NULL)
})
r <- httr2::req_perform(req)
out <- xml2::as_list(xml2::read_xml(httr2::resp_body_string(r)))
out
}

Expand Down Expand Up @@ -205,7 +221,7 @@ dataset_atom <- function(dataset, key = Sys.getenv("DATAVERSE_KEY"), server = Sy
u <- paste0(api_url(server, prefix="dvn/api/"), "data-deposit/v1.1/swordv2/edit/study/", dataset)
}

r <- api_get(u, httr::authenticate(key, ""), ..., as = "raw")
r <- api_get(u, ..., key = key, sword = TRUE, as = "raw")
out <- parse_atom(rawToChar(r))
out
}
Expand All @@ -228,6 +244,6 @@ dataset_statement <- function(dataset, key = Sys.getenv("DATAVERSE_KEY"), server
dataset <- prepend_doi(dataset)
u <- paste0(api_url(server, prefix="dvn/api/"), "data-deposit/v1.1/swordv2/statement/study/", dataset)
}
r <- api_get(u, httr::authenticate(key, ""), ..., as = "raw")
r <- api_get(u, ..., key = key, sword = TRUE, as = "raw")
parse_dataset_statement(rawToChar(r))
}
29 changes: 20 additions & 9 deletions R/SWORD_files.R
Original file line number Diff line number Diff line change
Expand Up @@ -88,12 +88,18 @@ add_file <- function(dataset, file, key = Sys.getenv("DATAVERSE_KEY"), server =
# file can be: a character vector of file names, a data.frame, or a list of R objects
file <- create_zip(file)

h <- httr::add_headers("Content-Disposition" = paste0("filename=", file),
"Content-Type" = "application/zip",
"Packaging" = "http://purl.org/net/sword/package/SimpleZip")
r <- httr::POST(u, httr::authenticate(key, ""), h, body = httr::upload_file(file), ...)
httr::stop_for_status(r, task = httr::content(r)$message)
parse_atom(httr::content(r, as = "text", encoding = "UTF-8"))
req <- httr2::request(u) |>
httr2::req_auth_basic(key, "") |>
httr2::req_headers(
"Content-Disposition" = paste0("filename=", file),
"Packaging" = "http://purl.org/net/sword/package/SimpleZip"
) |>
httr2::req_body_file(file, type = "application/zip") |>
httr2::req_error(body = function(resp) {
tryCatch(httr2::resp_body_json(resp, simplifyVector = FALSE)$message, error = function(e) NULL)
})
r <- httr2::req_perform(req)
parse_atom(httr2::resp_body_string(r))
}

#' @title Delete file (SWORD)
Expand Down Expand Up @@ -136,9 +142,14 @@ delete_file <- function(id, key = Sys.getenv("DATAVERSE_KEY"), server = Sys.gete
} else {
u <- paste0(api_url(server, prefix="dvn/api/"), "data-deposit/v1.1/swordv2/edit-media/file/", id)
}
r <- httr::DELETE(u, httr::authenticate(key, ""), ...)
httr::stop_for_status(r, task = httr::content(r)$message)
cont <- httr::content(r, as = "text", encoding = "UTF-8")
req <- httr2::request(u) |>
httr2::req_auth_basic(key, "") |>
httr2::req_method("DELETE") |>
httr2::req_error(body = function(resp) {
tryCatch(httr2::resp_body_json(resp, simplifyVector = FALSE)$message, error = function(e) NULL)
})
r <- httr2::req_perform(req)
cont <- httr2::resp_body_string(r)
if (cont == "") {
return(TRUE)
} else {
Expand Down
36 changes: 22 additions & 14 deletions R/add_dataset_file.R
Original file line number Diff line number Diff line change
Expand Up @@ -74,12 +74,17 @@ add_dataset_file <-
jsondata <- as.character(jsonlite::toJSON(bod2, auto_unbox = TRUE))

u <- paste0(api_url(server), "datasets/", dataset, "/add")
r <- httr::POST(u, httr::add_headers("X-Dataverse-key" = key), ...,
body = list(file = httr::upload_file(file),
jsonData = jsondata),
encode = "multipart")
httr::stop_for_status(r, task = httr::content(r)$message)
out <- jsonlite::fromJSON(httr::content(r, "text", encoding = "UTF-8"))
req <- httr2::request(u) |>
httr2::req_headers_redacted("X-Dataverse-key" = key) |>
httr2::req_body_multipart(
file = curl::form_file(file),
jsonData = jsondata
) |>
httr2::req_error(body = function(resp) {
tryCatch(httr2::resp_body_json(resp, simplifyVector = FALSE)$message, error = function(e) NULL)
})
r <- httr2::req_perform(req)
out <- jsonlite::fromJSON(httr2::resp_body_string(r))
out$data$files$dataFile$id[1L]
}

Expand Down Expand Up @@ -114,15 +119,18 @@ update_dataset_file <-
jsondata <- as.character(jsonlite::toJSON(bod2, auto_unbox = TRUE))

u <- paste0(api_url(server), "files/", id, "/replace")
r <- httr::POST(u,
httr::add_headers("X-Dataverse-key" = key), ...,
body = list(file = httr::upload_file(file),
jsonData = jsondata
),
encode = "multipart")
httr::stop_for_status(r, task = httr::content(r)$message)
req <- httr2::request(u) |>
httr2::req_headers_redacted("X-Dataverse-key" = key) |>
httr2::req_body_multipart(
file = curl::form_file(file),
jsonData = jsondata
) |>
httr2::req_error(body = function(resp) {
tryCatch(httr2::resp_body_json(resp, simplifyVector = FALSE)$message, error = function(e) NULL)
})
r <- httr2::req_perform(req)
structure(jsonlite::fromJSON(
httr::content(r, as = "text", encoding = "UTF-8"),
httr2::resp_body_string(r),
simplifyDataFrame = FALSE)$data$files[[1L]], class = "dataverse_file"
)
}
23 changes: 17 additions & 6 deletions R/create_dataset.R
Original file line number Diff line number Diff line change
Expand Up @@ -27,17 +27,28 @@
create_dataset <- function(dataverse, body, key = Sys.getenv("DATAVERSE_KEY"), server = Sys.getenv("DATAVERSE_SERVER"), ...) {
dataverse <- dataverse_id(dataverse, key = key, server = server, ...)
u <- paste0(api_url(server), "dataverses/", dataverse, "/datasets/")
r <- httr::POST(u, httr::add_headers("X-Dataverse-key" = key), body = body, encode = "json", ...)
httr::stop_for_status(r, task = httr::content(r)$message)
httr::content(r)
req <- httr2::request(u) |>
httr2::req_headers_redacted("X-Dataverse-key" = key) |>
httr2::req_body_json(body) |>
httr2::req_error(body = function(resp) {
tryCatch(httr2::resp_body_json(resp, simplifyVector = FALSE)$message, error = function(e) NULL)
})
r <- httr2::req_perform(req)
httr2::resp_body_json(r)
}

#' @rdname create_dataset
#' @export
update_dataset <- function(dataset, body, key = Sys.getenv("DATAVERSE_KEY"), server = Sys.getenv("DATAVERSE_SERVER"), ...) {
dataset <- dataset_id(dataset, key = key, server = server, ...)
u <- paste0(api_url(server), "datasets/", dataset, "/versions/:draft")
r <- httr::PUT(u, httr::add_headers("X-Dataverse-key" = key), body = body, encode = "json", ...)
httr::stop_for_status(r, task = httr::content(r)$message)
httr::content(r, as = "text", encoding = "UTF-8")
req <- httr2::request(u) |>
httr2::req_headers_redacted("X-Dataverse-key" = key) |>
httr2::req_body_json(body) |>
httr2::req_method("PUT") |>
httr2::req_error(body = function(resp) {
tryCatch(httr2::resp_body_json(resp, simplifyVector = FALSE)$message, error = function(e) NULL)
})
r <- httr2::req_perform(req)
httr2::resp_body_string(r)
}
11 changes: 8 additions & 3 deletions R/create_dataverse.R
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,12 @@ create_dataverse <- function(dataverse, key = Sys.getenv("DATAVERSE_KEY"), serve
} else {
u <- paste0(api_url(server), "dataverses/", dataverse)
}
r <- httr::POST(u, httr::add_headers("X-Dataverse-key" = key), ...)
httr::stop_for_status(r, task = httr::content(r)$message)
httr::content(r, as = "text", encoding = "UTF-8")
req <- httr2::request(u) |>
httr2::req_headers_redacted("X-Dataverse-key" = key) |>
httr2::req_method("POST") |>
httr2::req_error(body = function(resp) {
tryCatch(httr2::resp_body_json(resp, simplifyVector = FALSE)$message, error = function(e) NULL)
})
r <- httr2::req_perform(req)
httr2::resp_body_string(r)
}
11 changes: 8 additions & 3 deletions R/dataverse_metadata.R
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,12 @@ dataverse_metadata <- function(dataverse, key = Sys.getenv("DATAVERSE_KEY"), ser
set_dataverse_metadata <- function(dataverse, body, root = TRUE, key = Sys.getenv("DATAVERSE_KEY"), server = Sys.getenv("DATAVERSE_SERVER"), ...) {
dataverse <- dataverse_id(dataverse, key = key, server = server, ...)
u <- paste0(api_url(server), "dataverses/", dataverse, "/metadatablocks/", tolower(as.character(root)))
r <- httr::POST(u, httr::add_headers("X-Dataverse-key" = key), ...)
httr::stop_for_status(r, task = httr::content(r)$message)
httr::content(r, as = "text", encoding = "UTF-8")$data
req <- httr2::request(u) |>
httr2::req_headers_redacted("X-Dataverse-key" = key) |>
httr2::req_method("POST") |>
httr2::req_error(body = function(resp) {
tryCatch(httr2::resp_body_json(resp, simplifyVector = FALSE)$message, error = function(e) NULL)
})
r <- httr2::req_perform(req)
httr2::resp_body_json(r)$data
}
11 changes: 8 additions & 3 deletions R/delete_dataset.R
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,12 @@ delete_dataset <- function(dataset, key = Sys.getenv("DATAVERSE_KEY"), server =
# can only delete a "draft" dataset
dataset <- dataset_id(dataset, key = key, server = server, ...)
u <- paste0(api_url(server), "datasets/", dataset, "/versions/:draft")
r <- httr::DELETE(u, httr::add_headers("X-Dataverse-key" = key), ...)
httr::stop_for_status(r, task = httr::content(r)$message)
httr::content(r, as = "text", encoding = "UTF-8")
req <- httr2::request(u) |>
httr2::req_headers_redacted("X-Dataverse-key" = key) |>
httr2::req_method("DELETE") |>
httr2::req_error(body = function(resp) {
tryCatch(httr2::resp_body_json(resp, simplifyVector = FALSE)$message, error = function(e) NULL)
})
r <- httr2::req_perform(req)
httr2::resp_body_string(r)
}
Loading