read_resource() now supports reading from remote zip files, thanks to support in {vroom} (1.3.0) (#291).resources() is soft-deprecated, please use resource_names() instead (#282).get_schema() is soft-deprecated, please use schema() instead (#282).Internal frictionless properties are now attributes, to better separate them from public Data Package properties (#289). If you use these internal properties, then update:
package$directory
r <- frictionless:::get_resource(package, "resource_name") # Internal function
r$read_from
to:
attr(package, "directory")
r <- frictionless:::resource(package, "resource_name") # Renamed!
attr(r, "data_location") # Renamed!
frictionless now relies on R >= 4.1.0 (because of an indirect {vroom} dependency) (#291) and uses base pipes (|> rather than %>%) (#292).
read_package() now returns a warning rather than an error when a datapackage.json contains no resources. This allows use to create the JSON and then add resources with frictionless (#265).example_package() now has a version parameter, allowing to load the example Data Package following the Data Package v1 or v2 specification (#249).add_resource() now allows to replace an existing resource (#227).read_resource() now returns an error if both path and data are provided (#143).write_package() no longer writes to "." by default, since this is not allowed by CRAN policies. The user needs to explicitly define a directory (#205).null values in a read datapackage.json are now retained by write_package(), rather than being changed to empty lists. Properties assigned by the user to NA and NULL remain being written as null and removed respectively (#203).vignette("data-package"), vignette("data-resource"), vignette("table-dialect") and vignette("table-schema") describe how frictionless implements the Data Package standard. The (verbose) function documentation of read_resource() and create_schema() has been moved to these vignettes, improving readability and maintenance (#208, #246).example_package is removed in favour of example_package(). This function allows to reproducibly provide a local Data Package, without the need for an internet connection. The observations resource was also changed from a remote to a local resource and from CSV to TSV. This change affects the use of example_package in older versions of frictionless. We recommend to update frictionless to the latest version (#114, #253).read_resource() is now more modular under the hood, which should make it easier to extend (#210).CITATION.cff for citation and Zenodo deposit (#206).print() prints a human-readable summary of the Data Package, rather than a (long) list (#155).read_package() no longer returns a message regarding rights and credit (#121). If package$id is a URL (e.g. a DOI) it will be mentioned in print().add_resource() accepts additional arguments via .... These are added as (custom) properties to the resource and are retained in write_package() (#195).read_resource() now supports column selection via the col_select argument from readr::read_delim(). This can vastly improve reading speed (#123). Tidy selection is not supported.write_package() no longer adds "profile": "tabular-data-package" to datapackage.json. It is also removed from the example dataset (#188).readr::problems() is included in NAMESPACE so you don't have to load readr to inspect parsing issues. The function is mentioned in the documentation of read_resource() (#129).package) now has a datapackage class (#184). This enables a custom print() function (see above). check_package() will warn if the class is missing, so previously saved Data Package objects (without the class) will generate a warning.check_package() is now a public function, so it can be used in your package (#185). This and the other check_ functions return the first argument silently (rather than TRUE), so they can be chained.create_package() now accepts a descriptor argument so that a Data Package object can be created from an existing object (#184). It will always validate the created object with check_package().cli::cli_abort(), cli::cli_warn() and cli::cli_inform() are used for all errors, warnings, and messages (#163). This has several advantages:
{rlang} class, e.g. frictionless_error_fields_without_name, making it easier to test for specific errors.{glue} and {assertthat} are removed as dependencies (#163). The functionality of glue is replaced by cli, while assertthat::assert() calls are now if () statements.{rlang} is added as dependency (#192). It is already used by other dependencies..zenodo.json can be created with checklist::update_citation().{stringi} to Suggests. It was removed as a dependency from {rmarkdown} 2.26, resulting in "stringi package required for encoding operations" build errors on CRAN (#176).skip_if_offline() to selected tests and verbosely include output in vignette examples, to avoid CRAN errors caused by timeouts (#116).datapackage.json, resource files, schemas) can now be read from (s)ftp:// URLs (#102).add_resource() now sets format, mediatype and encoding for added CSV file(s) (#78).add_resource() now supports adding schema via path or URL.write_package() now supports added data to be gzip compressed before being written to disk (#98).read_resource() will now warn rather than error on unknown encoding (#86).package objects no longer have or require the custom attribute resource_names, use the new resources() instead (#97).package objects no longer have or require the custom attribute datapackage, making it easier to edit them as lists (with e.g. append()).add_resource() now supports adding CSV file(s) directly as a resource. This skips reading/handling by R and gives users control over path (#74).example_package) are now downloaded when writing with write_package(), rather than being skipped. This is more consistent with locally read packages. The behaviour for resources with a path containing URLs (only) and resources with data remains the same (no files are written). The write behaviour is better explained in the documentation (#77).write_package() now silently returns the output rather than input package.create_package() will set "profile" = "tabular-data-package" since packages created by frictionless meet those requirements (#81).create_schema() interprets empty columns as string not boolean (#79).read_package() can now read from a datapackage.yaml file.read_resource() now accepts YAML Table Schemas and CSV dialects.add_resource()/create_schema()'s df argument is renamed to data.example_package's observations resource now has URLs as path to serve as an example for that.