Skip to content

Commit

Permalink
Merge pull request #106 from OxfordIHTM/dev
Browse files Browse the repository at this point in the history
refactor check functions to fix #105
  • Loading branch information
ernestguevarra authored Apr 23, 2024
2 parents 96ec476 + 2dc31d9 commit 893f36a
Show file tree
Hide file tree
Showing 14 changed files with 213 additions and 48 deletions.
1 change: 1 addition & 0 deletions .github/workflows/test-coverage.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ jobs:
runs-on: ubuntu-latest
env:
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}

steps:
- uses: actions/checkout@v4
Expand Down
1 change: 1 addition & 0 deletions DESCRIPTION
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ Depends:
Imports:
dplyr,
httr2,
rlang,
tibble,
tidyr
Suggests:
Expand Down
3 changes: 3 additions & 0 deletions NAMESPACE
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ export(icd_structure_foundation)
export(icd_structure_search)
importFrom(dplyr,bind_cols)
importFrom(dplyr,bind_rows)
importFrom(dplyr,filter)
importFrom(dplyr,pull)
importFrom(httr2,oauth_client)
importFrom(httr2,req_headers)
Expand All @@ -34,5 +35,7 @@ importFrom(httr2,req_url_path)
importFrom(httr2,req_url_query)
importFrom(httr2,request)
importFrom(httr2,resp_body_json)
importFrom(rlang,.data)
importFrom(tibble,tibble)
importFrom(tidyr,unnest)
importFrom(utils,head)
4 changes: 3 additions & 1 deletion R/codigo.R
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@
#' @importFrom httr2 oauth_client request req_url_query req_headers
#' req_oauth_client_credentials req_perform resp_body_json req_url_path
#' @importFrom tibble tibble
#' @importFrom dplyr bind_cols bind_rows pull
#' @importFrom dplyr bind_cols bind_rows pull filter
#' @importFrom tidyr unnest
#' @importFrom rlang .data
#' @importFrom utils head
#'
"_PACKAGE"
16 changes: 12 additions & 4 deletions R/icd_10_get.R
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
#' languages will vary. Default is English ("en"). Note that language support
#' for ICD-10 is limited to English (`en`).
#' @param category ICD-10 category code or for blocks, the code range.
#' @param verbose Logical. Should non-warning and non-error messages be
#' printed? Default is TRUE.
#' @param base_url The base URL of the API. Default uses the WHO API server at
#' https://id.who.int. If you are using a locally deployed server or hosting
#' your own ICD API server, you should specify the URL of your instance here.
Expand Down Expand Up @@ -72,6 +74,7 @@ icd_10_get_releases <- function(api_version = c("v2", "v1"),
icd_10_get_chapters <- function(release = NULL,
api_version = c("v2", "v1"),
language = "en",
verbose = TRUE,
base_url = "https://id.who.int",
client = icd_oauth_client(),
scope = "icdapi_access") {
Expand All @@ -80,13 +83,15 @@ icd_10_get_chapters <- function(release = NULL,

## Check release identifier ----
if (!is.null(release))
icd_check_release(release)
icd_check_release(release = release, icd = "icd10", verbose = verbose)
else
release <- icd_get_releases(icd = "icd10", latest = TRUE) |> dplyr::pull()

## Check language ----
if (!is.null(language))
icd_check_language(release = release, language = language)
language <- icd_check_language(
release = release, language = language, icd = "icd10", verbose = verbose
)

## Make base request ----
req <- httr2::request(base_url) |>
Expand Down Expand Up @@ -150,6 +155,7 @@ icd_10_get_info <- function(release = NULL,
category,
api_version = c("v2", "v1"),
language = "en",
verbose = TRUE,
base_url = "https://id.who.int",
client = icd_oauth_client(),
scope = "icdapi_access") {
Expand All @@ -158,13 +164,15 @@ icd_10_get_info <- function(release = NULL,

## Check release identifier ----
if (!is.null(release))
icd_check_release(release)
icd_check_release(release = release, icd = "icd10", verbose = verbose)
else
release <- icd_get_releases(icd = "icd10", latest = TRUE) |> dplyr::pull()

## Check language ----
if (!is.null(language))
icd_check_language(release = release, language = language)
language <- icd_check_language(
release = release, language = language, icd = "icd10", verbose = verbose
)

## Make base request ----
req <- httr2::request(base_url) |>
Expand Down
13 changes: 9 additions & 4 deletions R/icd_autocode.R
Original file line number Diff line number Diff line change
Expand Up @@ -61,11 +61,14 @@ icd_autocode_foundation <- function(q,
api_version <- match.arg(api_version)

## Check release identifier ----
if (!is.null(release)) icd_check_release(release, verbose = verbose)
if (!is.null(release))
icd_check_release(release, verbose = verbose)

## Check language ----
if (!is.null(language))
language <- icd_check_language(release, language, verbose = verbose)
language <- icd_check_language(
release = release, language = language, verbose = verbose
)

## Make base request ----
req <- httr2::request(file.path(base_url, "icd/entity/autocode")) |>
Expand Down Expand Up @@ -131,13 +134,15 @@ icd_autocode <- function(q,

## Check release identifier ----
if (!is.null(release))
icd_check_release(release, verbose = verbose)
icd_check_release(release = release, verbose = verbose)
else
release <- icd_get_releases(latest = TRUE) |> dplyr::pull()

## Check language ----
if (!is.null(language))
language <- icd_check_language(release, language, verbose = verbose)
language <- icd_check_language(
release = release, language = language, verbose = verbose
)

## Make base request ----
req <- httr2::request(base_url) |>
Expand Down
44 changes: 32 additions & 12 deletions R/icd_check.R
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
#' functions
#'
#' @param release A string specifying the release version of the ICD-11.
#' @param icd A character string of available ICD classifications. Currently,
#' this can be either "icd10" or "icd11". Default is "icd11".
#' @param language language codes such as en, es, zh, etc.
#' @param verbose Logical. Should non-warning and non-error messages be
#' printed? Default is TRUE.
Expand All @@ -22,29 +24,36 @@
#' @rdname icd_check
#' @export
#'
icd_check_release <- function(release, verbose = TRUE) {
release_check <- release %in% codigo::icd_versions$`Release ID`
icd_check_release <- function(release,
icd = c("icd11", "icd10"),
verbose = TRUE) {
icd <- match.arg(icd)

icd <- ifelse(icd == "icd11", "ICD-11", "ICD-10")

release_check <- release %in%
codigo::icd_versions$`Release ID`[codigo::icd_versions$Classification == icd]

if (release_check) {
icd_set <- with(
codigo::icd_versions,
Classification[`Release ID` == release]
)
# icd_set <- with(
# codigo::icd_versions,
# Classification[`Release ID` == release]
# )

if (verbose)
message(
paste0(
"Release `", release, "` matches a known release for ",
icd_set, "."
icd, "."
) |>
strwrap(width = 80)
)
} else {
stop(
paste0(
"Release `", release,
"` does not match any known release for ICD-11 or ICD-10.",
" Please verify and check with `icd_versions` and try again."
"` does not match any known release for ", icd,
". Please check `icd_versions`."
) |>
strwrap(width = 80)
)
Expand All @@ -56,12 +65,23 @@ icd_check_release <- function(release, verbose = TRUE) {
#' @rdname icd_check
#' @export
#'
icd_check_language <- function(release = NULL, language, verbose = TRUE) {
icd_check_language <- function(release = NULL, language,
icd = c("icd11", "icd10"),
verbose = TRUE) {
icd <- match.arg(icd)

#icd <- ifelse(icd == "icd11", "ICD-11", "ICD-10")

## Check if release is NULL ----
if (is.null(release)) release <- codigo::icd_versions$`Release ID`[1]
if (is.null(release)) release <- codigo::icd_versions |>
dplyr::filter(
.data$Classification == ifelse(icd == "icd11", "ICD-11", "ICD-10")
) |>
dplyr::pull(.data$`Release ID`) |>
head(1)

## Check whether release is specified correctly ----
icd_check_release(release, verbose = verbose)
icd_check_release(release = release, icd = icd, verbose = verbose)

## Get languages available for release provided ----
languages_available <- with(
Expand Down
29 changes: 21 additions & 8 deletions R/icd_get.R
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,13 @@ icd_get_foundation <- function(release = NULL,
api_version <- match.arg(api_version)

## Check release identifier ----
if (!is.null(release)) icd_check_release(release, verbose = verbose)
if (!is.null(release)) icd_check_release(release = release, verbose = verbose)

## Check language ----
if (!is.null(language)) icd_check_language(release, language, verbose = verbose)
if (!is.null(language))
language <- icd_check_language(
release = release, language = language, verbose = verbose
)

## Make base request ----
req <- httr2::request(file.path(base_url, "icd/entity"))
Expand Down Expand Up @@ -105,17 +108,22 @@ icd_get_entity <- function(id,
include = NULL,
api_version = c("v2", "v1"),
language = "en",
verbose = TRUE,
base_url = "https://id.who.int",
client = icd_oauth_client(),
scope = "icdapi_access") {
## Get API version to use ----
api_version <- match.arg(api_version)

## Check release identifier ----
if (!is.null(release)) icd_check_release(release)
if (!is.null(release))
icd_check_release(release = release, verbose = verbose)

## Check language ----
if (!is.null(language)) icd_check_language(release, language)
if (!is.null(language))
language <- icd_check_language(
release = release, language = language, verbose = verbose
)

## Make base request ----
req <- httr2::request(file.path(base_url, "icd/entity", id)) |>
Expand Down Expand Up @@ -159,6 +167,7 @@ icd_get_entity <- function(id,
icd_get_info <- function(linearization = c("mms", "icf"),
api_version = c("v2", "v1"),
language = "en",
verbose = TRUE,
base_url = "https://id.who.int",
client = icd_oauth_client(),
scope = "icdapi_access") {
Expand All @@ -170,9 +179,10 @@ icd_get_info <- function(linearization = c("mms", "icf"),

## Check language ----
if (!is.null(language))
icd_check_language(
language <- icd_check_language(
release = icd_get_releases(latest = TRUE) |> dplyr::pull(),
language
language = language,
verbose = verbose
)

## Make base request ----
Expand Down Expand Up @@ -203,6 +213,7 @@ icd_get_chapter <- function(linearization = c("mms", "icf"),
release = NULL,
api_version = c("v2", "v1"),
language = "en",
verbose = TRUE,
base_url = "https://id.who.int",
client = icd_oauth_client(),
scope = "icdapi_access") {
Expand All @@ -214,13 +225,15 @@ icd_get_chapter <- function(linearization = c("mms", "icf"),

## Check release identifier ----
if (!is.null(release))
icd_check_release(release)
icd_check_release(release = release, verbose = verbose)
else
release <- icd_get_releases(latest = TRUE) |> dplyr::pull()

## Check language ----
if (!is.null(language))
icd_check_language(release = release, language = language)
language <- icd_check_language(
release = release, language = language, verbose = verbose
)

## Make base request ----
req <- httr2::request(base_url) |>
Expand Down
13 changes: 9 additions & 4 deletions R/icd_search.R
Original file line number Diff line number Diff line change
Expand Up @@ -126,11 +126,14 @@ icd_search_foundation <- function(q,
api_version <- match.arg(api_version)

## Check release identifier ----
if (!is.null(release)) icd_check_release(release, verbose = verbose)
if (!is.null(release))
icd_check_release(release = release, icd = "icd11", verbose = verbose)

## Check language ----
if (!is.null(language))
language <- icd_check_language(release, language, verbose = verbose)
language <- icd_check_language(
release = release, language = language, icd = "icd11", verbose = verbose
)

## Make base request ----
req <- httr2::request(base_url) |>
Expand Down Expand Up @@ -229,13 +232,15 @@ icd_search <- function(q,

## Check release identifier ----
if (!is.null(release))
icd_check_release(release, verbose = verbose)
icd_check_release(release = release, icd = "icd11", verbose = verbose)
else
release <- icd_get_releases(latest = TRUE) |> dplyr::pull()

## Check language ----
if (!is.null(language))
language <- icd_check_language(release, language, verbose = verbose)
language <- icd_check_language(
release = release, language = language, icd = "icd11", verbose = verbose
)

## Make base request ----
req <- httr2::request(base_url) |>
Expand Down
5 changes: 5 additions & 0 deletions man/icd_10_get.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 10 additions & 2 deletions man/icd_check.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 893f36a

Please sign in to comment.