docs: def getDynDnsClientForConfig(config, plugins=None):
      """Instantiate and return a complete and working dyndns client.
  
      :param config: a dictionary with configuration keys
      :param plugins: an object that implements PluginManager
      """
      initparams = {}
      if "interval" in config:
          initparams["detect_interval"] = config["interval"]
  
      if plugins is not None:
          initparams["plugins"] = plugins
  
      if "updater" in config:
          for updater_name, updater_options in config["updater"]:
              initparams["updater"] = get_updater_class(updater_name)(**updater_options)
  
      # find class and instantiate the detector:
      if "detector" in config:
          detector_name, detector_opts = config["detector"][-1]
          try:
              klass = get_detector_class(detector_name)
          except KeyError as exc:
              LOG.warning("Invalid change detector configuration: '%s'",
                          detector_name, exc_info=exc)
              return None
          thedetector = klass(**detector_opts)
          initparams["detector"] = thedetector
  
      return DynDnsClient(**initparams)