From a72038e18cb352601fa02d10b31cf69ae97bc2a4 Mon Sep 17 00:00:00 2001 From: Markus Zolliker Date: Fri, 10 Mar 2023 16:11:27 +0100 Subject: [PATCH] treat returning None from write_ 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 Reviewed-by: Georg Brandl Reviewed-by: Markus Zolliker --- frappy/modules.py | 3 ++- test/test_modules.py | 12 ++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/frappy/modules.py b/frappy/modules.py index 74f2424a..9e06f572 100644 --- a/frappy/modules.py +++ b/frappy/modules.py @@ -164,8 +164,9 @@ class HasAccessibles(HasProperties): new_value = wfunc(self, new_value) self.log.debug('write_%s(%r) returned %r', pname, value, new_value) if new_value is Done: - # setattr(self, pname, getattr(self, pname)) return getattr(self, pname) + if new_value is None: + new_value = value setattr(self, pname, new_value) # important! trigger the setter return new_value diff --git a/test/test_modules.py b/test/test_modules.py index f8010049..2f47f5ba 100644 --- a/test/test_modules.py +++ b/test/test_modules.py @@ -727,3 +727,15 @@ def test_super_call(): assert type(m).__name__ == '_Mod' 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