From 03d6c13c539047fd5e61ab257a89ca83dfff60f6 Mon Sep 17 00:00:00 2001 From: Alex Axthelm Date: Thu, 15 Aug 2024 10:29:04 +0200 Subject: [PATCH] Feat/85 flag portfolio in precheck (#88) --- DESCRIPTION | 2 +- R/calc_weights_and_outputs.R | 21 +++++++++++++++------ R/run_analysis.R | 24 ++++++++++++++---------- R/run_pacta.R | 4 ++-- tests/testthat/test-analysis_prechecks.R | 11 +++-------- 5 files changed, 35 insertions(+), 27 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index be4e79a..1f84104 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: workflow.pacta Title: Run PACTA -Version: 0.0.0.9008 +Version: 0.0.0.9009 Authors@R: c(person(given = "CJ", family = "Yetman", diff --git a/R/calc_weights_and_outputs.R b/R/calc_weights_and_outputs.R index af0c197..5471991 100644 --- a/R/calc_weights_and_outputs.R +++ b/R/calc_weights_and_outputs.R @@ -213,13 +213,22 @@ calc_weights_prechecks <- function( total_portfolio, portfolio_type, output_dir, - data_dir + data_dir, + check_portfolio = TRUE ) { - if (is.null(total_portfolio)) { - log_warn("Portfolio is NULL.") - } else if (nrow(total_portfolio) == 0L) { - log_error("Portfolio has no rows.") - stop("Portfolio has no rows.") + if (check_portfolio) { + if ( + missing(total_portfolio) || + is.null(total_portfolio) || + nrow(total_portfolio) == 0L + ) { + log_error("Portfolio has no rows.") + stop("Portfolio has no rows.") + } else { + log_trace("Portfolio has rows.") + } + } else { + log_trace("Skipping portfolio check.") } if (portfolio_type == "Equity") { input_files <- c( diff --git a/R/run_analysis.R b/R/run_analysis.R index 963181d..980ac3a 100644 --- a/R/run_analysis.R +++ b/R/run_analysis.R @@ -79,31 +79,35 @@ run_analysis <- function( analysis_prechecks <- function( total_portfolio_path, pacta_data_dir, - output_dir + output_dir, + check_portfolio = TRUE ) { - pacta.workflow.utils::check_io( - input_files = total_portfolio_path, - output_dir = output_dir - ) - if (is.null(total_portfolio_path)) { - total_portfolio <- NULL - } else { + if (check_portfolio) { + pacta.workflow.utils::check_io( + input_files = total_portfolio_path, + output_dir = output_dir + ) total_portfolio <- readRDS(total_portfolio_path) log_trace( "Checking for PACTA relevant data in file: \"{total_portfolio_path}\"." ) pacta.portfolio.utils::quit_if_no_pacta_relevant_data(total_portfolio) + } else { + log_trace("Skipping portfolio check.") + total_portfolio <- data.frame() } calc_weights_prechecks( total_portfolio = total_portfolio, portfolio_type = "Equity", output_dir = output_dir, - data_dir = pacta_data_dir + data_dir = pacta_data_dir, + check_portfolio = check_portfolio ) calc_weights_prechecks( total_portfolio = total_portfolio, portfolio_type = "Bonds", output_dir = output_dir, - data_dir = pacta_data_dir + data_dir = pacta_data_dir, + check_portfolio = check_portfolio ) } diff --git a/R/run_pacta.R b/R/run_pacta.R index c843e72..26a7220 100644 --- a/R/run_pacta.R +++ b/R/run_pacta.R @@ -76,9 +76,9 @@ run_pacta <- function( output_dir = output_dir ) analysis_prechecks( - total_portfolio_path = NULL, pacta_data_dir = pacta_data_dir, - output_dir = output_dir + output_dir = output_dir, + check_portfolio = FALSE ) run_audit( diff --git a/tests/testthat/test-analysis_prechecks.R b/tests/testthat/test-analysis_prechecks.R index a1f8f9d..0fd5b90 100644 --- a/tests/testthat/test-analysis_prechecks.R +++ b/tests/testthat/test-analysis_prechecks.R @@ -84,7 +84,7 @@ test_that("audit_prechecks fails when total_portfolio.rds missing", { regexp = "^IO checks failed.$" ) }) -test_that("analysis_prechecks passes when port missing, but path is NULL", { +test_that("analysis_prechecks passes port missing, check_portfolio is FALSE", { pacta_data_dir <- withr::local_tempdir() filenames <- c( "bonds_abcd_scenario.rds", @@ -100,17 +100,12 @@ test_that("analysis_prechecks passes when port missing, but path is NULL", { } output_dir <- withr::local_tempdir() - portfolio <- data.frame( - asset_type = "Equity", - has_asset_level_data = TRUE, - stringsAsFactors = FALSE - ) - total_portfolio_path <- file.path(output_dir, "total_portfolio.rds") results <- analysis_prechecks( total_portfolio_path = NULL, pacta_data_dir = pacta_data_dir, - output_dir = output_dir + output_dir = output_dir, + check_portfolio = FALSE ) expect_identical( object = results,