improve and fix errors with parameter limits
- in order to work properly, readonly=True in limit parameters has to be set before creating the write_* method - more explicit: Use e.g. target_max=Limit() - fix an error in the loop over the base classes when creating the check_* method - more concise error message when a limit is violated + fix an error in playground when using persistent parameters Change-Id: Ibd557b55d6c0d9a2612cda4460b16e3c70e1bc9e Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/31017 Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de> Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
This commit is contained in:
@@ -514,6 +514,35 @@ class Command(Accessible):
|
||||
return result[:-1] + f', {self.func!r})' if self.func else result
|
||||
|
||||
|
||||
class Limit(Parameter):
|
||||
"""a special limit parameter"""
|
||||
POSTFIXES = {'min', 'max', 'limits'} # allowed postfixes
|
||||
|
||||
def __set_name__(self, owner, name):
|
||||
super().__set_name__(owner, name)
|
||||
head, _, postfix = name.rpartition('_')
|
||||
if postfix not in self.POSTFIXES:
|
||||
raise ProgrammingError(f'Limit name must end with one of {self.POSTFIXES}')
|
||||
if 'readonly' not in self.propertyValues:
|
||||
self.readonly = False
|
||||
if not self.description:
|
||||
self.description = f'limit for {head}'
|
||||
if self.export.startswith('_') and PREDEFINED_ACCESSIBLES.get(head):
|
||||
self.export = self.export[1:]
|
||||
|
||||
def set_datatype(self, datatype):
|
||||
if self.hasDatatype():
|
||||
return # the programmer is responsible that a given datatype is correct
|
||||
postfix = self.name.rpartition('_')[-1]
|
||||
postfix = self.name.rpartition('_')[-1]
|
||||
if postfix == 'limits':
|
||||
self.datatype = TupleOf(datatype, datatype)
|
||||
self.default = (datatype.min, datatype.max)
|
||||
else: # min, max
|
||||
self.datatype = datatype
|
||||
self.default = getattr(datatype, postfix)
|
||||
|
||||
|
||||
# list of predefined accessibles with their type
|
||||
PREDEFINED_ACCESSIBLES = {
|
||||
'value': Parameter,
|
||||
|
||||
Reference in New Issue
Block a user