Source code for immuneML.environment.EnvironmentSettings

# quality: gold
import datetime
import os
from pathlib import Path

from immuneML.caching.CacheType import CacheType
from immuneML.environment.Constants import Constants
from immuneML.environment.SequenceType import SequenceType
from immuneML.util.PathBuilder import PathBuilder


[docs]class EnvironmentSettings: """ Class containing environment variables, like receptor_sequence type, root path etc. """ sequence_type = SequenceType.AMINO_ACID root_path = Path(os.path.normpath(os.path.dirname(os.path.abspath(__file__)) + "/../../") + "/") default_params_path = root_path / "immuneML/config/default_params" tmp_test_path = root_path / "test/tmp" default_analysis_path = root_path / "analysis_runs" cache_path = root_path / "cache" tmp_cache_path = tmp_test_path / "cache" html_templates_path = root_path / "immuneML/presentation/html/templates" specs_docs_path = root_path / "docs/specs" source_docs_path = root_path / "docs/source" max_sequence_length = 20 low_memory = True
[docs] @staticmethod def reset_cache_path(): EnvironmentSettings.cache_path = EnvironmentSettings.root_path / "cache" del os.environ[Constants.CACHE_PATH]
[docs] @staticmethod def set_cache_path(path: Path): EnvironmentSettings.cache_path = Path(path) PathBuilder.build(path) os.environ[Constants.CACHE_PATH] = str(EnvironmentSettings.cache_path) print(f"{datetime.datetime.now()}: Setting temporary cache path to {path}", flush=True)
[docs] @staticmethod def get_cache_type(): if Constants.CACHE_TYPE not in os.environ: os.environ[Constants.CACHE_TYPE] = CacheType.PRODUCTION.name return CacheType[os.environ[Constants.CACHE_TYPE].upper()]
[docs] @staticmethod def get_cache_path(cache_type: CacheType = None): cache_type = EnvironmentSettings.get_cache_type() if cache_type is None else cache_type if cache_type == CacheType.PRODUCTION: return EnvironmentSettings.cache_path if Constants.CACHE_PATH not in os.environ else Path(os.environ[Constants.CACHE_PATH]) elif cache_type == CacheType.TEST: return EnvironmentSettings.tmp_cache_path else: raise RuntimeError("Cache is not set up.")
[docs] @staticmethod def set_sequence_type(sequence_type: SequenceType): EnvironmentSettings.sequence_type = sequence_type
[docs] @staticmethod def get_sequence_type() -> SequenceType: return EnvironmentSettings.sequence_type
[docs] @staticmethod def get_sequence_alphabet(sequence_type: SequenceType = None): """ :return: alphabetically sorted receptor_sequence alphabet """ seq_type = sequence_type if sequence_type is not None else EnvironmentSettings.sequence_type if seq_type == SequenceType.AMINO_ACID: alphabet = list("ACDEFGHIKLMNPQRSTVWY") alphabet.sort() elif seq_type == SequenceType.NUCLEOTIDE: alphabet = list("ACGT") alphabet.sort() else: raise RuntimeError("EnvironmentSettings: the sequence alphabet cannot be obtained if sequence_type was not set properly. " f"Expected AMINO_ACID or NUCLEOTIDE, but got {seq_type} instead.") return alphabet