Esempio n. 1
0
    def transform_data_row_values(cls, series, item_map):
        # Add the values to the row
        row = {}
        for key, value in series.iteritems():
            key = wrap_list(key)
            value = metric_value(value)
            data = {RAW_VALUE: metric_value(value)}

            # Try to find a display value for the item
            item = item_map.get(key[0])
            display = metric_display(value, getattr(item, 'prefix', None),
                                     getattr(item, 'suffix', None),
                                     getattr(item, 'precision', None))

            if display is not None:
                data['display'] = display

            setdeepattr(row, key, data)

        return row
Esempio n. 2
0
def _format_metric_cell(value, metric):
    """
    Renders a table cell in a metric column for non-pivoted tables.

    :param value:
        The raw value of the metric.

    :param metric:
        A reference to the slicer metric to access the display formatting.
    :return:
        A dict containing the keys value and display with the raw and display metric values.
    """
    raw_value = formats.metric_value(value)
    return {
        'value': raw_value,
        'display': formats.metric_display(raw_value,
                                          prefix=metric.prefix,
                                          suffix=metric.suffix,
                                          precision=metric.precision)
        if raw_value is not None
        else None
    }
Esempio n. 3
0
 def test_decimal_value_with_precision_9(self):
     display = formats.metric_display(12345.123456789, precision=9)
     self.assertEqual('12,345.123456789', display)
Esempio n. 4
0
    def transform(self, data_frame, slicer, dimensions, references):
        """
        WRITEME

        :param data_frame:
        :param slicer:
        :param dimensions:
        :param references:
        :return:
        """
        result = data_frame.copy()

        for metric in self.items:
            if any([metric.precision is not None,
                    metric.prefix is not None,
                    metric.suffix is not None]):
                df_key = format_metric_key(metric.key)

                result[df_key] = result[df_key] \
                    .apply(lambda x: formats.metric_display(x, metric.prefix, metric.suffix, metric.precision))

            for reference in references:
                df_ref_key = format_metric_key(reference_key(metric, reference))

                if reference.delta_percent:
                    result[df_ref_key] = result[df_ref_key].apply(lambda x: formats.metric_display(
                        x,
                        reference_prefix(metric, reference),
                        reference_suffix(metric, reference),
                        metric.precision))

        for dimension in dimensions:
            if dimension.has_display_field:
                result = result.set_index(format_dimension_key(dimension.display_key), append=True)
                result = result.reset_index(format_dimension_key(dimension.key), drop=True)

            if hasattr(dimension, 'display_values'):
                self._replace_display_values_in_index(dimension, result)

        if isinstance(data_frame.index, pd.MultiIndex):
            index_levels = [dimension.display_key
                            if dimension.has_display_field
                            else dimension.key
                            for dimension in dimensions]

            result = result.reorder_levels([format_dimension_key(level)
                                            for level in index_levels])

        result = result[[format_metric_key(reference_key(item, reference))
                         for reference in [None] + references
                         for item in self.items]]

        if dimensions:
            result.index.names = [dimension.label or dimension.key
                                  for dimension in dimensions]

        result.columns = pd.Index([reference_label(item, reference)
                                   for item in self.items
                                   for reference in [None] + references],
                                  name='Metrics')

        return self.pivot_data_frame(result, [d.label or d.key for d in self.pivot], self.transpose)
Esempio n. 5
0
 def test_bool_false_value_with_prefix(self):
     display = formats.metric_display(False, prefix='$')
     self.assertEqual('$false', display)
Esempio n. 6
0
 def test_str_value_with_prefix(self):
     display = formats.metric_display('abcdef', prefix='$')
     self.assertEqual('$abcdef', display)
Esempio n. 7
0
 def test_int_value_no_formats(self):
     display = formats.metric_display(12345)
     self.assertEqual('12,345', display)
Esempio n. 8
0
 def test_bool_true_value_no_formats(self):
     display = formats.metric_display(True)
     self.assertEqual('true', display)
Esempio n. 9
0
 def test_negative_usd_int_value(self):
     display = formats.metric_display(-12, prefix='$')
     self.assertEqual('-$12', display)
Esempio n. 10
0
 def test_bool_false_value_with_suffix(self):
     display = formats.metric_display(False, suffix='€')
     self.assertEqual('false€', display)
Esempio n. 11
0
 def test_bool_true_value_with_suffix(self):
     display = formats.metric_display(True, suffix='€')
     self.assertEqual('true€', display)
