diff --git a/R/spat4cast_submit.R b/R/spat4cast_submit.R index 4bb1551..be2943c 100644 --- a/R/spat4cast_submit.R +++ b/R/spat4cast_submit.R @@ -1,8 +1,47 @@ +#' Submit spatial forecast +#' +#' @param dir A directory of .tif files for scoring +#' @param model_id A unique ID representing your group and model +#' @param variable The data source being forecasted. Currently "lai_recovery" is the only option. +#' @param site_id The side ID of the area being forecasted. Currently "august_complex" is the only option. +#' +#' @return message from minio submission +#' @export +#' +#' @examples spat4cast_submit(dir = "climatology", model_id = "team1-climatology", variable = "lai_recovery", site_id = "august_complex") -spat4cast_submit <- function(dir, theme = "lai_recovery") { - # upload anonymously to submissions bucket - minioclient::mc_alias_set("efi", "data.ecoforecast.org", "", "") - minioclient::mc_cp(dir, - paste0("efi/spat4cast-submissions/", theme), - recursive = TRUE) -} \ No newline at end of file +spat4cast_submit <- function(dir, + model_id, + variable = c("lai_recovery"), + site_id = c("august_complex")) { + + # Check variable and site_id + variable <- match.arg(variable) + site_id <- match.arg(site_id) + + # Check file type + submitted_files <- list.files(dir, full = TRUE) + assertthat::assert_that(n_distinct(tools::file_ext(submitted_files)) == 1, msg = "Error: One or more file extension in the submitted directory is not 'tif'. Please check file formats.") + assertthat::assert_that(unique(tools::file_ext(submitted_files)) == "tif", msg = "Error: The file extension in the submitted directory is not 'tif'. Please check file formats.") + + # Check metadata for files + ## can we use the `variable` and `site_id` arguments to pull a template target file for comparison? + ## if we are to enforce these attributes, then we should modify `ingest_planetary_data` to remove dy, dx, dt, srs arguments (and have them enforced according to site_id) + submitted_files_rast <- terra::rast(submitted_files) + terra::res(submitted_files_rast) + terra::origin(submitted_files_rast) + terra::ext(submitted_files_rast) + terra::crs(submitted_files_rast) + + # Upload anonymously to submissions bucket, using hive partitioning for file structure + minioclient::mc_alias_set("efi", "data.ecoforecast.org", access_key = "", secret_key = "") # keys not needed for public bucket submission + + file_names <- basename(submitted_files) + out <- glue::glue("efi/spat4cast-submissions/variable={variable}/site_id={site_id}/model_id={model_id}/reference_date={reference_date}") + + submit <- purrr::walk(file_names, ~withr::with_dir(dir, minioclient::mc_cp(from = ., out, recursive = TRUE))) + + # Return submit message (or maybe something more succinct?) + return(submit) + +} diff --git a/process_submissions.R b/process_submissions.R new file mode 100644 index 0000000..2270b53 --- /dev/null +++ b/process_submissions.R @@ -0,0 +1,10 @@ +## Send from submissions to forecasts + +minioclient::mc_alias_set(alias = "efi", + endpoint = "data.ecoforecast.org", + access_key = Sys.getenv("AWS_ACCESS_KEY_ID"), + secret_key = Sys.getenv("AWS_SECRET_ACCESS_KEY")) + +transfer_output <- minioclient::mc_mv(from = "efi/spat4cast-submissions/", + to = "efi/spat4cast-forecasts/", + recursive = TRUE)