code: def add_bucket_key_data(self, bucket, key, data, bucket_type=None):
          
          if self._input_mode == 'bucket':
              raise ValueError('Already added a bucket, can\'t add an object.')
          elif self._input_mode == 'query':
              raise ValueError('Already added a query, can\'t add an object.')
          else:
              if isinstance(key, Iterable) and \
                      not isinstance(key, string_types):
                  if bucket_type is not None:
                      for k in key:
                          self._inputs.append([bucket, k, data, bucket_type])
                  else:
                      for k in key:
                          self._inputs.append([bucket, k, data])
              else:
                  if bucket_type is not None:
                      self._inputs.append([bucket, key, data, bucket_type])
                  else:
                      self._inputs.append([bucket, key, data])
              return self
docs: Adds a bucket/key/keydata triple to the inputs.
  
          :param bucket: the bucket
          :type bucket: string
          :param key: the key or list of keys
          :type key: string
          :param data: the key-specific data
          :type data: string, list, dict, None
          :param bucket_type: Optional name of a bucket type
          :type bucket_type: string, None
          :rtype: :class:`RiakMapReduce`