forked from rstudio/pins-r
-
Notifications
You must be signed in to change notification settings - Fork 0
/
pin_get.R
68 lines (63 loc) · 2.25 KB
/
pin_get.R
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#' Retrieve a pin (legacy API)
#'
#' Retrieves a pin by name from the local or given board.
#'
#' @param name The name of the pin.
#' @param board The board where this pin will be retrieved from.
#' @param cache Should the pin cache be used? Defaults to `TRUE`.
#' @param extract Should compressed files be extracted? Each board defines the
#' default behavior.
#' @param version The version of the dataset to retrieve, defaults to latest one.
#' @param files Should only the file names be returned?
#' @param signature Optional signature to validate this pin, use `pin_info()`
#' to compute signature.
#' @param ... Additional parameters.
#'
#' @details
#'
#' `pin_get()` retrieves a pin by name and, by default, from the local board.
#' You can use the `board` parameter to specify which board to retrieve a pin from.
#' If a board is not specified, it will use `pin_find()` to find the pin across
#' all boards and retrieve the one that matches by name.
#'
#' @examples
#' # define temporary board
#' board <- legacy_temp()
#' pin(mtcars, board = board)
#'
#' # retrieve the mtcars pin
#' pin_get("mtcars", board = board)
#' @export
pin_get <- function(name,
board = NULL,
cache = TRUE,
extract = NULL,
version = NULL,
files = FALSE,
signature = NULL,
...) {
board <- board_get(board)
if (!cache) {
pin_register_reset_cache(board, name)
}
result <- board_pin_get(board, name, extract = extract, version = version, ...)
meta <- read_meta(result)
meta$type <- meta$type %||% "files"
# Why doesn't this use meta$files? Maybe because of zips?
result_files <- result[!grepl(paste0("^", pin_versions_path_name()), result)]
result_files <- dir(result_files, full.names = TRUE)
if (meta$type == "files" && length(result_files) > 1) {
result_files <- result_files[!grepl("/data.txt$", result_files)]
}
if (!is.null(signature)) {
pin_signature <- pin_version_signature(result_files)
if (!identical(signature, pin_signature)) {
stop("Pin signature '", pin_signature, "' does not match given signature.")
}
}
if (files) {
result_files
} else {
pin_load(structure(result, class = meta$type))
}
}