allow super calls on read_/write_ methods
instead of wrapping the access methods on the class directly, create a wrapper class with the wrapped methods. Change-Id: I93f3985bd06d6956b42a6690c087fb125e460ef9 Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/30448 Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de> Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de> Reviewed-by: Alexander Zaft <a.zaft@fz-juelich.de> Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
This commit is contained in:
@ -84,10 +84,9 @@ def test_handler():
|
||||
data.append(pname)
|
||||
return value
|
||||
|
||||
assert Mod.read_a.poll is True
|
||||
assert Mod.read_b.poll is True
|
||||
|
||||
m = Mod()
|
||||
assert m.read_a.poll is True
|
||||
assert m.read_b.poll is True
|
||||
|
||||
data.append(1.2)
|
||||
assert m.read_a() == 1.2
|
||||
@ -130,9 +129,10 @@ def test_common_handler():
|
||||
self.b = values['b']
|
||||
data.append('write_hdl')
|
||||
|
||||
assert set([Mod.read_a.poll, Mod.read_b.poll]) == {True, False}
|
||||
|
||||
m = Mod(a=1, b=2)
|
||||
assert set([m.read_a.poll, m.read_b.poll]) == {True, False}
|
||||
|
||||
assert m.writeDict == {'a': 1, 'b': 2}
|
||||
m.write_a(3)
|
||||
assert m.a == 3
|
||||
@ -172,8 +172,10 @@ def test_nopoll():
|
||||
def read_hdl(self):
|
||||
pass
|
||||
|
||||
assert Mod1.read_a.poll is True
|
||||
assert Mod1.read_b.poll is True
|
||||
m = Mod1()
|
||||
print(m, m.read_a)
|
||||
assert m.read_a.poll is True
|
||||
assert m.read_b.poll is True
|
||||
|
||||
class Mod2(ModuleTest):
|
||||
a = Parameter('', FloatRange(), readonly=False)
|
||||
@ -183,8 +185,9 @@ def test_nopoll():
|
||||
def read_hdl(self):
|
||||
pass
|
||||
|
||||
assert Mod2.read_a.poll is True
|
||||
assert Mod2.read_b.poll is False
|
||||
m = Mod2()
|
||||
assert m.read_a.poll is True
|
||||
assert m.read_b.poll is False
|
||||
|
||||
class Mod3(ModuleTest):
|
||||
a = Parameter('', FloatRange(), readonly=False)
|
||||
@ -195,8 +198,9 @@ def test_nopoll():
|
||||
def read_hdl(self):
|
||||
pass
|
||||
|
||||
assert Mod3.read_a.poll is False
|
||||
assert Mod3.read_b.poll is False
|
||||
m = Mod3()
|
||||
assert m.read_a.poll is False
|
||||
assert m.read_b.poll is False
|
||||
|
||||
class Mod4(ModuleTest):
|
||||
a = Parameter('', FloatRange(), readonly=False)
|
||||
@ -207,8 +211,9 @@ def test_nopoll():
|
||||
def read_hdl(self):
|
||||
pass
|
||||
|
||||
assert Mod4.read_a.poll is False
|
||||
assert Mod4.read_b.poll is False
|
||||
m = Mod4()
|
||||
assert m.read_a.poll is False
|
||||
assert m.read_b.poll is False
|
||||
|
||||
class Mod5(ModuleTest):
|
||||
a = Parameter('', FloatRange(), readonly=False)
|
||||
@ -219,8 +224,9 @@ def test_nopoll():
|
||||
def read_hdl(self):
|
||||
pass
|
||||
|
||||
assert Mod5.read_a.poll is False
|
||||
assert Mod5.read_b.poll is False
|
||||
m = Mod5()
|
||||
assert m.read_a.poll is False
|
||||
assert m.read_b.poll is False
|
||||
|
||||
class Mod6(ModuleTest):
|
||||
a = Parameter('', FloatRange(), readonly=False)
|
||||
@ -231,5 +237,6 @@ def test_nopoll():
|
||||
def read_hdl(self):
|
||||
pass
|
||||
|
||||
assert Mod6.read_a.poll is False
|
||||
assert Mod6.read_b.poll is False
|
||||
m = Mod6()
|
||||
assert m.read_a.poll is False
|
||||
assert m.read_b.poll is False
|
||||
|
@ -687,3 +687,43 @@ def test_deferred_main_unit(config, dynamicunit, finalunit, someunit):
|
||||
assert m.parameters['ramp'].datatype.unit == finalunit + '/min'
|
||||
# when someparam.unit is configured, this differs from finalunit
|
||||
assert m.parameters['someparam'].datatype.unit == someunit
|
||||
|
||||
|
||||
def test_super_call():
|
||||
class Base(Readable):
|
||||
def read_status(self):
|
||||
return Readable.Status.IDLE, 'base'
|
||||
|
||||
class Mod(Base):
|
||||
def read_status(self):
|
||||
code, text = super().read_status()
|
||||
return code, text + ' (extended)'
|
||||
|
||||
class DispatcherStub1:
|
||||
def __init__(self, updates):
|
||||
self.updates = updates
|
||||
|
||||
def announce_update(self, modulename, pname, pobj):
|
||||
if pobj.readerror:
|
||||
raise pobj.readerror
|
||||
self.updates.append((modulename, pname, pobj.value))
|
||||
|
||||
class ServerStub1:
|
||||
def __init__(self, updates):
|
||||
self.dispatcher = DispatcherStub1(updates)
|
||||
|
||||
updates = []
|
||||
srv = ServerStub1(updates)
|
||||
b = Base('b', logger, {'description': ''}, srv)
|
||||
b.read_status()
|
||||
assert updates == [('b', 'status', ('IDLE', 'base'))]
|
||||
|
||||
updates.clear()
|
||||
m = Mod('m', logger, {'description': ''}, srv)
|
||||
m.read_status()
|
||||
# in the version before change 'allow super calls on read_/write_ methods'
|
||||
# updates would contain two items
|
||||
assert updates == [('m', 'status', ('IDLE', 'base (extended)'))]
|
||||
|
||||
assert type(m).__name__ == '_Mod'
|
||||
assert type(m).__mro__[1:5] == (Mod, Base, Readable, Module)
|
||||
|
Reference in New Issue
Block a user