dbt-selly/dbt-env/lib/python3.8/site-packages/agate/aggregations/base.py

52 lines
1.7 KiB
Python
Raw Normal View History

2022-03-22 15:13:27 +00:00
#!/usr/bin/env python
import six
from agate.exceptions import UnsupportedAggregationError
@six.python_2_unicode_compatible
class Aggregation(object): # pragma: no cover
"""
Aggregations create a new value by summarizing a :class:`.Column`.
Aggregations are applied with :meth:`.Table.aggregate` and
:meth:`.TableSet.aggregate`.
When creating a custom aggregation, ensure that the values returned by
:meth:`.Aggregation.run` are of the type specified by
:meth:`.Aggregation.get_aggregate_data_type`. This can be ensured by using
the :meth:`.DataType.cast` method. See :class:`.Summary` for an example.
"""
def __str__(self):
"""
String representation of this column. May be used as a column name in
generated tables.
"""
return self.__class__.__name__
def get_aggregate_data_type(self, table):
"""
Get the data type that should be used when using this aggregation with
a :class:`.TableSet` to produce a new column.
Should raise :class:`.UnsupportedAggregationError` if this column does
not support aggregation into a :class:`.TableSet`. (For example, if it
does not return a single value.)
"""
raise UnsupportedAggregationError()
def validate(self, table):
"""
Perform any checks necessary to verify this aggregation can run on the
provided table without errors. This is called by
:meth:`.Table.aggregate` before :meth:`run`.
"""
pass
def run(self, table):
"""
Execute this aggregation on a given column and return the result.
"""
raise NotImplementedError()