code: def parse_userinfo(userinfo):
      
      if '@' in userinfo or userinfo.count(':') > 1:
          if PY3:
              quote_fn = "urllib.parse.quote_plus"
          else:
              quote_fn = "urllib.quote_plus"
          raise InvalidURI("Username and password must be escaped according to "
                           "RFC 3986, use %s()." % quote_fn)
      user, _, passwd = _partition(userinfo, ":")
      # No password is expected with GSSAPI authentication.
      if not user:
          raise InvalidURI("The empty string is not valid username.")
      return unquote_plus(user), unquote_plus(passwd)
docs: Validates the format of user information in a MongoDB URI.
      Reserved characters like ':', '/', '+' and '@' must be escaped
      following RFC 3986.
  
      Returns a 2-tuple containing the unescaped username followed
      by the unescaped password.
  
      :Paramaters:
          - `userinfo`: A string of the form <username>:<password>
  
      .. versionchanged:: 2.2
         Now uses `urllib.unquote_plus` so `+` characters must be escaped.