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 |             has_oldvalue = False | ||||||
| 
 | 
 | ||||||
|         if has_oldvalue: |         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__, |             instance.fire_event('property-pre-del:' + self.__name__, | ||||||
|                 pre_event=True, |                 pre_event=True, | ||||||
|                 name=self.__name__, oldvalue=oldvalue) |                 name=self.__name__, oldvalue=oldvalue) | ||||||
| @ -291,13 +295,23 @@ class property:  # pylint: disable=redefined-builtin,invalid-name | |||||||
|                 delattr(instance, self._attr_name) |                 delattr(instance, self._attr_name) | ||||||
|             except AttributeError: |             except AttributeError: | ||||||
|                 pass |                 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__, |             instance.fire_event('property-del:' + self.__name__, | ||||||
|                 name=self.__name__, oldvalue=oldvalue) |                 name=self.__name__, oldvalue=oldvalue) | ||||||
| 
 | 
 | ||||||
|         else: |         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__, |             instance.fire_event('property-pre-del:' + self.__name__, | ||||||
|                 pre_event=True, |                 pre_event=True, | ||||||
|                 name=self.__name__) |                 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__, |             instance.fire_event('property-del:' + self.__name__, | ||||||
|                 name=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 |             Fired when property gets deleted (is set to default). Signature is | ||||||
|             variable, *oldvalue* is present only if there was an old value. |             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 name: Property name | ||||||
|             :param oldvalue: Old value of the property |             :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 |             Fired before property gets deleted (is set to default). Signature | ||||||
|             is variable, *oldvalue* is present only if there was an old value. |             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 name: Property name | ||||||
|             :param oldvalue: Old value of the property |             :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', |         self.assertEventFired(self.holder, 'property-pre-del:testprop1', | ||||||
|             kwargs={'name': 'testprop1', 'oldvalue': 'testvalue'}) |             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', |         self.assertEventFired(self.holder, 'property-del:testprop1', | ||||||
|             kwargs={'name': 'testprop1', 'oldvalue': 'testvalue'}) |             kwargs={'name': 'testprop1', 'oldvalue': 'testvalue'}) | ||||||
|  |         self.assertEventFired(self.holder, 'property-reset:testprop1', | ||||||
|  |             kwargs={'name': 'testprop1', 'oldvalue': 'testvalue'}) | ||||||
| 
 | 
 | ||||||
|     def test_081_delete_by_assign(self): |     def test_081_delete_by_assign(self): | ||||||
|         self.holder.testprop1 = 'testvalue' |         self.holder.testprop1 = 'testvalue' | ||||||
| @ -203,8 +207,12 @@ class TC_10_property(qubes.tests.QubesTestCase): | |||||||
|         self.assertEqual(holder.testprop1, 'defaultvalue') |         self.assertEqual(holder.testprop1, 'defaultvalue') | ||||||
|         self.assertEventFired(holder, 'property-pre-del:testprop1', kwargs={ |         self.assertEventFired(holder, 'property-pre-del:testprop1', kwargs={ | ||||||
|             'name': 'testprop1', 'oldvalue': 'testvalue'}) |             'name': 'testprop1', 'oldvalue': 'testvalue'}) | ||||||
|  |         self.assertEventFired(holder, 'property-pre-reset:testprop1', kwargs={ | ||||||
|  |             'name': 'testprop1', 'oldvalue': 'testvalue'}) | ||||||
|         self.assertEventFired(holder, 'property-del:testprop1', kwargs={ |         self.assertEventFired(holder, 'property-del:testprop1', kwargs={ | ||||||
|             'name': 'testprop1', 'oldvalue': 'testvalue'}) |             'name': 'testprop1', 'oldvalue': 'testvalue'}) | ||||||
|  |         self.assertEventFired(holder, 'property-reset:testprop1', kwargs={ | ||||||
|  |             'name': 'testprop1', 'oldvalue': 'testvalue'}) | ||||||
| 
 | 
 | ||||||
|     def test_090_write_once_set(self): |     def test_090_write_once_set(self): | ||||||
|         class MyTestHolder(qubes.tests.TestEmitter, qubes.PropertyHolder): |         class MyTestHolder(qubes.tests.TestEmitter, qubes.PropertyHolder): | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Marek Marczykowski-Górecki
						Marek Marczykowski-Górecki