more fixes to SeaWritable
+ fix mbe.cfg
This commit is contained in:
@@ -17,6 +17,18 @@ sea_object = tt
|
|||||||
class = secop_psi.sea.SeaReadable
|
class = secop_psi.sea.SeaReadable
|
||||||
iodev = sea_main
|
iodev = sea_main
|
||||||
sea_object = p
|
sea_object = p
|
||||||
|
extra_modules = vacuumpump gasflow tlimit tlimit_without_vacuum
|
||||||
|
|
||||||
|
[gasflow]
|
||||||
|
class = secop_psi.sea.SeaWritable
|
||||||
|
iodev = sea_main
|
||||||
|
single_module = p.gasflow
|
||||||
|
|
||||||
|
[vacuumpump]
|
||||||
|
class = secop_psi.sea.SeaWritable
|
||||||
|
iodev = sea_main
|
||||||
|
sea_object = p
|
||||||
|
rel_paths = vacuumpump tlimit tlimit_without_vacuum
|
||||||
|
|
||||||
[table]
|
[table]
|
||||||
class = secop_psi.sea.SeaModule
|
class = secop_psi.sea.SeaModule
|
||||||
|
|||||||
@@ -262,9 +262,10 @@ class SeaClient(ProxyClient, Module):
|
|||||||
if value is None:
|
if value is None:
|
||||||
value = oldv
|
value = oldv
|
||||||
if value != oldv or str(readerror) != str(oldr) or abs(now - oldt) > 60:
|
if value != oldv or str(readerror) != str(oldr) or abs(now - oldt) > 60:
|
||||||
# do not update unchanged values within 0.1 sec
|
# do not update unchanged values within 60 sec
|
||||||
self.updateValue(module, param, value, now, readerror)
|
self.updateValue(module, param, value, now, readerror)
|
||||||
|
|
||||||
|
|
||||||
@Command(StringType(), result=StringType())
|
@Command(StringType(), result=StringType())
|
||||||
def communicate(self, command):
|
def communicate(self, command):
|
||||||
"""send a command to SEA"""
|
"""send a command to SEA"""
|
||||||
@@ -364,18 +365,15 @@ class SeaModule(Module):
|
|||||||
visibility_level = cfgdict.pop('visibility_level', 2)
|
visibility_level = cfgdict.pop('visibility_level', 2)
|
||||||
|
|
||||||
single_module = cfgdict.pop('single_module', None)
|
single_module = cfgdict.pop('single_module', None)
|
||||||
print('new module', cls, single_module)
|
|
||||||
if single_module:
|
if single_module:
|
||||||
sea_object, base, paramdesc = extra_modules[single_module]
|
sea_object, base, paramdesc = extra_modules[single_module]
|
||||||
params = [paramdesc]
|
params = [paramdesc]
|
||||||
paramdesc['key'] = 'value'
|
paramdesc['key'] = 'value'
|
||||||
if issubclass(cls, SeaWritable):
|
if issubclass(cls, SeaWritable):
|
||||||
if paramdesc.get('readonly', True):
|
if paramdesc.get('readonly', True):
|
||||||
raise ConfigError('%s is not writable' % sea_object)
|
raise ConfigError('%s/%s is not writable' % (sea_object, paramdesc['path']))
|
||||||
targetdesc = dict(paramdesc, key='target')
|
paramdesc['key'] = 'target'
|
||||||
params.append(targetdesc)
|
paramdesc['readonly'] = True
|
||||||
paramdesc['readonly'] = True
|
|
||||||
# print('SINGLE %s/%s %s %r' % (base, paramdesc['path'], cls.__name__, params))
|
|
||||||
extra_module_set = ()
|
extra_module_set = ()
|
||||||
if 'description' not in cfgdict:
|
if 'description' not in cfgdict:
|
||||||
cfgdict['description'] = '%s@%s' % (single_module, json_file)
|
cfgdict['description'] = '%s@%s' % (single_module, json_file)
|
||||||
@@ -390,11 +388,10 @@ class SeaModule(Module):
|
|||||||
# sea_object, descr = json.load(fp)
|
# sea_object, descr = json.load(fp)
|
||||||
with open(join(seaconfdir, json_file)) as fp:
|
with open(join(seaconfdir, json_file)) as fp:
|
||||||
descr = json.load(fp)[sea_object]
|
descr = json.load(fp)[sea_object]
|
||||||
print(cls, 'rel_paths', rel_paths)
|
|
||||||
if rel_paths == '*' or not rel_paths:
|
if rel_paths == '*' or not rel_paths:
|
||||||
# take all
|
# take all
|
||||||
main = descr['params'][0]
|
main = descr['params'][0]
|
||||||
if isinstance(cls, Readable):
|
if issubclass(cls, Readable):
|
||||||
# assert main['path'] == '' # TODO: check cases where this fails
|
# assert main['path'] == '' # TODO: check cases where this fails
|
||||||
main['key'] = 'value'
|
main['key'] = 'value'
|
||||||
else:
|
else:
|
||||||
@@ -420,7 +417,7 @@ class SeaModule(Module):
|
|||||||
descr['params'] = result
|
descr['params'] = result
|
||||||
rel0 = '' if rel_paths[0] == '.' else rel_paths[0]
|
rel0 = '' if rel_paths[0] == '.' else rel_paths[0]
|
||||||
if result[0]['path'] == rel0:
|
if result[0]['path'] == rel0:
|
||||||
if isinstance(cls, Readable):
|
if issubclass(cls, Readable):
|
||||||
result[0]['key'] = 'value'
|
result[0]['key'] = 'value'
|
||||||
else:
|
else:
|
||||||
result.pop(0)
|
result.pop(0)
|
||||||
@@ -429,6 +426,13 @@ class SeaModule(Module):
|
|||||||
# logger.info('PARAMS %s %r', name, result)
|
# logger.info('PARAMS %s %r', name, result)
|
||||||
base = descr['base']
|
base = descr['base']
|
||||||
params = descr['params']
|
params = descr['params']
|
||||||
|
if issubclass(cls, SeaWritable):
|
||||||
|
paramdesc = params[0]
|
||||||
|
assert paramdesc['key'] == 'value'
|
||||||
|
if paramdesc.get('readonly', True):
|
||||||
|
raise ConfigError('%s/%s is not writable' % (sea_object, paramdesc['path']))
|
||||||
|
paramdesc['key'] = 'target'
|
||||||
|
paramdesc['readonly'] = False
|
||||||
extra_module_set = cfgdict.pop('extra_modules', ())
|
extra_module_set = cfgdict.pop('extra_modules', ())
|
||||||
if extra_module_set:
|
if extra_module_set:
|
||||||
extra_module_set = set(extra_module_set.replace(',', ' ').split())
|
extra_module_set = set(extra_module_set.replace(',', ' ').split())
|
||||||
@@ -455,7 +459,7 @@ class SeaModule(Module):
|
|||||||
if key is None:
|
if key is None:
|
||||||
if len(pathlist) > 0:
|
if len(pathlist) > 0:
|
||||||
if len(pathlist) == 1:
|
if len(pathlist) == 1:
|
||||||
if isinstance(cls, Readable):
|
if issubclass(cls, Readable):
|
||||||
kwds['group'] = 'more'
|
kwds['group'] = 'more'
|
||||||
else:
|
else:
|
||||||
kwds['group'] = pathlist[-2]
|
kwds['group'] = pathlist[-2]
|
||||||
@@ -466,6 +470,8 @@ class SeaModule(Module):
|
|||||||
break
|
break
|
||||||
if key == 'is_running':
|
if key == 'is_running':
|
||||||
kwds['export'] = False
|
kwds['export'] = False
|
||||||
|
if key == 'target' and kwds.get('group') == 'more':
|
||||||
|
kwds.pop('group')
|
||||||
if key in cls.accessibles:
|
if key in cls.accessibles:
|
||||||
if key == 'target':
|
if key == 'target':
|
||||||
kwds['readonly'] = False
|
kwds['readonly'] = False
|
||||||
@@ -474,6 +480,10 @@ class SeaModule(Module):
|
|||||||
else:
|
else:
|
||||||
pobj = Parameter(**kwds)
|
pobj = Parameter(**kwds)
|
||||||
datatype = pobj.datatype
|
datatype = pobj.datatype
|
||||||
|
if issubclass(cls, SeaWritable) and key == 'target':
|
||||||
|
kwds['readonly'] = True
|
||||||
|
attributes['value'] = Parameter(**kwds)
|
||||||
|
|
||||||
hdbpath = '/'.join([base] + pathlist)
|
hdbpath = '/'.join([base] + pathlist)
|
||||||
if key in extra_module_set:
|
if key in extra_module_set:
|
||||||
extra_modules[name + '.' + key] = sea_object, base, paramdesc
|
extra_modules[name + '.' + key] = sea_object, base, paramdesc
|
||||||
@@ -568,6 +578,7 @@ class SeaWritable(SeaModule, Writable):
|
|||||||
return self.target
|
return self.target
|
||||||
|
|
||||||
def update_target(self, value, timestamp, readerror):
|
def update_target(self, value, timestamp, readerror):
|
||||||
|
self.target = value
|
||||||
if not readerror:
|
if not readerror:
|
||||||
self.value = value
|
self.value = value
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user