Skip to content

Commit

Permalink
Add call to serialize, add object to serialize in io example
Browse files Browse the repository at this point in the history
Signed-off-by: Elliot Gunton <egunton@bloomberg.net>
  • Loading branch information
elliotgunton committed Jan 18, 2024
1 parent 01a294e commit 22fb851
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 1 deletion.
11 changes: 11 additions & 0 deletions docs/examples/workflows/experimental/script_pydantic_io.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,11 @@
=== "Hera"

```python linenums="1"
try:
from pydantic.v1 import BaseModel
except ImportError:
from pydantic import BaseModel

from hera.shared import global_config
from hera.workflows import Artifact, ArtifactLoader, Parameter, Workflow, script
from hera.workflows.io import RunnerInput, RunnerOutput
Expand All @@ -20,9 +25,13 @@
global_config.experimental_features["script_annotations"] = True
global_config.experimental_features["script_pydantic_io"] = True

class MyObject(BaseModel):
a_dict: dict = {}
a_str: str = "a default string"

class MyInput(RunnerInput):
param_int: Annotated[int, Parameter(name="param-input")] = 42
an_object: Annotated[MyObject, Parameter(name="obj-input")] = MyObject(a_dict={"my-key": "a-value"}, a_str="hello world!")
artifact_int: Annotated[int, Artifact(name="artifact-input", loader=ArtifactLoader.json)]


Expand Down Expand Up @@ -58,6 +67,8 @@
parameters:
- default: '42'
name: param-input
- default: '{"a_dict": {"my-key": "a-value"}, "a_str": "hello world!"}'
name: obj-input
name: pydantic-io
outputs:
artifacts:
Expand Down
2 changes: 2 additions & 0 deletions examples/workflows/experimental/script-pydantic-io.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ spec:
parameters:
- default: '42'
name: param-input
- default: '{"a_dict": {"my-key": "a-value"}, "a_str": "hello world!"}'
name: obj-input
name: pydantic-io
outputs:
artifacts:
Expand Down
9 changes: 9 additions & 0 deletions examples/workflows/experimental/script_pydantic_io.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
try:
from pydantic.v1 import BaseModel
except ImportError:
from pydantic import BaseModel

from hera.shared import global_config
from hera.workflows import Artifact, ArtifactLoader, Parameter, Workflow, script
from hera.workflows.io import RunnerInput, RunnerOutput
Expand All @@ -10,9 +15,13 @@
global_config.experimental_features["script_annotations"] = True
global_config.experimental_features["script_pydantic_io"] = True

class MyObject(BaseModel):
a_dict: dict = {}
a_str: str = "a default string"

class MyInput(RunnerInput):
param_int: Annotated[int, Parameter(name="param-input")] = 42
an_object: Annotated[MyObject, Parameter(name="obj-input")] = MyObject(a_dict={"my-key": "a-value"}, a_str="hello world!")
artifact_int: Annotated[int, Artifact(name="artifact-input", loader=ArtifactLoader.json)]


Expand Down
4 changes: 3 additions & 1 deletion src/hera/workflows/io.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from typing import Any, List, Union

from hera.shared._pydantic import BaseModel
from hera.shared.serialization import serialize
from hera.workflows.artifact import Artifact
from hera.workflows.parameter import Parameter

Expand Down Expand Up @@ -30,7 +31,8 @@ def _get_parameters(cls) -> List[Parameter]:
if isinstance(get_args(annotations[field])[1], Parameter):
param = get_args(annotations[field])[1]
if cls.__fields__[field].default:
param.default = cls.__fields__[field].default
# Serialize the value (usually done in Parameter's validator)
param.default = serialize(cls.__fields__[field].default)
parameters.append(param)
else:
# Create a Parameter from basic type annotations
Expand Down

0 comments on commit 22fb851

Please sign in to comment.