switched to new PV names; added toggle logic
This commit is contained in:
@ -1,38 +1,49 @@
|
|||||||
from epics import PV
|
from epics import get_pv as PV
|
||||||
|
|
||||||
from data import load_data, save_data, mk_db
|
from data import load_data, save_data, mk_db
|
||||||
from log import log
|
from log import log
|
||||||
|
from utils import toggle
|
||||||
|
|
||||||
|
|
||||||
FN_ENTRIES = "/ioc/data/SATES20-CPCL-DYNA/entries"
|
FN_ENTRIES = "/ioc/data/SATES20-CPCL-DYNA/entries"
|
||||||
FN_DB_TMPL = "/ioc/data/SATES20-CPCL-DYNA/dynamic.template"
|
FN_DB_TMPL = "/ioc/data/SATES20-CPCL-DYNA/dynamic.template"
|
||||||
|
|
||||||
|
|
||||||
def cb_new(value=None, **kwargs):
|
pv_name = PV("SATES20-DYNA:NAME")
|
||||||
log.info(f"new: value={repr(value)} {kwargs}")
|
|
||||||
if not value:
|
|
||||||
return
|
|
||||||
data = load_data(FN_ENTRIES)
|
|
||||||
data.add(value)
|
|
||||||
save_data(data, FN_ENTRIES)
|
|
||||||
mk_db(data, FN_DB_TMPL)
|
|
||||||
log.info(f"data: {sorted(data)}")
|
|
||||||
|
|
||||||
def cb_del(value=None, **kwargs):
|
|
||||||
log.info(f"del: value={repr(value)} {kwargs}")
|
@toggle
|
||||||
if not value:
|
def cb_add(value=None, **kwargs):
|
||||||
|
name = pv_name.get()
|
||||||
|
if not name:
|
||||||
|
log.info(f"add: ignoring name={repr(name)}")
|
||||||
return
|
return
|
||||||
|
log.info(f"add: name={repr(name)} {kwargs}")
|
||||||
data = load_data(FN_ENTRIES)
|
data = load_data(FN_ENTRIES)
|
||||||
data.discard(value)
|
data.add(name)
|
||||||
save_data(data, FN_ENTRIES)
|
save_data(data, FN_ENTRIES)
|
||||||
mk_db(data, FN_DB_TMPL)
|
mk_db(data, FN_DB_TMPL)
|
||||||
log.info(f"data: {sorted(data)}")
|
log.info(f"data: {sorted(data)}")
|
||||||
|
|
||||||
|
|
||||||
pv_new = PV("SATES20-DYNA:NEW")
|
@toggle
|
||||||
pv_new.add_callback(cb_new)
|
def cb_remove(value=None, **kwargs):
|
||||||
|
name = pv_name.get()
|
||||||
pv_del = PV("SATES20-DYNA:DEL")
|
if not name:
|
||||||
pv_del.add_callback(cb_del)
|
log.info(f"remove: ignoring name={repr(name)}")
|
||||||
|
return
|
||||||
|
log.info(f"remove: name={repr(name)} {kwargs}")
|
||||||
|
data = load_data(FN_ENTRIES)
|
||||||
|
data.discard(name)
|
||||||
|
save_data(data, FN_ENTRIES)
|
||||||
|
mk_db(data, FN_DB_TMPL)
|
||||||
|
log.info(f"data: {sorted(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)
|
||||||
|
|
||||||
|
|
||||||
|
29
SATES20-CPCL-DYNA/cfg/python/utils.py
Normal file
29
SATES20-CPCL-DYNA/cfg/python/utils.py
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
import functools
|
||||||
|
import threading
|
||||||
|
|
||||||
|
from epics import get_pv as PV
|
||||||
|
|
||||||
|
from log import log
|
||||||
|
|
||||||
|
|
||||||
|
def toggle(func):
|
||||||
|
@functools.wraps(func)
|
||||||
|
def wrapper(value=None, pvname=None, **kwargs):
|
||||||
|
fn = func.__name__
|
||||||
|
if not value:
|
||||||
|
log.info(f"{fn}: ignoring value={repr(value)}")
|
||||||
|
return
|
||||||
|
|
||||||
|
func(value=value, pvname=pvname, **kwargs)
|
||||||
|
|
||||||
|
pv = PV(pvname)
|
||||||
|
call_later(pv.put, 0)
|
||||||
|
log.info(f"{fn}: done")
|
||||||
|
|
||||||
|
return wrapper
|
||||||
|
|
||||||
|
|
||||||
|
def call_later(func, *args, **kwargs):
|
||||||
|
threading.Thread(target=func, args=args, kwargs=kwargs).start()
|
||||||
|
|
||||||
|
|
Reference in New Issue
Block a user