Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/OFCE/ofce
Browse files Browse the repository at this point in the history
  • Loading branch information
xtimbeau committed Nov 5, 2024
2 parents 2179e19 + ed8917e commit d70aba4
Showing 1 changed file with 15 additions and 9 deletions.
24 changes: 15 additions & 9 deletions R/source_data.R
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# source_data ------------------------------

# source_data est un outil qui permet d'exécuter un code, d'en cacher le résultat dans un dossier spécial (_data) en gardant des métadonnées
# sauf modifications ou écart de temps (à configuer), les appels suivant au code ne sont pas exécutés mais le ficheir de data est relu
# sauf modifications ou écart de temps (à configurer), les appels suivant au code ne sont pas exécutés mais le ficheir de data est relu
# quelques fonctions permettent de diagnostiquer le cache et de suivre les mises à jour.


Expand Down Expand Up @@ -79,10 +79,6 @@ source_data <- function(name,
cache_rep = NULL,
root = NULL,
quiet = TRUE, nocache = FALSE) {
if(is.null(args))
args <- list()
if(is.null(track))
track <- list()

# on trouve le fichier
# si c'est project on utilise here, sinon, on utilise le wd courant
Expand Down Expand Up @@ -171,15 +167,15 @@ source_data <- function(name,
if(is.null(force_exec)) force <- FALSE else if(force_exec=="TRUE") force <- TRUE else force <- FALSE
if(is.null(prevent_exec)) prevent <- FALSE else if(prevent_exec=="TRUE") prevent <- TRUE else prevent <- FALSE

src_hash <- tools::md5sum(src)
src_hash <- hash_txt(src)
arg_hash <- digest::digest(args, "crc32")
track_hash <- 0

if(length(track) > 0) {
track_files <- purrr::map(track, ~fs::path_join(c(root, .x)))
ok_files <- purrr::map_lgl(track_files, fs::file_exists)
if(any(ok_files))
track_hash <- tools::md5sum(as.character(track_files[ok_files]))
track_hash <- hash_txt(as.character(track_files[ok_files]))
else {
cli::cli_alert_warning("Les fichiers de track sont invalides, vérifiez les chemins")
}
Expand Down Expand Up @@ -305,14 +301,14 @@ check_return <- function(src) {
valid_meta4meta <- function(meta, root = NULL) {
if(is.null(root))
root <- meta$root
src_hash <- tools::md5sum(fs::path_join(c(root, meta$src)))
src_hash <- hash_txt(fs::path_join(c(root, meta$src)))
track_hash <- 0

if(length(meta$track) >0) {
track_files <- purrr::map(meta$track, ~fs::path_join(c(root, .x)))
ok_files <- purrr::map_lgl(track_files, fs::file_exists)
if(any(ok_files))
track_hash <- tools::md5sum(as.character(track_files[ok_files]))
track_hash <- hash_txt(as.character(track_files[ok_files]))
else {
cli::cli_alert_warning("Les fichiers de track sont invalides, vérifiez les chemins")
}
Expand Down Expand Up @@ -348,6 +344,15 @@ valid_metas <- function(metas, src_hash, arg_hash, track_hash, lapse) {
})
}

hash_txt <- function(path) {
purrr::map_chr(path, ~ {
if(fs::file_exists(.x))
digest::digest(readLines(.x, warn = FALSE), algo = "sha1")
else
glue::glue("no_such_file_{round(100000000*runif(1))}")
})
}

get_datas <- function(name, data_rep) {
m <- get_mdatas(name, data_rep)
dn <- names(m) |> stringr::str_replace(glue::glue(".json"), glue::glue(".qs")) |> set_names(names(m))
Expand Down Expand Up @@ -584,6 +589,7 @@ source_data_status <- function(cache_rep = NULL, quiet = TRUE, root = NULL) {
dd <- jsonlite::read_json(.x) |>
purrr::map( ~if(length(.x)>1) purrr::list_flatten(.x) else unlist(.x))
valid <- valid_meta4meta(dd, root = root)

tibble::tibble(
valid = valid$valid,
src = dd$src,
Expand Down

0 comments on commit d70aba4

Please sign in to comment.