Add on_modification to ModelStorage
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
* Add on_modification to ModelStorage
|
||||
* Add preprocess_values to ModelStorage
|
||||
* Remove trigger methods on ModelStorage
|
||||
* Add compute fields to ModelStorage
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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):
|
||||
'''
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user