docs: def generate_url(scheme=None, host=None, port=None, path=None, query=None):
      """
      Generate URI from parameters.
  
      :param str scheme:
      :param str host:
      :param int port:
      :param str path:
      :param dict query:
      :return:
      """
      url = ""
      if scheme is not None:
          url += "%s://" % scheme
      if host is not None:
          url += host
      if port is not None:
          url += ":%s" % str(port)
      if path is not None:
          url += ensure_url_path_starts_with_slash(path)
      if query is not None:
          url += "?%s" % (urlencode(query))
      return url