Source code for blissoda.fluo.parameters.utils.execute
import os
import sys
import time
from datetime import timedelta
from pprint import pprint
from typing import List
try:
from ewoks import show_graph as _show_graph
except ImportError:
_show_graph = None
try:
from ewoks import execute_graph as _execute_graph
except ImportError:
_execute_graph = None
from . import defaults
from . import directories
[docs]
def execute_graph(workflow: str, inputs: List[dict], convert_destination: str):
"""Used by offline processing scripts."""
if not _execute_graph:
raise RuntimeError("Ewoks workflows cannot be excuted in this environment.")
directories.ensure_workflow_exists(workflow)
if _show_graph:
column_widths = {
"name": None,
"value": 80,
"task_identifier": None,
}
_show_graph(
workflow,
inputs=inputs,
column_widths=column_widths,
original_source=workflow,
)
sys.stdout.flush()
if defaults.DO_PROFILE:
task_options = {
"profile_directory": os.path.join(os.path.sep, "tmp", "ewoksprofile")
}
else:
task_options = None
start = time.time()
try:
print()
result = _execute_graph(
workflow,
inputs=inputs,
convert_destination=convert_destination,
task_options=task_options,
)
pprint(result)
finally:
end = time.time()
duration = timedelta(seconds=end - start)
print(f"\nDuration: {duration}")
if convert_destination:
print(f"\nWorkflow: {convert_destination}")
if task_options:
print(
f"\nProfiling results: {task_options['profile_directory']} (use 'pyprof2calltree -k -i ...' or 'snakeviz ...' to visualize the result)"
)