Skip to content
Snippets Groups Projects
Commit 230240d1 authored by Jakub Dylag's avatar Jakub Dylag
Browse files

(feat) flag to stop phen diff from check config.yml if it doesn't exist

parent 1aeab1dc
Branches
No related tags found
No related merge requests found
......@@ -78,7 +78,7 @@ def _phen_copy(args: argparse.Namespace):
def _phen_diff(args: argparse.Namespace):
"""Handle the `phen diff` command."""
phen.diff(args.phen_dir, args.version, args.old_phen_dir, args.old_version)
phen.diff(args.phen_dir, args.version, args.old_phen_dir, args.old_version, args.not_check_config)
def main():
......@@ -323,6 +323,12 @@ def main():
required=True,
help="Old phenotype version to compare with the changed version",
)
phen_diff_parser.add_argument(
"--not-check-config",
action='store_true',
default=False,
help="(Optional) Prevent loading and comparing config file, in the case where one does not exist",
)
phen_diff_parser.set_defaults(func=_phen_diff)
# Parse arguments
......
......@@ -1375,37 +1375,42 @@ def diff_phen(
old_phen_path: Path,
old_version: str,
report_path: Path,
not_check_config:bool,
):
"""Compare the differences between two versions of a phenotype"""
# validate phenotypes
_logger.debug(f"Validating for diff old path: {str(old_phen_path.resolve())}")
validate(str(old_phen_path.resolve()))
_logger.debug(f"Validating for diff new path: {str(new_phen_path.resolve())}")
validate(str(new_phen_path.resolve()))
# get old and new config
old_config_path = old_phen_path / CONFIG_FILE
with old_config_path.open("r") as file:
old_config = yaml.safe_load(file)
new_config_path = new_phen_path / CONFIG_FILE
with new_config_path.open("r") as file:
new_config = yaml.safe_load(file)
# write report heading
report = f"# Phenotype Comparison Report\n"
report += f"## Original phenotype\n"
report += f" - {old_config['phenotype']['omop']['vocabulary_id']}\n"
report += f" - {old_version}\n"
report += f" - {str(old_phen_path.resolve())}\n"
report += f"## Changed phenotype:\n"
report += f" - {new_config['phenotype']['omop']['vocabulary_id']}\n"
report += f" - {new_version}\n"
report += f" - {str(new_phen_path.resolve())}\n"
# Step 1: check differences configuration files
# Convert list of dicts into a dict: {name: file}
report += diff_config(old_config, new_config)
if not not_check_config:
# validate phenotypes
_logger.debug(f"Validating for diff old path: {str(old_phen_path.resolve())}")
validate(str(old_phen_path.resolve()))
_logger.debug(f"Validating for diff new path: {str(new_phen_path.resolve())}")
validate(str(new_phen_path.resolve()))
# get old and new config
old_config_path = old_phen_path / CONFIG_FILE
with old_config_path.open("r") as file:
old_config = yaml.safe_load(file)
new_config_path = new_phen_path / CONFIG_FILE
with new_config_path.open("r") as file:
new_config = yaml.safe_load(file)
# write report
report += f"## Original phenotype\n"
report += f" - {old_config['phenotype']['omop']['vocabulary_id']}\n"
report += f" - {old_version}\n"
report += f" - {str(old_phen_path.resolve())}\n"
report += f"## Changed phenotype:\n"
report += f" - {new_config['phenotype']['omop']['vocabulary_id']}\n"
report += f" - {new_version}\n"
report += f" - {str(new_phen_path.resolve())}\n"
# Convert list of dicts into a dict: {name: file}
report += diff_config(old_config, new_config)
# Step 2: check differences between map files
# List files from output directories
......@@ -1422,7 +1427,7 @@ def diff_phen(
_logger.info(f"Phenotypes diff'd successfully")
def diff(phen_dir: str, version: str, old_phen_dir: str, old_version: str):
def diff(phen_dir: str, version: str, old_phen_dir: str, old_version: str, not_check_config:bool):
# make tmp directory .acmc
timestamp = time.strftime("%Y%m%d_%H%M%S")
temp_dir = Path(f".acmc/diff_{timestamp}")
......@@ -1483,7 +1488,7 @@ def diff(phen_dir: str, version: str, old_phen_dir: str, old_version: str):
report_filename = f"{version}_{old_version}_diff.md"
report_path = changed_phen_path / report_filename
# diff old with new
diff_phen(changed_path, version, old_path, old_version, report_path)
diff_phen(changed_path, version, old_path, old_version, report_path, not_check_config)
finally:
# clean up tmp directory
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment