Skip to content
Snippets Groups Projects

Overrides

Merged mehtank requested to merge mehtank/rocolib:overrides into v0.3
Compare and
9 files
+ 62
53
Compare changes
  • Side-by-side
  • Inline
Files
9
@@ -44,8 +44,8 @@ class Parameter:
self.name = name
if defaultValue is None and not kwargs.get("optional", False):
raise ValueError(f"Must specify either defaultValue or optional=True for parameter {name}")
if defaultValue is None and not kwargs.get("overrides", False):
raise ValueError(f"Must specify either defaultValue or overrides (implies optional) for parameter {name}")
self.defaultValue = defaultValue
self.spec = {}
@@ -60,7 +60,7 @@ class Parameter:
self.assertValid(defaultValue)
vt = self.spec.get("valueType", "")
no = not(self.spec.get("optional", False))
no = not(self.spec.get("overrides", False))
if no and ("int" in vt or "float" in vt):
integer=None
@@ -94,11 +94,11 @@ class Parameter:
def assertValid(self, value):
if value is None:
if self.spec.get("optional", False):
if self.spec.get("overrides", False):
self.value = value
return
else:
raise ValueError(f"Parameter {self.name} is not optional and cannot be set to None")
raise ValueError(f"Parameter {self.name} is not optional (via overrides) and cannot be set to None")
def check(spec, test, error):
if (self.spec.get(spec, None) is not None and not test(self.spec[spec])):
@@ -116,6 +116,32 @@ class Parameter:
else:
return self.symbol
def doOverrides(self, c):
if self.value is None:
return
overrides = self.spec.get("overrides", [])
if isinstance(overrides, dict):
for k, fn in overrides.items():
try:
import rocolib.utils.numsym as np
value = eval(fn, locals())
c.setParameter(k, value)
except ValueError as e:
raise ValueError(str(e) + f" (via setting overriding parameter {self.name} to {self.value})")
except KeyError as e:
logging.debug(str(e) + f" (via setting overriding parameter {self.name} to {self.value}) -- ignoring")
elif isinstance(overrides, (list, tuple)):
for k in overrides:
try:
c.setParameter(k, self.value)
except KeyError as e:
logging.debug(str(e) + f" (via setting overriding parameter {self.name} to {self.value}) -- ignoring")
else:
try:
c.setParameter(overrides, self.value)
except KeyError as e:
logging.debug(str(e) + f" (via setting overriding parameter {self.name} to {self.value}) -- ignoring")
def getInfo(self, keys=None):
if isinstance(keys, str):
return getattr(self, keys)
@@ -158,6 +184,8 @@ class Parameterized(object):
"""
for n, p in self.parameters.items():
p.setDefault(force)
for n, p in self.parameters.items():
p.doOverrides(self)
def setParameter(self, n, v, validate=True):