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:
python: /opt/conda/bin/python
python: ["python", "-v"]
It is also possible to configure in
_export
section.Examples:
_export: py: python: /opt/conda/bin/python