import argparse
import logging
import pathlib
import sys
import yaml
from dae.pheno.common import PhenoImportConfig
from dae.pheno.pheno_import import import_pheno_data
from dae.task_graph.cli_tools import TaskGraphCli
logger = logging.getLogger(__name__)
[docs]
def pheno_cli_parser() -> argparse.ArgumentParser:
"""Construct argument parser for phenotype import tool."""
parser = argparse.ArgumentParser(
description="phenotype database import tool",
formatter_class=argparse.RawDescriptionHelpFormatter,
)
parser.add_argument(
"project",
help="Configuration for the phenotype import",
)
parser.add_argument(
"-v",
"--verbose",
dest="verbose",
action="count",
help="Set the verbosity level. [default: %(default)s]",
)
TaskGraphCli.add_arguments(parser, use_commands=False)
return parser
[docs]
def main(argv: list[str] | None = None) -> int:
"""Run phenotype import tool."""
if argv is None:
argv = sys.argv
if not argv[0].endswith("import_phenotypes"):
logger.warning(
"%s tool is deprecated! Use import_phenotypes.",
argv[0],
)
argv = sys.argv[1:]
parser = pheno_cli_parser()
args = parser.parse_args(argv)
project_path = pathlib.Path(args.project).absolute()
raw_config = yaml.safe_load(project_path.read_text())
input_dir = pathlib.Path(raw_config.get("input_dir", ""))
if not input_dir.is_absolute():
raw_config["input_dir"] = str(project_path.parent / input_dir)
output_dir = pathlib.Path(raw_config["output_dir"])
if not output_dir.is_absolute():
raw_config["output_dir"] = str(project_path.parent / output_dir)
import_config = PhenoImportConfig.model_validate(raw_config)
delattr(args, "project")
import_pheno_data(import_config, args)
return 0