code: def make_chunk_iter(stream, separator, limit=None, buffer_size=10 * 1024):
      
      _read = make_chunk_iter_func(stream, limit, buffer_size)
      _split = re.compile(r'(%s)' % re.escape(separator)).split
      buffer = []
      while 1:
          new_data = _read()
          if not new_data:
              break
          chunks = _split(new_data)
          new_buf = []
          for item in chain(buffer, chunks):
              if item == separator:
                  yield ''.join(new_buf)
                  new_buf = []
              else:
                  new_buf.append(item)
          buffer = new_buf
      if buffer:
          yield ''.join(buffer)
docs: Works like :func:`make_line_iter` but accepts a separator
      which divides chunks.  If you want newline based processing
      you should use :func:`make_limited_stream` instead as it
      supports arbitrary newline markers.
  
      .. versionadded:: 0.8
  
      .. versionadded:: 0.9
         added support for iterators as input stream.
  
      :param stream: the stream or iterate to iterate over.
      :param separator: the separator that divides chunks.
      :param limit: the limit in bytes for the stream.  (Usually
                    content length.  Not necessary if the `stream`
                    is a :class:`LimitedStream`.
      :param buffer_size: The optional buffer size.