code: def parse_query_parms(method, uri, query_str):
      
      if not query_str:
          return None
      query_parms = {}
      for query_item in query_str.split('&'):
          # Example for these items: 'name=a%20b'
          if query_item == '':
              continue
          items = query_item.split('=')
          if len(items) != 2:
              raise BadRequestError(
                  method, uri, reason=1,
                  message="Invalid format for URI query parameter: {!r} "
                  "(valid format is: 'name=value').".
                  format(query_item))
          name = unquote(items[0])
          value = unquote(items[1])
          if name in query_parms:
              existing_value = query_parms[name]
              if not isinstance(existing_value, list):
                  query_parms[name] = list()
                  query_parms[name].append(existing_value)
              query_parms[name].append(value)
          else:
              query_parms[name] = value
      return query_parms
docs: Parse the specified query parms string and return a dictionary of query
      parameters. The key of each dict item is the query parameter name, and the
      value of each dict item is the query parameter value. If a query parameter
      shows up more than once, the resulting dict item value is a list of all
      those values.
  
      query_str is the query string from the URL, everything after the '?'. If
      it is empty or None, None is returned.
  
      If a query parameter is not of the format "name=value", an HTTPError 400,1
      is raised.