diff --git a/digdag-docs/src/operators/py.md b/digdag-docs/src/operators/py.md index be466f6bf3..62eb3d9db7 100644 --- a/digdag-docs/src/operators/py.md +++ b/digdag-docs/src/operators/py.md @@ -76,6 +76,114 @@ See [Python API documents](../python_api.html) for details including variable ma print("simple execution") ``` + You can pass arguments to class for initialization by defining arguments under the `py>:` operation as the following: + ```yaml + # sample.dig + +some_task: + py>: tasks.MyWorkflow.my_task + required1_1: awesome execution + required1_2: "awesome execution" + required2: {a: "a"} + required3: 1 + required4: 1.0 + required5: [a, 1, 1.0, "a"] + ``` + + Also, you can do the same thing using `_export` as the following: + ```yaml + # sample.dig + +some_task: + _export: + required1_1: awesome execution + required1_2: "awesome execution" + required2: {a: "a"} + required3: 1 + required4: 1.0 + required5: [a, 1, 1.0, "a"] + py>: tasks.MyWorkflow.my_task + ``` + + This example assume following Python script: + + ```python + # tasks.py + from typing import Union + + + class MyWorkflow(object): + def __init__( + self, + required1_1: str, + required1_2: str, + required2: dict[str, str], + required3: int, + required4: float, + required5: list[Union[str, int, float]] + ): + print(f"{required1_1} same as {required1_2}") + self.arg2 = required2 + print(f"{float(required3)} same as {required4}") + self.arg5 = required5 + + def my_task(self): + pass + ``` + + Or, you can pass arguments to function as the following: + + ```yaml + # sample.dig + +some_task: + py>: simple_tasks.my_func + required1: simple execution + required2: {a: "a"} + ``` + + ```yaml + # simple_sample.dig + +some_task: + _export: + required1: simple execution + required2: {a: "a"} + py>: simple_tasks.my_func + ``` + + ```python + # simple_tasks.py + def my_func(required1: str, required2: dict[str, str]): + print(f"{required1}: {required2}") + ``` + + Finally, you can pass combination (must have different names) of class and mehtod arguments to Python script as the following: + + ```yaml + # sample.dig + +some_task: + py>: tasks.MyWorkflow.my_task + required_class_arg: awesome execution + required_method_arg: ["a", "b"] + ``` + + ```yaml + # sample.dig + +some_task: + _export: + required_class_arg: awesome execution + required_method_arg: ["a", "b"] + py>: tasks.MyWorkflow.my_task + ``` + + ```python + # tasks.py + class MyWorkflow: + def __init__(self, required_class_arg: str): + self.arg = required_class_arg + + def my_task(self, required_method_arg: list[str]): + print(f"{self.arg}: {required_method_arg}") + ``` + + * **python**: PATH STRING or COMMAND ARGUMENTS LIST The python defaults to `python`. If an alternate python and options are desired, use the `python` option. diff --git a/examples/python_args.dig b/examples/python_args.dig index 86cf108771..0cec0ac8f5 100644 --- a/examples/python_args.dig +++ b/examples/python_args.dig @@ -19,3 +19,9 @@ timezone: UTC key1: "a" key2: "val2" ++e: + _export: + key1: "a" + key2: {b: "c"} + py>: tasks.python_args.exported_arguments +