Deprecate property-del:name events and introduce property-reset:name instead
And the same for -pre- events. The property-del name is really confusing (it makes sense only for those with deep knowledge of the implementation), because the property isn't really deleted - it is only reverted to the "default" state (which most properties have). So, name the event property-reset, intentionally similar to property-set, as it is also kind of a value change. Additionally the property-reset event is meant to be called when the (dynamic) default value changes. Due to the current implementation, it is a manual process so it can't be guaranteed to be called in all those cases, but lets try to cover as much as possible. Fixes QubesOS/qubes-issues#5834
This commit is contained in:
parent
c7d3635972
commit
b06f831528
@ -284,6 +284,10 @@ class property: # pylint: disable=redefined-builtin,invalid-name
|
||||
has_oldvalue = False
|
||||
|
||||
if has_oldvalue:
|
||||
instance.fire_event('property-pre-reset:' + self.__name__,
|
||||
pre_event=True,
|
||||
name=self.__name__, oldvalue=oldvalue)
|
||||
# deprecated, to be removed in Qubes 5.0
|
||||
instance.fire_event('property-pre-del:' + self.__name__,
|
||||
pre_event=True,
|
||||
name=self.__name__, oldvalue=oldvalue)
|
||||
@ -291,13 +295,23 @@ class property: # pylint: disable=redefined-builtin,invalid-name
|
||||
delattr(instance, self._attr_name)
|
||||
except AttributeError:
|
||||
pass
|
||||
instance.fire_event('property-reset:' + self.__name__,
|
||||
name=self.__name__, oldvalue=oldvalue)
|
||||
# deprecated, to be removed in Qubes 5.0
|
||||
instance.fire_event('property-del:' + self.__name__,
|
||||
name=self.__name__, oldvalue=oldvalue)
|
||||
|
||||
else:
|
||||
instance.fire_event('property-pre-reset:' + self.__name__,
|
||||
pre_event=True,
|
||||
name=self.__name__)
|
||||
# deprecated, to be removed in Qubes 5.0
|
||||
instance.fire_event('property-pre-del:' + self.__name__,
|
||||
pre_event=True,
|
||||
name=self.__name__)
|
||||
instance.fire_event('property-reset:' + self.__name__,
|
||||
name=self.__name__)
|
||||
# deprecated, to be removed in Qubes 5.0
|
||||
instance.fire_event('property-del:' + self.__name__,
|
||||
name=self.__name__)
|
||||
|
||||
@ -470,6 +484,9 @@ class PropertyHolder(qubes.events.Emitter):
|
||||
Fired when property gets deleted (is set to default). Signature is
|
||||
variable, *oldvalue* is present only if there was an old value.
|
||||
|
||||
This event is deprecated and will be removed in Qubes 5.0.
|
||||
Use property-reset instead.
|
||||
|
||||
:param name: Property name
|
||||
:param oldvalue: Old value of the property
|
||||
|
||||
@ -479,6 +496,31 @@ class PropertyHolder(qubes.events.Emitter):
|
||||
Fired before property gets deleted (is set to default). Signature
|
||||
is variable, *oldvalue* is present only if there was an old value.
|
||||
|
||||
This event is deprecated and will be removed in Qubes 5.0.
|
||||
Use property-pre-reset instead.
|
||||
|
||||
:param name: Property name
|
||||
:param oldvalue: Old value of the property
|
||||
|
||||
.. event:: property-reset:<propname> \
|
||||
(subject, event, name[, oldvalue])
|
||||
|
||||
Fired when property gets reset to the (possibly dynamic) default.
|
||||
This even may be also fired when the property is already in
|
||||
"default" state, but the calculated default value changes.
|
||||
Signature is variable, *oldvalue* is present only if there was an
|
||||
old value.
|
||||
|
||||
:param name: Property name
|
||||
:param oldvalue: Old value of the property
|
||||
|
||||
.. event:: property-pre-reset:<propname> \
|
||||
(subject, event, name[, oldvalue])
|
||||
|
||||
Fired before property gets reset to the (possibly dynamic) default.
|
||||
Signature is variable, *oldvalue* is present only if there was an
|
||||
old value.
|
||||
|
||||
:param name: Property name
|
||||
:param oldvalue: Old value of the property
|
||||
|
||||
|
@ -170,8 +170,12 @@ class TC_10_property(qubes.tests.QubesTestCase):
|
||||
|
||||
self.assertEventFired(self.holder, 'property-pre-del:testprop1',
|
||||
kwargs={'name': 'testprop1', 'oldvalue': 'testvalue'})
|
||||
self.assertEventFired(self.holder, 'property-pre-reset:testprop1',
|
||||
kwargs={'name': 'testprop1', 'oldvalue': 'testvalue'})
|
||||
self.assertEventFired(self.holder, 'property-del:testprop1',
|
||||
kwargs={'name': 'testprop1', 'oldvalue': 'testvalue'})
|
||||
self.assertEventFired(self.holder, 'property-reset:testprop1',
|
||||
kwargs={'name': 'testprop1', 'oldvalue': 'testvalue'})
|
||||
|
||||
def test_081_delete_by_assign(self):
|
||||
self.holder.testprop1 = 'testvalue'
|
||||
@ -203,8 +207,12 @@ class TC_10_property(qubes.tests.QubesTestCase):
|
||||
self.assertEqual(holder.testprop1, 'defaultvalue')
|
||||
self.assertEventFired(holder, 'property-pre-del:testprop1', kwargs={
|
||||
'name': 'testprop1', 'oldvalue': 'testvalue'})
|
||||
self.assertEventFired(holder, 'property-pre-reset:testprop1', kwargs={
|
||||
'name': 'testprop1', 'oldvalue': 'testvalue'})
|
||||
self.assertEventFired(holder, 'property-del:testprop1', kwargs={
|
||||
'name': 'testprop1', 'oldvalue': 'testvalue'})
|
||||
self.assertEventFired(holder, 'property-reset:testprop1', kwargs={
|
||||
'name': 'testprop1', 'oldvalue': 'testvalue'})
|
||||
|
||||
def test_090_write_once_set(self):
|
||||
class MyTestHolder(qubes.tests.TestEmitter, qubes.PropertyHolder):
|
||||
|
Loading…
Reference in New Issue
Block a user