Source code for fireant.slicer.widgets.base

from typing import Union

from fireant import (
    Metric,
    Operation,
)
from fireant.slicer.exceptions import MetricRequiredException
from fireant.utils import immutable


[docs]class Widget: def __init__(self, *items: Union[Metric, Operation]): self.items = list(items) @immutable def item(self, item): self.items.append(item) @property def metrics(self): if 0 == len(self.items): raise MetricRequiredException(str(self)) return [metric for group in self.items for metric in getattr(group, 'metrics', [group])] @property def operations(self): return [item for item in self.items if isinstance(item, Operation)] def __eq__(self, other): return isinstance(other, self.__class__) \ and self.items == other.items def __repr__(self): return '{}({})'.format(self.__class__.__name__, ','.join(str(m) for m in self.items))
[docs]class TransformableWidget(Widget): # This attribute can be overridden in order to paginate in groups. Useful in cases like for charts where pagination # should be applied to the number of series rather than the number of data points. group_pagination = False
[docs] def transform(self, data_frame, slicer, dimensions, references): """ - Main entry point - Transformers the result set `pd.DataFrame` from a slicer query into the output format for this specific widget type. :param data_frame: The data frame containing the data. Index must match the dimensions parameter. :param slicer: The slicer that is in use. :param dimensions: A list of dimensions that are being rendered. :param references: A list of references that are being rendered. :return: A dict meant to be dumped as JSON. """ raise NotImplementedError()