Source code for ewoksid22.wait
from ewokscore import Task
from silx.io.h5py_utils import retry, File, safe_top_level_names
from silx.utils.retry import RetryError
[docs]
@retry(retry_period=0.5)
def wait_scans_finished(filename, entries=None):
if not entries:
entries = safe_top_level_names(filename)
with File(filename, mode="r") as fh:
for entry in entries:
if "end_time" not in fh[entry]:
raise RetryError
print(f"Scan {entry} is finished")
[docs]
class WaitScansFinished(
Task,
input_names=["filename"],
optional_input_names=[
"entries",
"retry_timeout",
],
output_names=["filename", "entries"],
):
[docs]
def run(self):
if self.inputs.entries:
retry_timeout = self.get_input_value("retry_timeout", 10)
print(f"Wait: {self.inputs.filename} ({self.inputs.entries})")
wait_scans_finished(
self.inputs.filename,
entries=self.inputs.entries,
retry_timeout=retry_timeout,
)
self.outputs.filename = self.inputs.filename
self.outputs.entries = self.get_input_value("entries", None)