better order of accessibles: 'value' 'status' and 'target' first
- predefined parameters/commands appear first, in the order defined in frappy.params.PREDEFINED_ACCESSIBLES - other (custom) parameters by inheritance order - remove paramOrder attribute (not used currently) Change-Id: If4c43189e4837dba057dc0a430ac6c3d1ae10829 Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/34904 Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de> Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch> Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
This commit is contained in:
parent
0f0a177254
commit
facaca94eb
@ -33,7 +33,7 @@ from frappy.datatypes import ArrayOf, BoolType, EnumType, FloatRange, \
|
|||||||
from frappy.errors import BadValueError, CommunicationFailedError, ConfigError, \
|
from frappy.errors import BadValueError, CommunicationFailedError, ConfigError, \
|
||||||
ProgrammingError, SECoPError, secop_error, RangeError
|
ProgrammingError, SECoPError, secop_error, RangeError
|
||||||
from frappy.lib import formatException, mkthread, UniqueObject
|
from frappy.lib import formatException, mkthread, UniqueObject
|
||||||
from frappy.params import Accessible, Command, Parameter, Limit
|
from frappy.params import Accessible, Command, Parameter, Limit, PREDEFINED_ACCESSIBLES
|
||||||
from frappy.properties import HasProperties, Property
|
from frappy.properties import HasProperties, Property
|
||||||
from frappy.logging import RemoteLogHandler
|
from frappy.logging import RemoteLogHandler
|
||||||
|
|
||||||
@ -41,6 +41,7 @@ from frappy.logging import RemoteLogHandler
|
|||||||
# from .interfaces import SECoP_BASE_CLASSES
|
# from .interfaces import SECoP_BASE_CLASSES
|
||||||
# WORKAROUND:
|
# WORKAROUND:
|
||||||
SECoP_BASE_CLASSES = ['Readable', 'Writable', 'Drivable', 'Communicator']
|
SECoP_BASE_CLASSES = ['Readable', 'Writable', 'Drivable', 'Communicator']
|
||||||
|
PREDEF_ORDER = list(reversed(PREDEFINED_ACCESSIBLES))
|
||||||
|
|
||||||
Done = UniqueObject('Done')
|
Done = UniqueObject('Done')
|
||||||
"""a special return value for a read_<param>/write_<param> method
|
"""a special return value for a read_<param>/write_<param> method
|
||||||
@ -77,7 +78,7 @@ class HasAccessibles(HasProperties):
|
|||||||
for key, value in base.__dict__.items():
|
for key, value in base.__dict__.items():
|
||||||
if isinstance(value, Accessible):
|
if isinstance(value, Accessible):
|
||||||
value.updateProperties(merged_properties.setdefault(key, {}))
|
value.updateProperties(merged_properties.setdefault(key, {}))
|
||||||
if base == cls and key not in accessibles:
|
if base == cls and key not in accessibles and key not in PREDEFINED_ACCESSIBLES:
|
||||||
new_names.append(key)
|
new_names.append(key)
|
||||||
accessibles[key] = value
|
accessibles[key] = value
|
||||||
override_values.pop(key, None)
|
override_values.pop(key, None)
|
||||||
@ -97,17 +98,15 @@ class HasAccessibles(HasProperties):
|
|||||||
aobj.merge(merged_properties[aname])
|
aobj.merge(merged_properties[aname])
|
||||||
accessibles[aname] = aobj
|
accessibles[aname] = aobj
|
||||||
|
|
||||||
# rebuild order: (1) inherited items, (2) items from paramOrder, (3) new accessibles
|
# rebuild order:
|
||||||
# move (2) to the end
|
# (1) predefined accessibles, in a predefined order, (2) inherited custom items, (3) new custom items
|
||||||
paramOrder = cls.__dict__.get('paramOrder', ())
|
# move (1) to the beginning
|
||||||
for aname in paramOrder:
|
for key in PREDEF_ORDER:
|
||||||
if aname in accessibles:
|
if key in accessibles:
|
||||||
accessibles.move_to_end(aname)
|
accessibles.move_to_end(key, last=False)
|
||||||
# ignore unknown names
|
|
||||||
# move (3) to the end
|
# move (3) to the end
|
||||||
for aname in new_names:
|
for aname in new_names:
|
||||||
if aname not in paramOrder:
|
accessibles.move_to_end(aname)
|
||||||
accessibles.move_to_end(aname)
|
|
||||||
cls.accessibles = accessibles
|
cls.accessibles = accessibles
|
||||||
|
|
||||||
cls.wrappedAttributes = {'isWrapped': True}
|
cls.wrappedAttributes = {'isWrapped': True}
|
||||||
|
@ -564,15 +564,18 @@ class Limit(Parameter):
|
|||||||
|
|
||||||
|
|
||||||
# list of predefined accessibles with their type
|
# list of predefined accessibles with their type
|
||||||
|
# the order of this list affects the parameter order
|
||||||
PREDEFINED_ACCESSIBLES = {
|
PREDEFINED_ACCESSIBLES = {
|
||||||
'value': Parameter,
|
'value': Parameter,
|
||||||
'status': Parameter,
|
'status': Parameter,
|
||||||
'target': Parameter,
|
'target': Parameter,
|
||||||
'pollinterval': Parameter,
|
'pollinterval': Parameter,
|
||||||
'ramp': Parameter,
|
'ramp': Parameter,
|
||||||
'user_ramp': Parameter,
|
'use_ramp': Parameter,
|
||||||
'setpoint': Parameter,
|
'setpoint': Parameter,
|
||||||
'time_to_target': Parameter,
|
'time_to_target': Parameter,
|
||||||
|
'controlled_by': Parameter,
|
||||||
|
'control_active': Parameter,
|
||||||
'unit': Parameter, # reserved name
|
'unit': Parameter, # reserved name
|
||||||
'loglevel': Parameter, # reserved name
|
'loglevel': Parameter, # reserved name
|
||||||
'mode': Parameter, # reserved name
|
'mode': Parameter, # reserved name
|
||||||
|
@ -141,12 +141,10 @@ def test_ModuleMagic():
|
|||||||
|
|
||||||
|
|
||||||
# first inherited accessibles
|
# first inherited accessibles
|
||||||
sortcheck1 = ['value', 'status', 'pollinterval', 'target', 'stop',
|
sortcheck1 = ['value', 'status', 'target', 'pollinterval', 'stop',
|
||||||
'param1', 'param2', 'cmd', 'a1', 'a2', 'cmd2']
|
'param1', 'param2', 'cmd', 'a1', 'a2', 'cmd2']
|
||||||
|
|
||||||
class Newclass2(Newclass1):
|
class Newclass2(Newclass1):
|
||||||
paramOrder = 'param1', 'param2', 'cmd', 'value'
|
|
||||||
|
|
||||||
@Command(description='another stuff')
|
@Command(description='another stuff')
|
||||||
def cmd2(self, arg):
|
def cmd2(self, arg):
|
||||||
return arg
|
return arg
|
||||||
@ -171,9 +169,9 @@ def test_ModuleMagic():
|
|||||||
def read_value(self):
|
def read_value(self):
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
# first inherited items not mentioned, then the ones mentioned in paramOrder, then the other new ones
|
# first predefined parameters, then in the order of inheritance
|
||||||
sortcheck2 = ['status', 'pollinterval', 'target', 'stop',
|
sortcheck2 = ['value', 'status', 'target', 'pollinterval', 'stop',
|
||||||
'a1', 'a2', 'cmd2', 'param1', 'param2', 'cmd', 'value', 'b2']
|
'param1', 'param2', 'cmd', 'a1', 'a2', 'cmd2', 'b2']
|
||||||
|
|
||||||
updates = {}
|
updates = {}
|
||||||
srv = ServerStub(updates)
|
srv = ServerStub(updates)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user