docs: def strip_secrets(qp, matcher, kwlist):
      """
      This function will scrub the secrets from a query param string based on the passed in matcher and kwlist.
  
      blah=1&secret=password&valid=true will result in blah=1&secret=<redacted>&valid=true
  
      You can even pass in path query combinations:
  
      /signup?blah=1&secret=password&valid=true will result in /signup?blah=1&secret=<redacted>&valid=true
  
      :param qp: a string representing the query params in URL form (unencoded)
      :param matcher: the matcher to use
      :param kwlist: the list of keywords to match
      :return: a scrubbed query param string
      """
      path = None
  
      try:
          if qp is None:
              return ''
  
          if type(kwlist) is not list:
              logger.debug("strip_secrets: bad keyword list")
              return qp
  
          # If there are no key=values, then just return
          if not '=' in qp:
              return qp
  
          if '?' in qp:
              path, query = qp.split('?')
          else:
              query = qp
  
          params = parse.parse_qsl(query, keep_blank_values=True)
          redacted = ['<redacted>']
  
          if matcher == 'equals-ignore-case':
              for keyword in kwlist:
                  for index, kv in enumerate(params):
                      if kv[0].lower() == keyword.lower():
                          params[index] = (kv[0], redacted)
          elif matcher == 'equals':
              for keyword in kwlist:
                  for index, kv in enumerate(params):
                      if kv[0] == keyword:
                          params[index] = (kv[0], redacted)
          elif matcher == 'contains-ignore-case':
              for keyword in kwlist:
                  for index, kv in enumerate(params):
                      if keyword.lower() in kv[0].lower():
                          params[index] = (kv[0], redacted)
          elif matcher == 'contains':
              for keyword in kwlist:
                  for index, kv in enumerate(params):
                      if keyword in kv[0]:
                          params[index] = (kv[0], redacted)
          elif matcher == 'regex':
              for regexp in kwlist:
                  for index, kv in enumerate(params):
                      if re.match(regexp, kv[0]):
                          params[index] = (kv[0], redacted)
          else:
              logger.debug("strip_secrets: unknown matcher")
              return qp
  
          if sys.version_info < (3, 0):
              result = urllib.urlencode(params, doseq=True)
          else:
              result = parse.urlencode(params, doseq=True)
          query = parse.unquote(result)
  
          if path:
              query = path + '?' + query
  
          return query
      except:
          logger.debug("strip_secrets", exc_info=True)