diff --git a/DESCRIPTION b/DESCRIPTION index 3860e08..d1aae29 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: ohcleandat Type: Package Title: One Health Data Cleaning and Quality Checking Package -Version: 0.3.5 +Version: 0.3.6 Authors@R: c( person("Collin", "Schwantes", email = "schwantes@ecohealthalliance.org", role = c("cre", "aut"), comment = c(ORCID = "0000-0003-4014-4896")), person("Johana", "Teigen", email = "teigen@ecohealthalliance.org", role = "aut", comment = c(ORCID = "0000-0002-6209-2321")), diff --git a/NAMESPACE b/NAMESPACE index c5441a1..2191136 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -31,6 +31,7 @@ export(read_excel_all_sheets) export(read_googlesheets) export(remove_deletions) export(set_diff) +export(update_frictionless_metadata) export(update_structural_metadata) export(validation_checks) importFrom(dplyr,"%>%") diff --git a/NEWS.md b/NEWS.md index e0e8d2a..abe121a 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,7 @@ +# ohcleandat 0.3.6 + +* Adds a function to update the descriptive metadata in a frictionless datapackage + # ohcleandat 0.3.5 # ohcleandat 0.3.4 diff --git a/R/update_frictionless_metadata.R b/R/update_frictionless_metadata.R new file mode 100644 index 0000000..1e74fdd --- /dev/null +++ b/R/update_frictionless_metadata.R @@ -0,0 +1,40 @@ +#' Update descriptive metadata in frictionless datapackage +#' +#' This function overwrites the descriptive metadata associated with a +#' frictionless datapackage. It does *NOT* validate the metadata, or check +#' for conflicts with existing descriptive metadata. It is very easy to create +#' invalid metadata. +#' +#' @param descriptive_metadata List of descriptive metadata terms. +#' @param data_package_path Character. Path to datapackage.json file +#' +#' @return invisibly writes datapackage.json +#' @export +#' +#' @examples +#' \dontrun{ +#' descriptive_metadata <- list ( +#' title = "Example Dataset", +#' description = "This is the abstract but it needs more detail", +#' creator = list (list (name = "A. Person"), list (name = "B. Person"), +#' list (name = "C. Person"),list (name = "F. Person")) +#' # , accessRights = "open" +#' ) +#' update_frictionless_metadata(descriptive_metadata = descriptive_metadata, +#' data_package_path = "data_examples/datapackage.json" +#' ) +#' } +update_frictionless_metadata <- function(descriptive_metadata, + data_package_path){ + + data_package <- frictionless::read_package(data_package_path) + + data_package_dir <- dirname(data_package_path) + + data_package$metadata <- descriptive_metadata + + # write the datapackage.json + frictionless::write_package(data_package,directory = data_package_dir) + + invisible() +} diff --git a/man/update_frictionless_metadata.Rd b/man/update_frictionless_metadata.Rd new file mode 100644 index 0000000..15a25b2 --- /dev/null +++ b/man/update_frictionless_metadata.Rd @@ -0,0 +1,36 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/update_frictionless_metadata.R +\name{update_frictionless_metadata} +\alias{update_frictionless_metadata} +\title{Update descriptive metadata in frictionless datapackage} +\usage{ +update_frictionless_metadata(descriptive_metadata, data_package_path) +} +\arguments{ +\item{descriptive_metadata}{List of descriptive metadata terms.} + +\item{data_package_path}{Character. Path to datapackage.json file} +} +\value{ +invisibly writes datapackage.json +} +\description{ +This function overwrites the descriptive metadata associated with a +frictionless datapackage. It does \emph{NOT} validate the metadata, or check +for conflicts with existing descriptive metadata. It is very easy to create +invalid metadata. +} +\examples{ +\dontrun{ +descriptive_metadata <- list ( +title = "Example Dataset", +description = "This is the abstract but it needs more detail", +creator = list (list (name = "A. Person"), list (name = "B. Person"), +list (name = "C. Person"),list (name = "F. Person")) +# , accessRights = "open" +) +update_frictionless_metadata(descriptive_metadata = descriptive_metadata, + data_package_path = "data_examples/datapackage.json" +) +} +} diff --git a/vignettes/data_examples/my_data.csv b/vignettes/data_examples/my_data.csv index 5386d82..23380b0 100644 --- a/vignettes/data_examples/my_data.csv +++ b/vignettes/data_examples/my_data.csv @@ -1,11 +1,11 @@ "date","measurement","measured_by","site_name","key" -2024-08-26,29,"Johana","b",1 -2024-08-27,53,"Johana","e",2 -2024-08-28,71,"Johana","d",3 -2024-08-29,43,"Collin","e",4 -2024-08-30,93,"Johana","b",5 -2024-08-31,4,"Collin","d",6 -2024-09-01,74,"Johana","e",7 -2024-09-02,13,"Johana","c",8 -2024-09-03,46,"Johana","e",9 -2024-09-04,44,"Collin","a",10 +2024-08-26,38,"Collin","b",1 +2024-08-27,64,"Johana","a",2 +2024-08-28,94,"Johana","e",3 +2024-08-29,75,"Johana","a",4 +2024-08-30,49,"Collin","d",5 +2024-08-31,78,"Collin","d",6 +2024-09-01,93,"Johana","b",7 +2024-09-02,2,"Johana","c",8 +2024-09-03,91,"Johana","c",9 +2024-09-04,27,"Johana","a",10 diff --git a/vignettes/metadata.Rmd b/vignettes/metadata.Rmd index 31d6151..397be23 100644 --- a/vignettes/metadata.Rmd +++ b/vignettes/metadata.Rmd @@ -185,9 +185,25 @@ expand_frictionless_metadata(structural_metadata = structural_metadata, resource_path = "data_examples/my_data.csv", data_package_path = "data_examples/datapackage.json") + +## OOPs actually I need to add more to the description + +descriptive_metadata <- list ( + title = "Example Dataset", + description = "This is the abstract but it needs more detail", + creator = list (list (name = "A. Person"), list (name = "B. Person"),list (name = "C. Person"),list (name = "F. Person")) + # , accessRights = "open" +) +update_frictionless_metadata(descriptive_metadata = descriptive_metadata, + data_package_path = "data_examples/datapackage.json" +) + +cli$deposit_fill_metadata(descriptive_metadata) +# update deposit hangs if the descriptive metadata is not properly formatted, even after correction # upload to zenodo - this creates a **draft** deposit in Zenodo cli$deposit_upload_file(path = "data_examples/") # there are methods for embargoing or restricting deposits in {deposits} + ```