#!/usr/bin/env python
# -*- coding: utf-8 -*-
from pandagg.node._node import Node
[docs]class BucketNode(Node):
def __init__(self):
self.level = None
super(BucketNode, self).__init__(keyed=False)
[docs]class Bucket(BucketNode):
def __init__(self, value, key=None, level=None):
super(Bucket, self).__init__()
self.value = value
self.level = level
self.key = key
@property
def attr_name(self):
"""
Determine under which attribute name the bucket will be available in response tree.
Dots are replaced by `_` characters so that they don't prevent from accessing as attribute.
Resulting attribute unfit for python attribute name syntax is still possible and will be accessible through
item access (dict like), see more in 'utils.Obj' for more details.
"""
if self.key is not None:
return "%s_%s" % (self.level.replace(".", "_"), self._coerced_key)
return self.level.replace(".", "_")
[docs] def line_repr(self, **kwargs):
s = self.level or ""
if self.key is not None:
s += "=%s" % self._coerced_key
return s, str(self.value) if self.value else ""
@property
def _coerced_key(self):
key = self.key
try:
# order matters, will
key = float(key)
key = int(key)
except (ValueError, TypeError):
pass
return key