Add on_modification to ModelStorage

This commit is contained in:
Cédric Krier
2025-02-19 23:01:52 +01:00
parent defc4c46c5
commit 72c96ec778
4 changed files with 21 additions and 13 deletions
+1
View File
@@ -1,3 +1,4 @@
* Add on_modification to ModelStorage
* Add preprocess_values to ModelStorage
* Remove trigger methods on ModelStorage
* Add compute fields to ModelStorage
+11
View File
@@ -414,6 +414,17 @@ Class methods:
Delete records.
.. classmethod:: ModelStorage.on_modification(mode, records[, field_names])
Method called after ``records`` have been modified.
``mode`` can be either ``create``, ``write`` or ``delete``.
When the ``mode`` is ``write``, ``field_names`` is a :py:class:`set <set>`
containing modified fields.
.. note::
It is used to trigger actions based on what has been modified.
.. classmethod:: ModelStorage.copy(records[, default])
Duplicate the records.
+7
View File
@@ -291,6 +291,7 @@ class ModelStorage(Model):
records = cls.browse(sub_ids)
cls._validate(records)
cls._compute_fields(records)
cls.on_modification('create', records)
if triggers:
for trigger in triggers:
trigger.queue_trigger_action(records)
@@ -397,6 +398,7 @@ class ModelStorage(Model):
records = cls.browse(sub_ids)
cls._validate(records, field_names=field_names)
cls._compute_fields(records, field_names=field_names)
cls.on_modification('write', records, field_names)
for trigger, records in trigger_eligibles.items():
trigger.queue_trigger_action(records)
@@ -422,6 +424,7 @@ class ModelStorage(Model):
ModelData.clean(records)
if check_access:
cls.log(records, 'delete')
cls.on_modification('delete', records)
triggers = Trigger.get_triggers(cls.__name__, 'delete')
if triggers:
@@ -476,6 +479,10 @@ class ModelStorage(Model):
for f in cls._fields.values()):
Translation.delete_ids(cls.__name__, 'model', ids)
@classmethod
def on_modification(cls, mode, records, field_names=None):
assert mode in {'create', 'write', 'delete'}
@classmethod
def copy(cls, records, default=None):
'''
+2 -13
View File
@@ -134,19 +134,8 @@ class ValueMixin(MatchMixin, ModelStorage):
return records
@classmethod
def create(cls, vlist):
records = super().create(vlist)
cls._values_cache().clear()
return records
@classmethod
def write(cls, *args):
super().write(*args)
cls._values_cache().clear()
@classmethod
def delete(cls, records):
super().delete(records)
def on_modification(cls, mode, records, field_names=None):
super().on_modification(mode, records, field_names=field_names)
cls._values_cache().clear()