import argparse
import logging
from typing import Any
from dae.genomic_resources.genomic_context import (
GC_GENE_MODELS_KEY,
GC_GRR_KEY,
GC_REFERENCE_GENOME_KEY,
GenomicContext,
GenomicContextProvider,
)
logger = logging.getLogger(__name__)
[docs]
class GPFInstanceGenomicContext(GenomicContext):
"""Defines GPFInstance genomic context."""
def __init__(self, gpf_instance: Any) -> None:
# pylint: disable=import-outside-toplevel
from dae.gpf_instance.gpf_instance import GPFInstance
if not isinstance(gpf_instance, GPFInstance):
raise TypeError(
f"invalid gpf instance type: {type(gpf_instance)}")
self.gpf_instance = gpf_instance
[docs]
def get_context_object(self, key: str) -> Any | None:
if key == GC_GENE_MODELS_KEY:
return self.gpf_instance.gene_models
if key == GC_REFERENCE_GENOME_KEY:
return self.gpf_instance.reference_genome
if key == GC_GRR_KEY:
return self.gpf_instance.grr
if key == "annotation_pipeline":
return self.gpf_instance.get_annotation_pipeline()
if key == "gpf_instance":
return self.gpf_instance
logger.info(
"can't find %s in GPF instance genomic context", key)
return None
[docs]
def get_context_keys(self) -> set[str]:
return {
GC_GENE_MODELS_KEY, GC_REFERENCE_GENOME_KEY,
GC_GRR_KEY, "annotation_pipeline", "gpf_instance",
}
[docs]
def get_source(self) -> tuple[str, ...]:
return ("gpf_instance", self.gpf_instance.dae_dir)
[docs]
class GPFInstanceContextProvider(GenomicContextProvider):
"""Defines GPFInstance genomic context provider."""
def __init__(self) -> None:
super().__init__(
"GPFInstanceProvider",
200)
[docs]
@staticmethod
def add_argparser_arguments(
parser: argparse.ArgumentParser,
) -> None:
"""Add command line arguments to the argument parser."""
parser.add_argument(
"-i", "--instance", default=None,
help="The path to the GPF instance configuration file.")
[docs]
@staticmethod
def init(**kwargs: Any) -> GenomicContext | None:
"""Initialize the GPF instance genomic context."""
# pylint: disable=import-outside-toplevel
from dae.gpf_instance.gpf_instance import GPFInstance
try:
gpf_instance = GPFInstance.build(
config_filename=kwargs.get("instance"))
except ValueError:
return None
return GPFInstanceGenomicContext(gpf_instance)