code: def make_hop_info_from_url(url, verify_reachability=None):
      
      parsed = urlparse(url)
      username = None if parsed.username is None else unquote(parsed.username)  # It's None if not exists
      password = None if parsed.password is None else unquote(parsed.password)  # It's None if not exists
  
      try:
          enable_password = parse_qs(parsed.query)["enable_password"][0]
      except KeyError:
          enable_password = None
  
      hop_info = HopInfo(
          parsed.scheme,
          parsed.hostname,
          username,
          password,
          parsed.port,
          enable_password,
          verify_reachability=verify_reachability
      )
      if hop_info.is_valid():
          return hop_info
      raise InvalidHopInfoError
docs: Build HopInfo object from url.
  
      It allows only telnet and ssh as a valid protocols.
  
      Args:
          url (str): The url string describing the node. i.e.
              telnet://username@1.1.1.1. The protocol, username and address
              portion of url is mandatory. Port and password is optional.
              If port is missing the standard protocol -> port mapping is done.
              The password is optional i.e. for TS access directly to console
              ports.
              The path part is treated as additional password required for some
              systems, i.e. enable password for IOS devices.:
              telnet://<username>:<password>@<host>:<port>/<enable_password>
              <enable_password> is optional
  
          verify_reachability: This is optional callable returning boolean
              if node is reachable. It can be used to verify reachability
              of the node before making a connection. It can speedup the
              connection process when node not reachable especially with
              telnet having long timeout.
  
      Returns:
          HopInfo object or None if url is invalid or protocol not supported