Esempio n. 12
0
 def test_str_value_with_suffix(self):
     display = formats.metric_display('abcdef', suffix='€')
     self.assertEqual('abcdef€', display)
Esempio n. 13
0
 def test_decimal_value_with_prefix(self):
     display = formats.metric_display(12345.123456789, prefix='$')
     self.assertEqual('$12,345.123457', display)
Esempio n. 14
0
    def transform(self, data_frame, slicer, dimensions, references):
        """
        WRITEME

        :param data_frame:
        :param slicer:
        :param dimensions:
        :param references:
        :return:
        """
        result = data_frame.copy()

        for metric in self.items:
            if any([
                    metric.precision is not None, metric.prefix is not None,
                    metric.suffix is not None
            ]):
                df_key = format_metric_key(metric.key)

                result[df_key] = result[df_key] \
                    .apply(lambda x: formats.metric_display(x, metric.prefix, metric.suffix, metric.precision))

            for reference in references:
                df_ref_key = format_metric_key(reference_key(
                    metric, reference))

                if reference.delta_percent:
                    result[df_ref_key] = result[df_ref_key].apply(
                        lambda x: formats.metric_display(
                            x, reference_prefix(metric, reference),
                            reference_suffix(metric, reference), metric.
                            precision))

        for dimension in dimensions:
            if dimension.has_display_field:
                result = result.set_index(format_dimension_key(
                    dimension.display_key),
                                          append=True)
                result = result.reset_index(format_dimension_key(
                    dimension.key),
                                            drop=True)

            if hasattr(dimension, 'display_values'):
                self._replace_display_values_in_index(dimension, result)

        if isinstance(data_frame.index, pd.MultiIndex):
            index_levels = [
                dimension.display_key
                if dimension.has_display_field else dimension.key
                for dimension in dimensions
            ]

            result = result.reorder_levels(
                [format_dimension_key(level) for level in index_levels])

        result = result[[
            format_metric_key(reference_key(item, reference))
            for reference in [None] + references for item in self.items
        ]]

        if dimensions:
            result.index.names = [
                dimension.label or dimension.key for dimension in dimensions
            ]

        result.columns = pd.Index([
            reference_label(item, reference) for item in self.items
            for reference in [None] + references
        ],
                                  name='Metrics')

        return self.pivot_data_frame(result,
                                     [d.label or d.key for d in self.pivot],
                                     self.transpose)
Esempio n. 15
0
 def test_decimal_value_with_precision_trim_trailing_zeros(self):
     result = formats.metric_display(1.01)
     self.assertEqual('1.01', result)
Esempio n. 16
0
 def test_null_format_no_formatting(self):
     display = formats.metric_display('null', prefix='$', suffix='€', precision=2)
     self.assertEqual('null', display)
Esempio n. 17
0
 def test_int_value_with_suffix(self):
     display = formats.metric_display(12345, suffix='€')
     self.assertEqual('12,345€', display)
Esempio n. 18
0
 def test_str_value_no_formats(self):
     display = formats.metric_display('abcdef')
     self.assertEqual('abcdef', display)
Esempio n. 19
0
 def test_decimal_value_with_suffix(self):
     display = formats.metric_display(12345.123456789, suffix='€')
     self.assertEqual('12,345.123457€', display)
Esempio n. 20
0
 def test_bool_false_value_no_formats(self):
     display = formats.metric_display(False)
     self.assertEqual('false', display)
Esempio n. 21
0
 def test_str_value_with_precision(self):
     display = formats.metric_display('abcdef', precision=2)
     self.assertEqual('abcdef', display)
Esempio n. 22
0
 def test_decimal_value_no_formats(self):
     display = formats.metric_display(12345.123456789)
     self.assertEqual('12,345.123457', display)
Esempio n. 23
0
 def test_bool_true_value_with_precision(self):
     display = formats.metric_display(True, precision=2)
     self.assertEqual('true', display)
Esempio n. 24
0
 def test_bool_true_value_with_prefix(self):
     display = formats.metric_display(True, prefix='$')
     self.assertEqual('$true', display)
Esempio n. 25
0
 def test_bool_false_value_with_precision(self):
     display = formats.metric_display(False, precision=2)
     self.assertEqual('false', display)
Esempio n. 26
0
 def test_int_value_with_prefix(self):
     display = formats.metric_display(12345, prefix='$')
     self.assertEqual('$12,345', display)
Esempio n. 27
0
 def test_int_value_with_precision(self):
     display = formats.metric_display(12345, precision=2)
     self.assertEqual('12,345', display)