Source code for astropy_timeseries.core
# Licensed under a 3-clause BSD style license - see LICENSE.rst
from astropy.table import QTable
__all__ = ['BaseTimeSeries']
[docs]class BaseTimeSeries(QTable):
_required_columns = None
[docs] def add_columns(self, cols, indexes=None, names=None, **kwargs):
if names is None:
new_names = [col.info.name for col in cols]
else:
new_names = names
existing_and_new = set(new_names) | set(self.colnames)
if self._required_columns is not None:
if len(set(self._required_columns) & existing_and_new) == len(self._required_columns):
# Existing and new columns include all required columns, so we are
# good to go
self._required_columns = None
elif len(existing_and_new - set(self._required_columns)) == 0:
# All existing and new columns are a strict subset of required
# columns - it doesn't mean that all required columns are present,
# but no non-required columns are. So we are good to go.
pass
else:
# There are columns from the required ones missing but some non-
# required columns are being added
for colname in self._required_columns:
if colname not in existing_and_new:
raise ValueError("{0} requires a column called '{1}' to be set "
"before data can be added"
.format(self.__class__.__name__, colname))
return super().add_columns(cols, indexes=indexes, names=names, **kwargs)