73 lines
1.7 KiB
Python
73 lines
1.7 KiB
Python
from epics import get_pv as PV
|
|
|
|
from data import load_data, save_data, mk_db
|
|
from log import log
|
|
from utils import toggle
|
|
|
|
|
|
FN_ENTRIES = "/ioc/data/SATES20-CPCL-DYNA/entries"
|
|
FN_DB_TMPL = "/ioc/data/SATES20-CPCL-DYNA/dynamic.template"
|
|
|
|
|
|
pv_name = PV("SATES20-DYNA:NAME")
|
|
pv_dtyp = PV("SATES20-DYNA:TYPE")
|
|
pv_dtyp.get_ctrlvars() # without this, the enum returns only str(number)
|
|
pv_list = PV("SATES20-DYNA:LIST")
|
|
|
|
|
|
@toggle
|
|
def cb_add(value=None, **kwargs):
|
|
name = pv_name.get()
|
|
if not name:
|
|
log.info(f"add: ignoring name={repr(name)}")
|
|
return
|
|
dtyp = pv_dtyp.get(as_string=True)
|
|
log.info(f"add: name={repr(name)} type={repr(dtyp)} {kwargs}")
|
|
data = load_data(FN_ENTRIES)
|
|
data[name] = dtyp
|
|
save_data(data, FN_ENTRIES)
|
|
mk_db(data, FN_DB_TMPL)
|
|
log.info(f"data: {data}")
|
|
pv_list.put(mk_printable_data(data))
|
|
|
|
|
|
@toggle
|
|
def cb_remove(value=None, **kwargs):
|
|
name = pv_name.get()
|
|
if not name:
|
|
log.info(f"remove: ignoring name={repr(name)}")
|
|
return
|
|
log.info(f"remove: name={repr(name)} {kwargs}")
|
|
data = load_data(FN_ENTRIES)
|
|
data.pop(name, None)
|
|
save_data(data, FN_ENTRIES)
|
|
mk_db(data, FN_DB_TMPL)
|
|
log.info(f"data: {data}")
|
|
pv_list.put(mk_printable_data(data))
|
|
|
|
|
|
@toggle
|
|
def cb_clear(value=None, **kwargs):
|
|
log.info(f"clear: {kwargs}")
|
|
data = {}
|
|
save_data(data, FN_ENTRIES)
|
|
mk_db(data, FN_DB_TMPL)
|
|
log.info(f"data: {data}")
|
|
pv_list.put(mk_printable_data(data))
|
|
|
|
|
|
pv_add = PV("SATES20-DYNA:ADD")
|
|
pv_add.add_callback(cb_add)
|
|
|
|
pv_remove = PV("SATES20-DYNA:REMOVE")
|
|
pv_remove.add_callback(cb_remove)
|
|
|
|
pv_clear = PV("SATES20-DYNA:CLEAR")
|
|
pv_clear.add_callback(cb_clear)
|
|
|
|
|
|
def mk_printable_data(data):
|
|
return "\n".join(f"{k} ({v})" for k, v in sorted(data.items()))
|
|
|
|
|