Source code for desidatamodel.unit

# Licensed under a 3-clause BSD style license - see LICENSE.rst
# -*- coding: utf-8 -*-
"""
==================
desidatamodel.unit
==================

Shared code for dealing with units in files and data models.
"""
from astropy.units import Unit
from desiutil.log import log
from . import DataModelError


[docs]class DataModelUnit(object): """Allow unit-handling code to be shared with several classes. """ _acceptable_units = ('maggie', 'maggy', 'mgy', 'electron/Angstrom', 'log(Angstrom)')
[docs] def check_unit(self, unit, error=False): """Check units for consistency with FITS standard, while allowing some special exceptions. Parameters ---------- unit : :class:`str` The unit to parse. error : :class:`bool`, optional If ``True``, failure to interpret the unit raises an exception. Returns ------- :class:`str` If a special exception is detected, the name of the unit is returned. Otherwise, ``None``. Raises ------ :exc:`ValueError` If `error` is set and the unit can't be parsed. """ try: au = Unit(unit, format='fits') except ValueError as e: bad_unit = str(e).split()[0] if any([u in bad_unit for u in self._acceptable_units]): return bad_unit else: if error: log.critical(str(e)) raise else: log.warning(str(e)) return None