Source code for marvin.tools.mixins.nsa

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#
# @Author: José Sánchez-Gallego (gallegoj@uw.edu)
# @Date: 2018-07-13
# @Filename: nsa.py
# @License: BSD 3-clause (http://www.opensource.org/licenses/BSD-3-Clause)
#
# @Last modified by: José Sánchez-Gallego
# @Last modified time: 2018-07-13 16:54:57

import warnings

from brain.core.exceptions import BrainError

from marvin.core.exceptions import MarvinError, MarvinUserWarning
from marvin.utils.general import get_nsa_data


__all__ = ['NSAMixIn']


[docs]class NSAMixIn(object): """A mixin that provides access to NSA paremeters. Must be used in combination with `.MarvinToolsClass` and initialised before `~.NSAMixIn.nsa` can be called. Parameters: nsa_source ({'auto', 'drpall', 'nsa'}): Defines how the NSA data for this object should loaded when ``.nsa`` is first called. If ``drpall``, the drpall file will be used (note that this will only contain a subset of all the NSA information); if ``nsa``, the full set of data from the DB will be retrieved. If the drpall file or a database are not available, a remote API call will be attempted. If ``nsa_source='auto'``, the source will depend on how the parent object has been instantiated. If the parent has ``data_origin='file'``, the drpall file will be used (as it is more likely that the user has that file in their system). Otherwise, ``nsa_source='nsa'`` will be assumed. This behaviour can be modified during runtime by modifying the ``nsa_mode`` attribute with one of the valid values. """ def __init__(self, nsa_source='auto'): self._nsa = None self.nsa_source = nsa_source assert self.nsa_source in ['auto', 'nsa', 'drpall'], \ 'nsa_source must be one of auto, nsa, or drpall' @property def nsa(self): """Returns the contents of the NSA catalogue for this target.""" if hasattr(self, 'nsa_source') and self.nsa_source is not None: nsa_source = self.nsa_source else: nsa_source = 'auto' if self._nsa is None: if nsa_source == 'auto': if self.data_origin == 'file': nsa_source = 'drpall' else: nsa_source = 'nsa' try: self._nsa = get_nsa_data(self.mangaid, mode='auto', source=nsa_source, drpver=self._drpver, drpall=self._drpall) except (MarvinError, BrainError): warnings.warn('cannot load NSA information for mangaid={!r}.' .format(self.mangaid), MarvinUserWarning) return None return self._nsa