docs: def split_buffer(stream, splitter=None, decoder=lambda a: a):
      """Given a generator which yields strings and a splitter function,
      joins all input, splits on the separator and yields each chunk.
  
      Unlike string.split(), each chunk includes the trailing
      separator, except for the last one if none was found on the end
      of the input.
      """
      splitter = splitter or line_splitter
      buffered = six.text_type('')
  
      for data in stream_as_text(stream):
          buffered += data
          while True:
              buffer_split = splitter(buffered)
              if buffer_split is None:
                  break
  
              item, buffered = buffer_split
              yield item
  
      if buffered:
          yield decoder(buffered)