Source code for jdaviz.core.config

"""This file contains helper function related to configuration handling."""

import copy
import os
import pathlib
import yaml

__all__ = ['read_configuration', 'get_configuration', 'list_configurations']


[docs] def read_configuration(path=None): """Loads a configuration from a YAML file. Parameters ---------- path : str, optional Path to the configuration file to be loaded. If None, loads the default configuration. Returns ------- config : dict A dictionary object. """ if not isinstance(path, (str, type(None))): raise ValueError('path must be a string') # Parse the default configuration file default_path = pathlib.Path(__file__).resolve().parent.parent / "configs" if path is None or path == 'default': path = default_path / "default" / "default.yaml" elif path == 'cubeviz': path = default_path / "cubeviz" / "cubeviz.yaml" elif path == 'specviz': path = default_path / "specviz" / "specviz.yaml" elif path == 'mosviz': path = default_path / "mosviz" / "mosviz.yaml" elif path == 'specviz2d': path = default_path / "specviz2d" / "specviz2d.yaml" elif path == 'imviz': path = default_path / "imviz" / "imviz.yaml" elif not os.path.isfile(path): raise ValueError("Configuration must be path to a .yaml file.") with open(path, 'r') as f: config = yaml.safe_load(f) return config
[docs] def get_configuration(path=None, section=None, config=None): """Retrieve a copy of a specified configuration. Returns a copy of a configuration specification. If ``path`` is not specified, then returns a copy of the current application configuration if ``config`` is specified. Parameters ---------- path : str, optional path to the configuration file to be retrieved. section : str, optional A section of the configuration to retrieve config : dict, optional An existing configuration dictionary Returns ------- cfg : dict A configuration specification dictionary """ # read the YAML configuration for the given path if path: config = read_configuration(path=path) else: if config is None: raise ValueError('Either a path or a pre-existing config must be specified') cfg = copy.deepcopy(config) # return only a section if requested if section: return cfg.get(section, None) return cfg
[docs] def list_configurations(): """Get a list of pre-built configurations.""" path = pathlib.Path(__file__).resolve().parent.parent / "configs" return [i.stem for i in path.rglob('*.yaml')]