From e8cd193d0d7eb514b5813cac11b46fd46dfd8742 Mon Sep 17 00:00:00 2001 From: Markus Zolliker Date: Tue, 19 Nov 2024 08:55:46 +0100 Subject: [PATCH] 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 Tested-by: Jenkins Automated Tests --- frappy/properties.py | 1 + test/test_properties.py | 2 ++ 2 files changed, 3 insertions(+) diff --git a/frappy/properties.py b/frappy/properties.py index a4736e0..910002d 100644 --- a/frappy/properties.py +++ b/frappy/properties.py @@ -143,6 +143,7 @@ class HasProperties(HasDescriptors): try: # try to apply bare value to Property po.value = po.datatype.validate(value) + setattr(cls, pn, po) # replace bare value by updated Property except BadValueError: if callable(value): raise ProgrammingError(f'method {cls.__name__}.{pn} collides with property of {base.__name__}') from None diff --git a/test/test_properties.py b/test/test_properties.py index 9bfc44d..6d62e67 100644 --- a/test/test_properties.py +++ b/test/test_properties.py @@ -148,6 +148,8 @@ def test_Property_override(): o2 = co() assert o1.a == 1 assert o2.a == 3 + o2.setProperty('a', 4) + assert o2.a == 4 with pytest.raises(ProgrammingError) as e: class cx(c): # pylint: disable=unused-variable