docs: def find_signature_parameters(callable_, candidates,
                                excluded=('self', 'cls')):
      """Find on a set of candidates the parameters needed to execute a callable.
  
      Returns a dictionary with the `candidates` found on `callable_`.
      When any of the required parameters of a callable is not found,
      it raises a `AttributeError` exception. A signature parameter
      whitout a default value is considered as required.
  
      :param callable_: callable object
      :param candidates: dict with the possible parameters to use
          with the callable
      :param excluded: tuple with default parameters to exclude
  
      :result: dict of parameters ready to use with the callable
  
      :raises AttributeError: when any of the required parameters for
          executing a callable is not found in `candidates`
      """
      signature_params = inspect_signature_parameters(callable_,
                                                      excluded=excluded)
      exec_params = {}
  
      add_all = False
      for param in signature_params:
          name = param.name
  
          if str(param).startswith('*'):
              add_all = True
          elif name in candidates:
              exec_params[name] = candidates[name]
          elif param.default == inspect.Parameter.empty:
              msg = "required argument %s not found" % name
              raise AttributeError(msg, name)
          else:
              continue
  
      if add_all:
          exec_params = candidates
  
      return exec_params