Step inputs

Automation steps without inputs are not very useful. So let's add some!
First, create a new Python module called with the following content:

from freyja import Step, Automation, Input, Output
class HelloYou(Step):
    first_name = Input(str, description="Your first name")
    last_name = Input(str, description="Your last name", default="Doe")
    full_name = Output(str)
    def execute(self):
        self.full_name = self.first_name + " " + self.last_name
        print(f"Hello {self.full_name}!")
if __name__ == "__main__":

This new automation step has two inputs of type string, first_name and last_name. Optional input descriptions can be provided too and are printed in the command synopsis when running the script with the '--help' argument.

The second input last_name has a default value and thus becomes an optional input. The execute function simply concatenates both strings, assigns the result to step output full_name, and prints the full name to the console.

Let's execute this new script:

$ python run
python run [args]
run: error: missing input --first_name

As you can see, the automation script complains that we did not specify the first_name input. In other words, the automation script knows which inputs are required and does not allow us to run it without specifying them. Let's try again with both inputs specified:

$ python run --first_name Rosalind --last_name Franklin
2019-03-18 14:06:21,713    INFO [  freyja.log:  68]: (MainThread  ) Logging configured
2019-03-18 14:06:21,713    INFO [freyja.graph: 362]: (MainThread  ) Process: 11210
2019-03-18 14:06:21,714    INFO [freyja.graph: 489]: (MainThread  ) Instantiating Step <HelloYou "main">
2019-03-18 14:06:21,714    INFO [freyja.graph: 217]: (MainThread  ) Step <HelloYou ("main")> queued for execution
2019-03-18 14:06:21,715    INFO [freyja.graph: 648]: (main        ) Initiating execution for for: Step <HelloYou ("main")>
2019-03-18 14:06:21,715    INFO [freyja.graph: 658]: (main        ) Execution started for: Step <HelloYou ("main")>
2019-03-18 14:06:21,716    INFO [freyja.graph: 664]: (main        ) RUNNING: main
Hello Rosalind Franklin!
2019-03-18 14:06:21,716    INFO [freyja.graph: 690]: (main        ) Execution finished for: Step <HelloYou ("main")>
2019-03-18 14:06:21,717    INFO [freyja.graph: 114]: (Executor-main) Executor done
2019-03-18 14:06:21,717    INFO [freyja.graph: 406]: (MainThread  )
Execution summary:
    Steps instantiated: 1
    Steps incomplete:   0
    Steps executed:     1
    Steps failed:       0

This time the script executes successfully and we see the expected output 'Hello Rosalind Franklin!'.