def set_input(self, p_name, value):
        """Set a Step's input variable to a certain value.

        The value comes either from a workflow input or output of a previous
            step.

        Args:
            name (str): the name of the Step input
            value (str): the name of the output variable that provides the
                value for this input.

        Raises:
            ValueError: The name provided is not a valid input name for this
                Step.
        """
        name = self.python_names.get(p_name)
        if p_name is None or name not in self.get_input_names():
            raise ValueError('Invalid input "{}"'.format(p_name))
        self.step_inputs[name] = value