Source code for sdss_brain.config

# !/usr/bin/env python
# -*- coding: utf-8 -*-
# 
# Filename: config.py
# Project: sdss_brain
# Author: Brian Cherinka
# Created: Friday, 14th February 2020 1:41:34 pm
# License: BSD 3-clause "New" or "Revised" License
# Copyright (c) 2020 Brian Cherinka
# Last Modified: Tuesday, 17th March 2020 4:20:37 pm
# Modified By: Brian Cherinka


from __future__ import print_function, division, absolute_import
from sdss_brain import cfg_params, log, tree
from sdss_brain.exceptions import BrainError


[docs]class Config(object): ''' Main configuration class for SDSS ''' def __init__(self): self._mode = 'auto' self._release = None self.download = False self.ignore_db = False # get allowed releases from the Tree self._allowed_releases = tree.get_available_releases() # set latest release self.release = self._get_latest_release() # load default config parameters self._load_defaults() def __repr__(self): return f'<SDSSConfig(release={self.release}, mode={self.mode})>' @property def mode(self): return self._mode @mode.setter def mode(self, value): assert value in ['local', 'remote', 'auto'], ('config.mode must be "local",' '"remote", or "auto".') self._mode = value @property def release(self): return self._release @release.setter def release(self, value): value = value.upper() if value not in self._allowed_releases: raise BrainError('trying to set an invalid release version. Valid releases are: {0}' .format(', '.join(self._allowed_releases))) # replant the tree if value.lower() == 'work': tree.replant_tree('sdsswork') else: tree.replant_tree(value.lower()) self._release = value
[docs] def set_release(self, version=None): ''' Set a new release If version not specified, uses the latest public DR Parameters: version (str): The new data release to set ''' if not version: version = self._get_latest_release() log.info(f'Setting release to latest: {version}') self.release = version
def _get_latest_release(self): ''' get the latest public DR release ''' drsonly = [i for i in self._allowed_releases if 'DR' in i] return max(drsonly, key=lambda t: int(t.rsplit('DR', 1)[-1])) def _load_defaults(self): ''' Load the Brain config yaml file and update any parameters ''' # update any matching Config values for key, value in cfg_params.items(): if hasattr(self, key): self.__setattr__(key, value) self._custom_config = cfg_params
config = Config()