docs: def _series(self, connection, name, interval, config, buckets, **kws):
      '''
      Fetch a series of buckets.
      '''
      fetch = kws.get('fetch')
      process_row = kws.get('process_row') or self._process_row
  
      rval = OrderedDict()
  
      if fetch:
        data = fetch( connection, self._table, name, interval, buckets )
      else:
        data = self._type_get(name, interval, buckets[0], buckets[-1])
  
      if config['coarse']:
        for i_bucket in buckets:
          i_key = config['i_calc'].from_bucket(i_bucket)
          i_data = data.get( i_bucket )
          if i_data:
            rval[ i_key ] = process_row( i_data[None] )
          else:
            rval[ i_key ] = self._type_no_value()
      else:
        if data:
          for i_bucket, i_data in data.items():
            i_key = config['i_calc'].from_bucket(i_bucket)
            rval[i_key] = OrderedDict()
            for r_bucket, r_data in i_data.items():
              r_key = config['r_calc'].from_bucket(r_bucket)
              if r_data:
                rval[i_key][r_key] = process_row(r_data)
              else:
                rval[i_key][r_key] = self._type_no_value()
  
      return rval