Phase R1: cog_manifest() accessor + CPI coverage pins #4
@@ -7,6 +7,7 @@ export(cog_explain)
|
|||||||
export(cog_find_peers)
|
export(cog_find_peers)
|
||||||
export(cog_geographic_rollup)
|
export(cog_geographic_rollup)
|
||||||
export(cog_gov_search)
|
export(cog_gov_search)
|
||||||
|
export(cog_manifest)
|
||||||
export(cog_mirror)
|
export(cog_mirror)
|
||||||
export(cog_peer_compare)
|
export(cog_peer_compare)
|
||||||
export(cog_revenue)
|
export(cog_revenue)
|
||||||
|
|||||||
@@ -146,3 +146,18 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
`%||%` <- function(a, b) if (is.null(a) || (length(a) == 1 && is.na(a))) b else a
|
`%||%` <- function(a, b) if (is.null(a) || (length(a) == 1 && is.na(a))) b else a
|
||||||
|
|
||||||
|
#' Return the parsed corpus manifest for the active session.
|
||||||
|
#'
|
||||||
|
#' Opens a session (connecting to the configured corpus) if none is active,
|
||||||
|
#' then returns the manifest exactly as parsed from `manifest.json`. Useful
|
||||||
|
#' for consumers that need the published year range (`years` block, schema
|
||||||
|
#' v5+) or the partition list without issuing a data query.
|
||||||
|
#'
|
||||||
|
#' @return Named list: `schema_version`, `built_at`, `pipeline_commit`,
|
||||||
|
#' `data_vintage`, `scope`, `years` (schema v5+), `schema`, `files`.
|
||||||
|
#' @export
|
||||||
|
cog_manifest <- function() {
|
||||||
|
.ensure_session()
|
||||||
|
.uscogdata_env$manifest
|
||||||
|
}
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
% Generated by roxygen2: do not edit by hand
|
||||||
|
% Please edit documentation in R/manifest.R
|
||||||
|
\name{cog_manifest}
|
||||||
|
\alias{cog_manifest}
|
||||||
|
\title{Return the parsed corpus manifest for the active session.}
|
||||||
|
\usage{
|
||||||
|
cog_manifest()
|
||||||
|
}
|
||||||
|
\value{
|
||||||
|
Named list: `schema_version`, `built_at`, `pipeline_commit`,
|
||||||
|
`data_vintage`, `scope`, `years` (schema v5+), `schema`, `files`.
|
||||||
|
}
|
||||||
|
\description{
|
||||||
|
Opens a session (connecting to the configured corpus) if none is active,
|
||||||
|
then returns the manifest exactly as parsed from `manifest.json`. Useful
|
||||||
|
for consumers that need the published year range (`years` block, schema
|
||||||
|
v5+) or the partition list without issuing a data query.
|
||||||
|
}
|
||||||
@@ -41,3 +41,10 @@ test_that(".inflate preserves NA amounts", {
|
|||||||
expect_true(is.na(result[2]))
|
expect_true(is.na(result[2]))
|
||||||
expect_false(any(is.na(result[c(1, 3)])))
|
expect_false(any(is.na(result[c(1, 3)])))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test_that("bundled CPI covers the full 1967+ corpus era through this year", {
|
||||||
|
cpi <- .cpi_table()
|
||||||
|
expect_lte(min(cpi$year), 1967L)
|
||||||
|
expect_gte(max(cpi$year), as.integer(format(Sys.Date(), "%Y")))
|
||||||
|
expect_false(any(is.na(cpi$cpi)))
|
||||||
|
})
|
||||||
|
|||||||
@@ -99,3 +99,14 @@ test_that("remote manifest fetch does not poison cache when response is HTML", {
|
|||||||
0L
|
0L
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test_that("cog_manifest returns the active session's parsed manifest", {
|
||||||
|
with_fixture_corpus({
|
||||||
|
m <- cog_manifest()
|
||||||
|
expect_type(m, "list")
|
||||||
|
expect_true(m$schema_version >= 4L)
|
||||||
|
yrs <- vapply(m$files$long_partitions, function(p) as.integer(p$year),
|
||||||
|
integer(1))
|
||||||
|
expect_setequal(yrs, c(2019L, 2020L))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user