'Call to constructor creates a new data point. All fields must be present.
:note: Data points written when `bulk_size` is reached per Helper.
:warning: Data points are *immutable* (`namedtuples`).'

def __init__(self, **kw):

    cls = self.__class__
    timestamp = kw.pop(u'time', self._current_timestamp())
    if (sorted((cls._fields + cls._tags)) != sorted(kw.keys())):
        raise NameError(u'Expected    {0},    got    {1}.'.format(sorted((cls._fields + cls._tags)), kw.keys()))
    cls._datapoints[cls._series_name.format(**kw)].append(cls._type(time=timestamp, **kw))
    if (cls._autocommit and (sum((len(series) for series in cls._datapoints.values())) >= cls._bulk_size)):
        cls.commit()
