py>: Python scripts
py> operator runs a Python script using python
command.
See Python API documents for details including variable mappings to keyword arguments.
+step1:
py>: my_step1_method
+step2:
py>: tasks.MyWorkflow.step2
Options
-
py>
:
[PACKAGE.CLASS.]
METHOD
Name of a method to run.
Examples:
# sample.dig py>: tasks.MyWorkflow.my_task
This example assume the following directory structure:
.
├── sample.dig
└── tasks
└── __init__.py
You can write __init__.py
like:
# __init__.py
class MyWorkflow(object):
def my_task(self):
print("awesome execution")
Or, you can create put a Python script named tasks.py
in a same directory as dig file.
.
├── sample.dig
└── tasks.py
Here is the example of tasks.py
:
# tasks.py
class MyWorkflow(object):
def my_task(self):
print("awesome execution")
You can write a function without creating a class as the following:
# simple_sample.dig
py>: simple_tasks.my_func
.
├── simple_sample.dig
└── simple_tasks.py
# simple_tasks.py
def my_func():
print("simple execution")
You can pass arguments to class for initialization by defining arguments under the py>:
operation as the following:
# 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:
# 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:
# 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:
# sample.dig
+some_task:
py>: simple_tasks.my_func
required1: simple execution
required2: {a: "a"}
# simple_sample.dig
+some_task:
_export:
required1: simple execution
required2: {a: "a"}
py>: simple_tasks.my_func
# 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:
# sample.dig
+some_task:
py>: tasks.MyWorkflow.my_task
required_class_arg: awesome execution
required_method_arg: ["a", "b"]
# sample.dig
+some_task:
_export:
required_class_arg: awesome execution
required_method_arg: ["a", "b"]
py>: tasks.MyWorkflow.my_task
# 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 thepython
option.Examples:
yamlyamlpython: /opt/conda/bin/python
python: ["python", "-v"]
It is also possible to configure in
_export
section.Examples:
_export: py: python: /opt/conda/bin/python