Source code for invenio_records.extensions
# -*- coding: utf-8 -*-
#
# This file is part of Invenio.
# Copyright (C) 2020 CERN.
# Copyright (C) 2021 RERO.
#
# Invenio is free software; you can redistribute it and/or modify it
# under the terms of the MIT License; see LICENSE file for more details.
"""Extensions allow integration of features into a record class.
For instance, the system fields feature is built as an extension.
"""
[docs]class ExtensionMixin:
"""Defines the methods needed by an extension."""
[docs] def pre_init(self, record, data, model=None, **kwargs):
"""Called when a new record instance is initialized.
Called when a new record is instantiated (i.e. during all
``Record({...})``). This means it's also called when e.g. a record
is created via ``Record.create()``.
:param data: The dict passed to the record's constructor.
:param model: The model class used for initialization.
"""
[docs] def post_init(self, record, data, model=None, **kwargs):
"""Called after a record is initialized."""
[docs] def pre_dump(self, record, data, dumper=None):
"""Called before a record is dumped."""
[docs] def post_dump(self, record, data, dumper=None):
"""Called after a record is dumped."""
[docs] def pre_load(self, data, loader=None):
"""Called before a record is loaded."""
[docs] def post_load(self, record, data, loader=None):
"""Called after a record is loaded."""
[docs] def pre_create(self, record):
"""Called before a record is created."""
[docs] def post_create(self, record):
"""Called after a record is created."""
[docs] def pre_commit(self, record):
"""Called before a record is committed."""
[docs] def post_commit(self, record):
"""Called after a record is committed."""
[docs] def pre_delete(self, record, force=False):
"""Called before a record is deleted."""
[docs] def post_delete(self, record, force=False):
"""Called after a record is deleted."""
[docs] def pre_revert(self, record, revision):
"""Called before a record is reverted."""
[docs] def post_revert(self, new_record, revision):
"""Called after a record is reverted."""
[docs]class RecordExtension(ExtensionMixin):
"""Base class for a record extensions."""