dplyr::tbl() with a CKANConnection as the primary
interface. The connection remains read-only (#187, #240).median() and quantile() as unsupported DataStore translations.
Add execution tests for joins, semi-joins, set operations, wrapped queries,
and the supported custom aggregate translations (#188).revision_list() and package_revision_list() no longer crash when the CKAN version is unknown. An unknown version passes through to the API call (#200).parse_version_number() returns NA with no warning for short or missing input.ping() validates the as argument. as = "logical" returns FALSE on failure. as = "json" signals an error on failure.ckan_action_available(), activity_email_notifications_enabled()) no longer cache transient failures.read_session() stops with a clear error for unsupported file formats instead of returning NULL. ckan_fetch() rejects a missing format before any download.resolve_group_or_org_id() returns the name for name-only lists, matching the sibling helpers.related_*() helpers stop with a clear message when the CKAN instance lacks the related API.CKANR_DEFAULT_URL to the default. Docs name the correct default URL.ds_upsert() for inserting or updating records in an existing DataStore resource (#98).http:// or https:// (#154).EOF within quoted string now use a base R
fallback that preserves the remaining rows without adding a dependency
(#180).ds_search() examples for selecting fields and filtering several fields
(#101). Added migration guidance for deprecated ds_create_dataset() users
(#214).package_patch() with ckanext-scheming custom fields
(#233), thanks @sboots.magrittr dependency with the native R pipe (#213).resource_update() and
resource_patch() (#232).lazyeval dependency with rlang. Update dplyr tests and
development tooling. Contributors need only the modern tidy-eval stack
(#93)This release adds the remaining endpoints of the CKAN 2.11 API.
package_collaborator_list(), package_collaborator_list_for_user(), package_collaborator_create(), and package_collaborator_delete().member_list(), member_create(), member_delete(), member_roles_list(), group_member_create(), group_member_delete(), organization_member_create(), organization_member_delete(), user_invite(), group_list_authz(), and organization_list_for_user(). They manage user access across groups and organizations.package_relationships_list(), package_relationship_create(), package_relationship_update(), and package_relationship_delete(). They accept S3 inputs.package_revise(), package_resource_reorder(), package_owner_org_update(), and dataset_purge() for automation workflows.ckan_resource_view S3 class with wrappers for resource_view_list(), resource_view_show(), resource_view_create(), resource_view_update(), resource_view_reorder(), resource_view_delete(), resource_view_clear(), resource_create_default_resource_views(), and package_create_default_resource_views(). They manage CKAN previews from R.dataset_*, group_*, and user_* functions now expose counts, lists, follow/unfollow flows, and "am I following" probes, plus followee dashboards (followee_count(), followee_list(), dataset_followee_*(), group_followee_*(), user_followee_*()). Organization helpers stay unavailable because CKAN 2.11+ no longer exposes those endpoints.group_activity_list(), organization_activity_list(), recently_changed_packages_activity_list(), dashboard_new_activities_count(), dashboard_mark_activities_old(), activity_show(), activity_data_show(), activity_diff(), activity_create(), and send_email_notifications(). They skip when the activity plugin is disabled.vocabulary_list(), vocabulary_show(), vocabulary_create(), vocabulary_update(), vocabulary_delete()) plus tag_autocomplete(). They complete the tag discovery toolkit.task_status_*()), term translations, runtime config editing, Redis/RQ job controls, API token lifecycle helpers, and diagnostic wrappers for status_show()/help_show().CKANR_ALLOW_PURGE_TESTS gate.text_view plugin is available. Tests skip
otherwise.status_show() for all activity and dashboard tests. Tests use the new helpers when the activity plugin is available.tag_autocomplete() helpers. Tests skip when the configured CKAN user lacks sysadmin rights..github/copilot-instructions.md to allow GenAI to reason over the codebase.
The file also helps human contributors.resource_update() allows update of resource extra fields by making the path parameter optional (#175) thanks @nicholsnrevision_list and package_revision_list return NULL instead of error for CKAN 2.9+ (#200)resource_create(), package_update(), and package_patch() gain parameter http_method. It passes to as.ckan_package() internally, but it does not affect the HTTP request for the main point of the function (#163), thanks @hannaboeorganization_purge() to purge an organization (which requires sysadmin) (#166) thanks @nicholsnservers() function (#162) (#167) (#170)extras now passed in HTTP request in package_create() as a top level part of the request body rather than as a named extras element (#158) thanks @galaHckan_fetch() returns NA rather than character(0) when a zip file has a subdirectory (#164)... parameter in ckan_fetch() passes additional parameters to read.csv, xml2::read_xml, jsonlite::fromJSON, sf::st_read(), read.table(), or readxl::read_excel (#165). It no longer passes curl options to the http requestpackage_create() and group_create() - change groups parameter description to explain what kind of input is expected (#168)package_update() and resource_update() - illustrate possible data loss when updating with incomplete package metadata (#108)package_create() gains parameter private (boolean) (#145)resource_create() and resource_update() gain new parameter extras, while resource_patch() function doesn't change but gains an example of adding an extra (#149) (#150) thanks @nicholsnpackage_patch() gains extras parameter (#94) see also (#147)package_patch(), package_show(), package_activity_list(), package_delete(), package_update(), and related_create() now pass on key parameter value to as.ckan_package internally. The same holds for resource_create() and resource_show(), but passed to as.ckan_resource() (#145) (#146)servers() gains two additional CKAN urls (#155)package_show() calls as.ckan_package() within it, which calls package_show(). This is fixed (#127)resource_search() and tag_search. They allow a query of length more than 1 (#153)print.ckan_package. It handles results from package_search() with a named list of locale specific results (#152)ckan_fetch() gains parameter key for a CKAN API key. If given, the API key is now included in the request headers (#133, #122), thanks @sharlagelfandckan_fetch() gains ability to read xls/xlsx files with multiple sheets (#135), thanks @sharlagelfandckan_fetch() now sets stringsAsFactors = FALSE when reading data (#141) (#142) thanks @LVG77 @sharlagelfandckan_fetch(), use basename(x) instead of gsub(paste0(tempdir(), "/"), "", x), to get file path (#140), thanks @sharlagelfandpackage_search() handle better cases where the CKAN version can not be determined (#139) and fix logic for when default_schema and include_private parameters are included based on the CKAN version (#137), thanks @sharlagelfandckan_fetch() works with more zip files. Old behavior works only with zip files with shp files. It now works with other files, for example a zip file with a csv file (#132), thanks @sharlagelfandckan_fetch() examples that were not working (#134), thanks @sharlagelfandparse_version_number(). It parses CKAN version numbers with patch and dev versions (#136), thanks @sharlagelfanduser_create() and user_delete() (#82)package_show() gains key parameter to pass an API key (#97)package_search() gains new parameters: include_drafts, include_private, use_default_schema, and facet.mincount (#107)fetch() changed to ckan_fetch()organization_delet() to delete an organization (#83)ckan_version() to get version info for a CKAN instancesrc_ckan() and its s3 methods tbl and src_tbls, sql_translate_env. In addition gains the S3 methods db_begin, db_explain, db_has_table, db_insert_into, db_query_fields, db_query_rowsds_create() to properly format body with json data (#85) thanks @mattfullertonckan_fetch() (#118) thanks @sharlagelfandckan_fetch() gains format parameter if the user knows the file format (useful when the file format can not be guessed) (#117) thanks @sharlagelfandckan_fetch gain support for handling geojson (#123) thanks @sharlagelfandckan_fetch writes to temp files and cleans up. It no longer writes to the current working directory in some cases (#125) (#128) (#129) thanks @sharlagelfandservers() function (#68)ds_create_dataset() is deprecated. Use recourse_create() instead (#80) (via #79)stop() call in tag_create(). You can use it now. No test covers it because it needs sysadmin rights (#81)ds_search(): code spacing fixes (#69)resource_update() gains more examples and tests (#66)key parameter is now in all fxns that make http requests. url and key params follow that order across all functions (#122) (#124)resource_create(): upload param was inappropriately a required param (#75) thanks @mingbogoresource_update(). The date in last_modified in the request body converts to character (#96), thanks @jasonajones73. The date format is fixed (#119), by @florianmckan_fetch(). It uses sf instead of maptools. ckan_fetch parses xlsx files and xls files (#114) (#115) thanks @sharlagelfandpackage_search(). This route fails if parameters that did not exist in the CKAN instance are given. The code removes parameters as needed from query params. It pings the CKAN instance for its version (#120)