frompydanticimportBaseModelfromtyping_extensionsimportAnnotatedfromhera.sharedimportglobal_configfromhera.workflowsimportInput,Output,Parameter,Workflowglobal_config.experimental_features["decorator_syntax"]=True# Create a Workflow - we pass arguments here for the# entrypoint (designated by the `set_entrypoint` decorator)w=Workflow(generate_name="parameters-workflow-",arguments={"value_b":"a value for b!"},)classSetupConfig(BaseModel):a_param:strclassSetupOutput(Output):environment_parameter:stran_annotated_parameter:Annotated[int,Parameter(description="infer name from field")]setup_config:Annotated[SetupConfig,Parameter(name="setup-config")]# a Pydantic BaseModel can be a single input Parameter@w.script()defsetup()->SetupOutput:returnSetupOutput(environment_parameter="linux",an_annotated_parameter=42,setup_config=SetupConfig(a_param="test"),result="Setting things up",)classConcatConfig(BaseModel):reverse:boolclassConcatInput(Input):word_a:Annotated[str,Parameter(name="word_a")]=""word_b:strconcat_config:ConcatConfig=ConcatConfig(reverse=False)@w.script()defconcat(concat_input:ConcatInput)->Output:res=f"{concat_input.word_a}{concat_input.word_b}"ifconcat_input.concat_config.reverse:res=res[::-1]returnOutput(result=res)classWorkerConfig(BaseModel):param_1:strparam_2:strclassWorkerInput(Input):value_a:str="my default"value_b:stran_int_value:int=42a_basemodel:WorkerConfig=WorkerConfig(param_1="Hello",param_2="world")classWorkerOutput(Output):result_value:stranother_value:str@w.set_entrypoint@w.dag()defworker(worker_input:WorkerInput)->WorkerOutput:setup_task=setup()task_a=concat(ConcatInput(word_a=worker_input.value_a,word_b=setup_task.environment_parameter+str(setup_task.an_annotated_parameter),))task_b=concat(ConcatInput(word_a=worker_input.value_b,word_b=setup_task.result))final_task=concat(ConcatInput(word_a=task_a.result,word_b=task_b.result))returnWorkerOutput(result_value=final_task.result,another_value=setup_task.an_annotated_parameter,)
apiVersion:argoproj.io/v1alpha1kind:Workflowmetadata:generateName:parameters-workflow-spec:entrypoint:workertemplates:-name:setupoutputs:parameters:-name:environment_parametervalueFrom:path:/tmp/hera-outputs/parameters/environment_parameter-name:an_annotated_parameterdescription:infer name from fieldvalueFrom:path:/tmp/hera-outputs/parameters/an_annotated_parameter-name:setup-configvalueFrom:path:/tmp/hera-outputs/parameters/setup-configscript:image:python:3.9source:'{{inputs.parameters}}'args:--m-hera.workflows.runner--e-examples.workflows.experimental.new_dag_decorator_params:setupcommand:-pythonenv:-name:hera__outputs_directoryvalue:/tmp/hera-outputs-name:hera__script_pydantic_iovalue:''-name:concatinputs:parameters:-name:word_adefault:''-name:word_b-name:concat_configdefault:'{"reverse":false}'script:image:python:3.9source:'{{inputs.parameters}}'args:--m-hera.workflows.runner--e-examples.workflows.experimental.new_dag_decorator_params:concatcommand:-pythonenv:-name:hera__outputs_directoryvalue:/tmp/hera-outputs-name:hera__script_pydantic_iovalue:''-name:workerdag:tasks:-name:setup-tasktemplate:setup-name:task-adepends:setup-tasktemplate:concatarguments:parameters:-name:word_avalue:'{{inputs.parameters.value_a}}'-name:word_bvalue:'{{tasks.setup-task.outputs.parameters.environment_parameter}}{{tasks.setup-task.outputs.parameters.an_annotated_parameter}}'-name:concat_configvalue:'{"reverse":false}'-name:task-bdepends:setup-tasktemplate:concatarguments:parameters:-name:word_avalue:'{{inputs.parameters.value_b}}'-name:word_bvalue:'{{tasks.setup-task.outputs.result}}'-name:concat_configvalue:'{"reverse":false}'-name:final-taskdepends:task-a && task-btemplate:concatarguments:parameters:-name:word_avalue:'{{tasks.task-a.outputs.result}}'-name:word_bvalue:'{{tasks.task-b.outputs.result}}'-name:concat_configvalue:'{"reverse":false}'inputs:parameters:-name:value_adefault:my default-name:value_b-name:an_int_valuedefault:'42'-name:a_basemodeldefault:'{"param_1":"Hello","param_2":"world"}'outputs:parameters:-name:result_valuevalueFrom:parameter:'{{tasks.final-task.outputs.result}}'-name:another_valuevalueFrom:parameter:'{{tasks.setup-task.outputs.parameters.an_annotated_parameter}}'arguments:parameters:-name:value_bvalue:a value for b!