Source code for dae.genomic_resources.genomic_context_cli

import argparse
import logging
from typing import Any

from dae.genomic_resources.gene_models import (
    build_gene_models_from_resource,
)
from dae.genomic_resources.reference_genome import (
    build_reference_genome_from_resource,
)
from dae.genomic_resources.repository_factory import (
    build_genomic_resource_repository,
)

from .genomic_context import (
    GenomicContext,
    GenomicContextProvider,
    SimpleGenomicContext,
    get_genomic_context,
)

logger = logging.getLogger(__name__)
GC_GRR_KEY = "genomic_resources_repository"
GC_REFERENCE_GENOME_KEY = "reference_genome"
GC_GENE_MODELS_KEY = "gene_models"


[docs] class CLIGenomicContextProvider(GenomicContextProvider): """Genomic context provider for CLI.""" def __init__( self, ) -> None: """Initialize the CLI genomic context provider.""" super().__init__( "cli_genomic_context_provider", 100, )
[docs] @staticmethod def add_argparser_arguments( parser: argparse.ArgumentParser, ) -> None: """Add command line arguments to the argument parser.""" parser.add_argument( "-g", "--grr-filename", "--grr", default=None, help="The GRR configuration file. If the argument is absent, " "the a GRR repository from the current genomic context " "(i.e. gpf_instance) will be used or, if that fails, the " "default GRR configuration will be used.") parser.add_argument( "--grr-directory", default=None, help="Local GRR directory to use as repository.") parser.add_argument( "-R", "--reference-genome-resource-id", "--ref", default=None, help="The resource id for the reference genome. If the argument " "is absent the reference genome from the current genomic " "context will be used.") parser.add_argument( "-G", "--gene-models-resource-id", "--genes", default=None, help="The resource is of the gene models resource. If the argument" " is absent the gene models from the current genomic " "context will be used.")
[docs] @staticmethod def init(**kwargs: Any) -> GenomicContext | None: context_objects: dict[str, Any] = {} grr = None if kwargs.get("grr_filename") is None \ and kwargs.get("grr_directory") is None: grr = get_genomic_context().get_context_object(GC_GRR_KEY) elif kwargs.get("grr_filename") is not None: logger.info( "Using the GRR configured in the file " "%s as requested on the " "command line.", kwargs["grr_filename"]) grr = build_genomic_resource_repository( file_name=kwargs["grr_filename"]) elif kwargs.get("grr_directory") is not None: logger.info( "Using local GRR directory " "%s as requested on the " "command line.", kwargs["grr_directory"]) grr = build_genomic_resource_repository({ "id": "local", "type": "directory", "directory": kwargs["grr_directory"], }) if grr is None: logger.info( "no grr provided in the genomic context; unable to " "resolve CLI genomic context") return None context_objects[GC_GRR_KEY] = grr if kwargs.get("reference_genome_resource_id") is not None: logger.info( "Using the reference genome from resource " "%s provided on the command line.", kwargs["reference_genome_resource_id"]) resource = grr.get_resource(kwargs["reference_genome_resource_id"]) genome = build_reference_genome_from_resource(resource) genome.open() context_objects[GC_REFERENCE_GENOME_KEY] = genome if kwargs.get("gene_models_resource_id") is not None: logger.info( "Using the gene models from resource " "%s provided on the command line.", kwargs["gene_models_resource_id"]) resource = grr.get_resource(kwargs["gene_models_resource_id"]) gene_models = build_gene_models_from_resource(resource).load() context_objects[GC_GENE_MODELS_KEY] = gene_models return SimpleGenomicContext( context_objects, source=("CLIGenomicContext", ))