...
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
''' Trying to be declarative, but then workflow.add(...) might need to be workflow.jobs(Job(...)) to be consistent. Don't like how the function names aren't verbs. ''' job = workflow.add(Job(transformation, arguments))\ .profiles(namespace, "key", "value")\ .metadata({"time": "60"})\ .metadata({"key": "value"})\ .hooks(ShellHook(args))\ .inputs(a)\ .outputs(b1, b2, stage_out=True) ''' Verbose, explicitly stating operations on job. The following two assignments are the same. ''' job = workflow.add_job(transformation, arguments...)\ .add_profile(namespace, "key", "value")\ .add_metadata(**{"time": "60", "key": "value"})\ .add_shell_hook(args)\ .add_inputs(a)\ .add_outputs(b1, b2, stage_out=True) job = workflow.add_job(Job(transformation, args))\ .add_profile(Profile(namespace, "key", "value"))\ .add_metadata(*[Metadata("time", "60"), Metadata("key", "value")])\ .add_shell_hook(args)\ .add_inputs(a)\ .add_outputs(b1, b2, stage_out=True) ''' List/Set semantics.Can't chain as job.<member>.add(something) won't return back a ref to the job (unless we make it but that would look awkward) ''' job = workflow.add(Job(transformation, arguments)) # List semantics for (job.args) job.arguments.append("A") job.arguments.extend( ["A", "B"] ) # Set semantics for (job.profiles) job.profiles.add(namespace, "key", "value") # Dict semantics for job.{<namespace>,metadata}.* job.env.key = "value" job.env["key"] = "value" job.env.update( {"key1": "value1", "key2": "value2"} ) job.metadata.add({"time": "60"}) job.metadata.add({"key": "value"}) job.hooks.add(ShellHook(args)) job.inputs.add(a) job.outputs.add(b1, b2, stage_out=True) |
...