Skip to content
Snippets Groups Projects
cli.py 2.22 KiB
Newer Older
import argparse
import logging
from pathlib import Path

from tsg.main import sample_transcripts
def setup_logging(loglevel: str = None) -> None:
Larissa Glass's avatar
Larissa Glass committed
    """Set up logging. Loglevel can be one of ["CRITICAL", "ERROR", "WARNING", "INFO", "DEBUG"].

    Args:
        loglevel (str, optional): Level of log output. Defaults to None.

    Raises:
        ValueError: If string that is not a log level is passed, raise error.
    """
    if loglevel:
        numeric_level = getattr(logging, loglevel.upper())
        if not isinstance(numeric_level, int):
            raise ValueError("Invalid log level: %s" % loglevel)
    else:
        numeric_level = getattr(logging, "INFO")

    logging.basicConfig(
        format='[%(asctime)s: %(levelname)s] %(message)s (module "%(module)s")',
        level=numeric_level,
    )
Larissa Glass's avatar
Larissa Glass committed
def build_arg_parser() -> argparse.ArgumentParser:
    parser = argparse.ArgumentParser()
    parser.add_argument("--transcripts", type=str)
    parser.add_argument("--annotation", type=str)
    parser.add_argument("--prob_inclusion", type=float)
    parser.add_argument("--log", type=str)

    return parser


Larissa Glass's avatar
Larissa Glass committed
def get_args() -> argparse.Namespace:
    parser = build_arg_parser()

    args = parser.parse_args()

    return args


def output_filename(filename: str) -> str:
Larissa Glass's avatar
Larissa Glass committed
    """Generate output filename for given input filename.

    Args:
        filename (str): Input filename

    Raises:
        NotImplementedError: Only accept filetypes .csv, .tsv and .gtf.
        FileExistsError: If the output file exists, raise error.

    Returns:
        str: Output filename
    """
    filepath = Path(filename)
    if filepath.suffix == ".csv" or filepath.suffix == ".tsv":
        outfile = "generated_" + filepath.stem + ".csv"
    elif filepath.suffix == ".gtf":
        outfile = "generated_" + filepath.name
    else:
        raise NotImplementedError()

    if Path(outfile).exists():
        raise FileExistsError(f"The output file {outfile} already exists.")
        
    return outfile
    args = get_args()

    setup_logging(args.log)
    sample_transcripts(
        args.transcripts,
        args.annotation,
        args.prob_inclusion,
        output_filename(args.transcripts),
        output_filename(args.annotation),
    )