docs: def load_candidate_config(self, filename=None, config=None):
          """
          Load candidate confguration.
  
          Populate the attribute candidate_config with the desired
          configuration and loads it into the router. You can populate it from
          a file or from a string. If you send both a filename and a string
          containing the configuration, the file takes precedence.
  
          :param filename:  Path to the file containing the desired
                            configuration. By default is None.
          :param config:    String containing the desired configuration.
          """
          configuration = ''
  
          if filename is None:
              configuration = config
          else:
              with open(filename) as f:
                  configuration = f.read()
  
          rpc_command = '<CLI><Configuration>{configuration}</Configuration></CLI>'.format(
              configuration=escape_xml(configuration)  # need to escape, otherwise will try to load invalid XML
          )
  
          try:
              self._execute_rpc(rpc_command)
          except InvalidInputError as e:
              self.discard_config()
              raise InvalidInputError(e.args[0], self)