Skip to content

Commit 620398b

Browse files
authored
Merge pull request #180 from sharlagelfand/simplify-vector
Add `simplify_vector` parameter to `get_request()` and `post_request()` for improved JSON structure handling
2 parents bde524d + b272103 commit 620398b

12 files changed

Lines changed: 192 additions & 35 deletions

R/collections-query.R

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,8 @@ before_request.collections <- function(q) {
7070
}
7171

7272
#' @export
73-
after_response.collections <- function(q, res) {
74-
content <- content_response_json(res)
73+
after_response.collections <- function(q, res, simplify_vector = TRUE) {
74+
content <- content_response_json(res, simplify_vector)
7575
doc_collections(content)
7676
}
7777

@@ -82,7 +82,7 @@ before_request.collection_id <- function(q) {
8282
}
8383

8484
#' @export
85-
after_response.collection_id <- function(q, res) {
86-
content <- content_response_json(res)
85+
after_response.collection_id <- function(q, res, simplify_vector = TRUE) {
86+
content <- content_response_json(res, simplify_vector)
8787
doc_collection(content)
8888
}

R/conformance-query.R

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ before_request.conformance <- function(q) {
3737
}
3838

3939
#' @export
40-
after_response.conformance <- function(q, res) {
41-
content <- content_response_json(res)
40+
after_response.conformance <- function(q, res, simplify_vector = TRUE) {
41+
content <- content_response_json(res, simplify_vector)
4242
doc_conformance(content)
4343
}

R/extensions.R

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,14 @@
8181
#' section bellow that can help the extension development.
8282
#'
8383
#'
84-
#' @param q a `rstac_query` object expressing a STAC query
84+
#' @param q a `rstac_query` object expressing a STAC query
8585
#' criteria.
8686
#'
87-
#' @param res a `httr` `response` object.
88-
#' @param params a `list` with params to add in request.
87+
#' @param res a `httr` `response` object.
88+
#' @param simplify_vector a `logical` describing whether length-one nested
89+
#' lists should be simplified into vectors. Defaults to TRUE. Can also be set
90+
#' for an entire session via e.g. \code{options(rstac.simplify_vector = FALSE)}.
91+
#' @param params a `list` with params to add in request.
8992
#'
9093
#' @return
9194
#' A `rstac_query` object for `before_request()` and
@@ -108,7 +111,7 @@ before_request <- function(q) {
108111
#' @title Extension development functions
109112
#'
110113
#' @rdname extensions
111-
after_response <- function(q, res) {
114+
after_response <- function(q, res, simplify_vector = TRUE) {
112115
UseMethod("after_response", q)
113116
}
114117

@@ -124,21 +127,22 @@ parse_params <- function(q, params) {
124127
#' response is in accordance with the allowed status codes and content-types.
125128
#' It returns the parsed content response.
126129
#'
127-
#' @param res a `httr` `response` object.
130+
#' @param res a `httr` `response` object.
128131
#'
129132
#' @param status_codes a `character` vector with successful
130133
#' status codes.
131134
#'
132135
#' @param content_types a `character` vector with all acceptable
133136
#' responses' content type.
134137
#'
135-
#' @param key_message a `character` vector with the JSON keys to show the
138+
#' @param key_message a `character` vector with the JSON keys to show the
136139
#' requested API message.
137140
#'
138141
#' @return
139142
#' The `content_response()` function returns a `list` data structure
140143
#' representing the JSON file received in HTTP response
141-
content_response <- function(res, status_codes, content_types, key_message) {
144+
content_response <- function(res, status_codes, content_types, key_message,
145+
simplify_vector = TRUE) {
142146
# convert any json extension
143147
returned_content_type <- httr::http_type(res)
144148
if (!grepl(content_types, returned_content_type)) {
@@ -256,11 +260,12 @@ set_query_endpoint <- function(q, endpoint, params = NULL) {
256260
q
257261
}
258262

259-
content_response_json <- function(res) {
263+
content_response_json <- function(res, simplify_vector = TRUE) {
260264
content_response(
261265
res = res,
262266
status_codes = "200",
263267
content_types = "application/.*json",
264-
key_message = c("message", "description", "detail")
268+
key_message = c("message", "description", "detail"),
269+
simplify_vector = simplify_vector
265270
)
266271
}

R/items-query.R

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -130,8 +130,8 @@ before_request.items <- function(q) {
130130
}
131131

132132
#' @export
133-
after_response.items <- function(q, res) {
134-
content <- content_response_json(res)
133+
after_response.items <- function(q, res, simplify_vector = TRUE) {
134+
content <- content_response_json(res, simplify_vector)
135135
doc_items(content, query = q)
136136
}
137137

@@ -143,7 +143,7 @@ before_request.item_id <- function(q) {
143143
}
144144

145145
#' @export
146-
after_response.item_id <- function(q, res) {
147-
content <- content_response_json(res)
146+
after_response.item_id <- function(q, res, simplify_vector = TRUE) {
147+
content <- content_response_json(res, simplify_vector)
148148
doc_item(content)
149149
}

R/queryables-query.R

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ before_request.queryables <- function(q) {
4848
}
4949

5050
#' @export
51-
after_response.queryables <- function(q, res) {
52-
content <- content_response_json(res)
51+
after_response.queryables <- function(q, res, simplify_vector = TRUE) {
52+
content <- content_response_json(res, simplify_vector)
5353
doc_queryables(content)
5454
}

R/request.R

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,20 @@
88
#' The `post_request` is function that makes HTTP POST
99
#' requests to STAC web services, retrieves, and parse the data.
1010
#'
11-
#' @param q a `rstac_query` object expressing a STAC query
11+
#' @param q a `rstac_query` object expressing a STAC query
1212
#' criteria.
1313
#'
14-
#' @param encode a `character` informing the request body
14+
#' @param encode a `character` informing the request body
1515
#' Content-Type. Accepted types are `'json'` (`'application/json'`),
1616
#' `'form'` (`'application/x-www-form-urlencoded'`),
1717
#' and `'multipart'` (`'multipart/form-data'`). Defaults to
1818
#' `'json'`.
1919
#'
20-
#' @param ... config parameters to be passed to [GET][httr::GET] or
20+
#' @param simplify_vector a `logical` describing whether length-one nested
21+
#' lists should be simplified into vectors. Defaults to TRUE. Can also be set
22+
#' for an entire session via e.g. \code{options(rstac.simplify_vector = FALSE)}.
23+
#'
24+
#' @param ... config parameters to be passed to [GET][httr::GET] or
2125
#' [POST][httr::POST] methods, such as [add_headers][httr::add_headers] or
2226
#' [set_cookies][httr::set_cookies].
2327
#'
@@ -41,7 +45,9 @@
4145
#' post_request()
4246
#' }
4347
#' @export
44-
get_request <- function(q, ...) {
48+
get_request <- function(q, simplify_vector = NULL, ...) {
49+
simplify_vector <- simplify_vector_argument(simplify_vector)
50+
4551
check_query(q)
4652
q$verb <- "GET"
4753
q$encode <- NULL
@@ -54,12 +60,14 @@ get_request <- function(q, ...) {
5460
error_msg = "Error while requesting"
5561
)
5662
# process content and return
57-
after_response(q, res = res)
63+
after_response(q, res = res, simplify_vector = simplify_vector)
5864
}
5965

6066
#' @rdname request
6167
#' @export
62-
post_request <- function(q, ..., encode = c("json", "multipart", "form")) {
68+
post_request <- function(q, simplify_vector = NULL, ..., encode = c("json", "multipart", "form")) {
69+
simplify_vector <- simplify_vector_argument(simplify_vector)
70+
6371
check_query(q)
6472
# check request settings
6573
encode <- encode[[1]]
@@ -76,5 +84,9 @@ post_request <- function(q, ..., encode = c("json", "multipart", "form")) {
7684
error_msg = "Error while requesting"
7785
)
7886
# process content and return
79-
after_response(q, res = res)
87+
after_response(q, res = res, simplify_vector = simplify_vector)
88+
}
89+
90+
simplify_vector_argument <- function(simplify_vector = NULL) {
91+
ifelse(!is.null(simplify_vector), simplify_vector, getOption("rstac.simplify_vector", default = TRUE))
8092
}

R/stac-query.R

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ before_request.stac <- function(q) {
5757
}
5858

5959
#' @export
60-
after_response.stac <- function(q, res) {
61-
content <- content_response_json(res)
60+
after_response.stac <- function(q, res, simplify_vector = TRUE) {
61+
content <- content_response_json(res, simplify_vector)
6262
doc_catalog(content)
6363
}

man/extensions.Rd

Lines changed: 12 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

man/preview_plot.Rd

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

man/request.Rd

Lines changed: 11 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)