docs: def url_encode_stream(obj, stream=None, charset='utf-8', encode_keys=False,
                        sort=False, key=None, separator='&'):
      """Like :meth:`url_encode` but writes the results to a stream
      object.  If the stream is `None` a generator over all encoded
      pairs is returned.
  
      .. versionadded:: 0.8
  
      :param obj: the object to encode into a query string.
      :param stream: a stream to write the encoded object into or `None` if
                     an iterator over the encoded pairs should be returned.  In
                     that case the separator argument is ignored.
      :param charset: the charset of the query string.
      :param encode_keys: set to `True` if you have unicode keys.
      :param sort: set to `True` if you want parameters to be sorted by `key`.
      :param separator: the separator to be used for the pairs.
      :param key: an optional function to be used for sorting.  For more details
                  check out the :func:`sorted` documentation.
      """
      gen = _url_encode_impl(obj, charset, encode_keys, sort, key)
      if stream is None:
          return gen
      for idx, chunk in enumerate(gen):
          if idx:
              stream.write(separator)
          stream.write(chunk)