-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #153 from jhudsl/ki/refactor
start functionalizing make screenshots
- Loading branch information
Showing
7 changed files
with
239 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
#' Retrieve pages url for a repo | ||
#' | ||
#' Given an repository on GitHub, retrieve the pages URL for it. | ||
#' | ||
#' @param repo_name The full name of the repo to get bookdown chapters from. | ||
#' e.g. "jhudsl/OTTR_Template" | ||
#' @param git_pat If private repositories are to be retrieved, a github personal | ||
#' access token needs to be supplied. If none is supplied, then this will attempt to | ||
#' grab from a git pat set in the environment with usethis::create_github_token(). | ||
#' Authorization handled by \link[cow]{get_git_auth} | ||
#' @param verbose TRUE/FALSE do you want more progress messages? | ||
#' @param keep_json verbose TRUE/FALSE keep the json file locally? | ||
#' | ||
#' @return a data frame with the repository with the following columns: | ||
#' data_level, data_path, chapt_name, url, repository name | ||
#' | ||
#' @importFrom magrittr %>% | ||
#' @import dplyr | ||
#' | ||
#' @export | ||
#' | ||
#' @examples \dontrun{ | ||
#' | ||
#' usethis::create_github_token() | ||
#' | ||
#' get_pages_url("jhudsl/Documentation_and_Usability") | ||
#' } | ||
get_pages_url <- function(repo_name, | ||
git_pat = NULL, | ||
verbose = FALSE, | ||
keep_json = FALSE) { | ||
page_url <- NA | ||
|
||
# Try to get credentials other way | ||
auth_arg <- get_git_auth(git_pat = git_pat, quiet = !verbose) | ||
|
||
git_pat <- try(auth_arg$password, silent = TRUE) | ||
|
||
if (grepl("Error", git_pat[1])) { | ||
warning("Cannot retrieve page info without GitHub credentials. Passing an NA.") | ||
} | ||
|
||
# We can only retrieve pages if we have the credentials | ||
if (!grepl("Error", git_pat[1])) { | ||
exists <- check_git_repo( | ||
repo_name = repo_name, | ||
git_pat = git_pat, | ||
verbose = FALSE | ||
) | ||
|
||
if (exists) { | ||
# Get repo info | ||
repo_info <- get_repo_info( | ||
repo_name = repo_name, | ||
git_pat = git_pat | ||
) | ||
|
||
# Declare URL | ||
url <- paste0("https://api.github.com/repos/", repo_name, "/pages") | ||
|
||
# Github api get | ||
response <- httr::GET( | ||
url, | ||
httr::add_headers(Authorization = paste0("token ", auth_arg$password)), | ||
httr::accept_json() | ||
) | ||
|
||
if (httr::http_error(response)) { | ||
if (verbose) { | ||
warning(paste0("url: ", url, " failed")) | ||
} | ||
} else { | ||
# Get content as JSON | ||
page_info <- httr::content(response, as = "parsed") | ||
|
||
page_url <- page_info$html_url | ||
} | ||
} | ||
} | ||
return(page_url) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
#' A function to make screenshots from an OTTR bookdown website | ||
#' @description This function creates screenshots of course chapters that are stored in a created output directory | ||
#' | ||
#' @param git_pat required argument; a Git secret -- see https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens for more info | ||
#' @param repo required argument; GitHub repository name, e.g., jhudsl/OTTR_Template | ||
#' @param output_dir default is "resources/chapt_screen_images"; Output directory where the chapter's screen images should be stored. For OTTR courses, don't change this unless you've changed the downstream functions accordingly. | ||
#' @param base_url default is NULL; rendered bookdown URL where screenshots are taken from, if NULL, the function will use the repo_name and and git_pat to find the base_url | ||
#' | ||
#' @return the file path for file where chapter urls are saved | ||
#' | ||
#' @import dplyr | ||
#' @importFrom webshot2 webshot | ||
#' @importFrom magrittr %>% | ||
#' @importFrom rprojroot find_root has_dir | ||
#' | ||
#' @author Candace Savonen | ||
#' | ||
#' @export | ||
#' | ||
#' @examples \dontrun{ | ||
#' | ||
#' make_screenshots(Sys.getenv("secrets.GH_PAT"), "jhudsl/OTTR_Template") | ||
#' | ||
#' } | ||
make_screenshots <- function(git_pat, repo, output_dir = "resources/chapt_screen_images", base_url = NULL){ | ||
|
||
# Find .git root directory | ||
root_dir <- find_root(has_dir(".git")) | ||
|
||
output_folder <- file.path(output_dir) | ||
if (!dir.exists(output_folder)) { | ||
dir.create(output_folder, recursive = TRUE) | ||
} | ||
|
||
if (is.null(base_url)){ | ||
base_url <- ottrpal::get_pages_url(repo_name = repo, git_pat = git_pat) #what if these arguments are still NULL/not supplied? | ||
base_url <- gsub("/$", "", base_url) | ||
} | ||
|
||
# Collect all the chapter pages for the url given | ||
chapt_df <- ottrpal::get_chapters(html_page = file.path(root_dir, "docs", "index.html"), | ||
base_url = base_url) | ||
|
||
# Now take screenshots for each | ||
file_names <- lapply(chapt_df$url, function(url){ | ||
file_name <- gsub(".html", | ||
".png", | ||
file.path(output_folder, basename(url)) | ||
) | ||
|
||
# Get rid of special characters because leanpub no like | ||
file_name <- gsub(":|?|!|\\'", | ||
"", | ||
file_name | ||
) | ||
|
||
# Take the screenshot | ||
webshot(url, file = file_name) | ||
|
||
return(file_name) | ||
}) | ||
|
||
# Save file of chapter urls and file_names | ||
chapt_df <- chapt_df %>% | ||
dplyr::mutate(img_path = unlist(file_names)) | ||
|
||
chapt_df %>% | ||
readr::write_tsv(file.path(output_folder, "chapter_urls.tsv")) | ||
|
||
message(paste("Image Chapter key written to: ", file.path(output_folder, "chapter_urls.tsv"))) | ||
|
||
return(file.path(output_folder, "chapter_urls.tsv")) | ||
|
||
} |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.