fix bug when overriding a property with bare value

the bare value must be converted to a updated property.
add also a test for this

Change-Id: I261daaaa8e12d7f739d8b2e8389c1b871b26c5b3
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/34985
Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
This commit is contained in:
zolliker 2024-11-19 08:55:46 +01:00
parent 142add9109
commit e8cd193d0d
2 changed files with 3 additions and 0 deletions

View File

@ -143,6 +143,7 @@ class HasProperties(HasDescriptors):
try: try:
# try to apply bare value to Property # try to apply bare value to Property
po.value = po.datatype.validate(value) po.value = po.datatype.validate(value)
setattr(cls, pn, po) # replace bare value by updated Property
except BadValueError: except BadValueError:
if callable(value): if callable(value):
raise ProgrammingError(f'method {cls.__name__}.{pn} collides with property of {base.__name__}') from None raise ProgrammingError(f'method {cls.__name__}.{pn} collides with property of {base.__name__}') from None

View File

@ -148,6 +148,8 @@ def test_Property_override():
o2 = co() o2 = co()
assert o1.a == 1 assert o1.a == 1
assert o2.a == 3 assert o2.a == 3
o2.setProperty('a', 4)
assert o2.a == 4
with pytest.raises(ProgrammingError) as e: with pytest.raises(ProgrammingError) as e:
class cx(c): # pylint: disable=unused-variable class cx(c): # pylint: disable=unused-variable