Source code for geno2phenotb.geno2phenotb

"""This is the entry point of the geno2phenoTB console script."""

import logging
import sys
import warnings
from os import path

from geno2phenotb import __version__
from geno2phenotb.installation_test import self_test
from geno2phenotb.parse_args import parse_args
from geno2phenotb.predict import predict
from geno2phenotb.preprocess import preprocess

__author__ = "Bernhard Reuter, Jules Kreuer"
__copyright__ = "Bernhard Reuter, Jules Kreuer"
__license__ = "LGPL-3.0-only"

_logger = logging.getLogger(__name__)


[docs]def setup_logging(loglevel): """Setup basic logging. Parameters ---------- loglevel : int Minimum loglevel for emitting messages. """ logformat = "[%(asctime)s] %(levelname)s:%(name)s:%(message)s" logging.basicConfig( level=loglevel, stream=sys.stdout, format=logformat, datefmt="%Y-%m-%d %H:%M:%S" )
[docs]def main(args): """Wrapper that allows :func:`process` to be called with string arguments in a CLI fashion. Instead of returning the value from :func:`process`, it prints the result to the ``stdout`` in a nicely formatted message. Parameters ---------- args : List[str] Command line parameters as list of strings. """ args = parse_args(args) setup_logging(args.loglevel) _logger.debug(f"Starting geno2phenotb {__version__}") _logger.info(f"Arguments:\n{args}") if args.mode == "test": test_samples = ["ERR067579", "ERR553187"] warnings.simplefilter("ignore") try: for sample_id in test_samples: # Fast test without MTBseq. self_test(sample_id, False) # Optional complete test with MTBseq step. self_test("ERR551304", args.complete) except AssertionError: print("---------------------------") print(" Installation test failed! ") print("---------------------------") return print("----------------------------------------") print(" Installation test passed successfully! ") print("----------------------------------------") _logger.info("geno2phenotb installation test finished successfully.") return # Clean up arguments fastq_dir = path.abspath(args.fastq_dir) output_dir = path.abspath(args.output_dir) # Run only preprocess steps if args.preprocess: _ = preprocess( fastq_dir, output_dir, args.sample_id, skip_mtbseq=args.skip_mtbseq, ) _logger.info("geno2phenotb preprocess only finished successfully.") return else: _, _, _ = predict( fastq_dir, output_dir, args.sample_id, skip_mtbseq=args.skip_mtbseq, drugs=args.drug, ) _logger.info("geno2phenotb finished successfully.") return
[docs]def run(): """Calls :func:`main` passing the CLI arguments extracted from :obj:`sys.argv`. This function is used as entry point to create a console script with setuptools. """ main(sys.argv[1:]) _logger.info("geno2phenotb finished successfully.")
if __name__ == "__main__": run()