treat returning None from write_<param> properly

as intended originally, returning None should be the same
as returning the new value from the argument

Change-Id: I5596d2b6f6f525efd4dc410bbe22dad6f1fb2017
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/30659
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Georg Brandl <g.brandl@fz-juelich.de>
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
This commit is contained in:
zolliker 2023-03-10 16:11:27 +01:00
parent 644bfa85f7
commit 80b1932f39
2 changed files with 14 additions and 1 deletions

View File

@ -164,8 +164,9 @@ class HasAccessibles(HasProperties):
new_value = wfunc(self, new_value) new_value = wfunc(self, new_value)
self.log.debug('write_%s(%r) returned %r', pname, value, new_value) self.log.debug('write_%s(%r) returned %r', pname, value, new_value)
if new_value is Done: if new_value is Done:
# setattr(self, pname, getattr(self, pname))
return getattr(self, pname) return getattr(self, pname)
if new_value is None:
new_value = value
setattr(self, pname, new_value) # important! trigger the setter setattr(self, pname, new_value) # important! trigger the setter
return new_value return new_value

View File

@ -727,3 +727,15 @@ def test_super_call():
assert type(m).__name__ == '_Mod' assert type(m).__name__ == '_Mod'
assert type(m).__mro__[1:5] == (Mod, Base, Readable, Module) assert type(m).__mro__[1:5] == (Mod, Base, Readable, Module)
def test_write_method_returns_none():
class Mod(Module):
a = Parameter('', FloatRange(), readonly=False)
def write_a(self, value):
return None
mod = Mod('mod', LoggerStub(), {'description': ''}, ServerStub({}))
mod.write_a(1.5)
assert mod.a == 1.5