automatic saving of persistent parameters
change persistent flag to be an enum off/on/auto Change-Id: I3b1685ea76afb3b7f8c2e6ca63fbf81fa987750e Reviewed-on: https://forge.frm2.tum.de/review/c/sine2020/secop/playground/+/27100 Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de> Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de> Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
This commit is contained in:
@ -56,12 +56,14 @@ import os
|
|||||||
import json
|
import json
|
||||||
|
|
||||||
from secop.lib import getGeneralConfig
|
from secop.lib import getGeneralConfig
|
||||||
from secop.params import Parameter, Property, BoolType, Command
|
from secop.datatypes import EnumType
|
||||||
|
from secop.params import Parameter, Property, Command
|
||||||
from secop.modules import HasAccessibles
|
from secop.modules import HasAccessibles
|
||||||
|
|
||||||
|
|
||||||
class PersistentParam(Parameter):
|
class PersistentParam(Parameter):
|
||||||
persistent = Property('persistence flag', BoolType(), default=True)
|
persistent = Property('persistence flag (auto means: save automatically on any change)',
|
||||||
|
EnumType(off=0, on=1, auto=2), default=1)
|
||||||
|
|
||||||
|
|
||||||
class PersistentMixin(HasAccessibles):
|
class PersistentMixin(HasAccessibles):
|
||||||
@ -73,8 +75,12 @@ class PersistentMixin(HasAccessibles):
|
|||||||
self.initData = {}
|
self.initData = {}
|
||||||
for pname in self.parameters:
|
for pname in self.parameters:
|
||||||
pobj = self.parameters[pname]
|
pobj = self.parameters[pname]
|
||||||
if not pobj.readonly and getattr(pobj, 'persistent', False):
|
if not pobj.readonly and getattr(pobj, 'persistent', 0):
|
||||||
self.initData[pname] = pobj.value
|
self.initData[pname] = pobj.value
|
||||||
|
if pobj.persistent == 'auto':
|
||||||
|
def cb(value, m=self):
|
||||||
|
m.saveParameters()
|
||||||
|
self.valueCallbacks[pname].append(cb)
|
||||||
self.writeDict.update(self.loadParameters(write=False))
|
self.writeDict.update(self.loadParameters(write=False))
|
||||||
|
|
||||||
def loadParameters(self, write=True):
|
def loadParameters(self, write=True):
|
||||||
@ -88,7 +94,7 @@ class PersistentMixin(HasAccessibles):
|
|||||||
try:
|
try:
|
||||||
with open(self.persistentFile, 'r') as f:
|
with open(self.persistentFile, 'r') as f:
|
||||||
self.persistentData = json.load(f)
|
self.persistentData = json.load(f)
|
||||||
except FileNotFoundError:
|
except Exception:
|
||||||
self.persistentData = {}
|
self.persistentData = {}
|
||||||
writeDict = {}
|
writeDict = {}
|
||||||
for pname in self.parameters:
|
for pname in self.parameters:
|
||||||
|
Reference in New Issue
Block a user