Source code for ewoksid16a.tasks.fluo.patch_config
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Tue Feb 10 20:40:04 2026
@author: blissadm
"""
import os
import time
from ewokscore import Task
from PyMca5.PyMcaIO import ConfigDict
DEFAULTS = {
"batchconfig_ext": ".batch.cfg",
"batch_force": {
"fit.stripflag": 0,
"fit.fitweight": 0,
"fit.linearfitflag": 1,
},
"retryPeriod": 3,
"retryN": 1200,
"force_overwrite": False,
"output_root_group": None,
}
[docs]
class PatchConfigFile(
Task,
input_names=[
"bliss_scan_uri",
"detector_name",
"config_file",
"output_root_uri",
],
optional_input_names=[
"batchconfig_ext",
"batch_force",
"retryPeriod",
"retryN",
"force_overwrite",
"output_root_group",
],
output_names=[
"bliss_scan_uri",
"detector_name",
"output_root_uri",
"config_file",
"output_root_group",
],
):
[docs]
def run(self):
pars = {**DEFAULTS, **self.get_input_values()}
self.outputs.bliss_scan_uri = pars["bliss_scan_uri"]
self.outputs.output_root_uri = pars["output_root_uri"]
self.outputs.detector_name = pars["detector_name"]
self.outputs.output_root_group = pars["output_root_group"]
config_file = pars["config_file"]
batch_ext = pars["batchconfig_ext"]
batch_force = pars["batch_force"]
force_overwrite = pars["force_overwrite"]
retryPeriod = pars["retryPeriod"]
retryN = pars["retryN"]
for i in range(retryN):
if os.path.isfile(config_file):
break
time.sleep(retryPeriod)
else:
raise RuntimeError(f"Config file {config_file} not found!")
root, ext = os.path.splitext(config_file)
batch_savefile = root + batch_ext
if force_overwrite or not os.path.isfile(batch_savefile):
cfg = ConfigDict.ConfigDict(filelist=config_file)
for k in batch_force:
_c = cfg
kk = k.split(".")
for _k in kk[:-1]:
_c = _c[_k]
_c[kk[-1]] = batch_force[k]
cfg.write(batch_savefile)
self.outputs.config_file = batch_savefile