Source code for invenio_records.systemfields.dict

# -*- coding: utf-8 -*-
#
# Copyright (C) 2020 CERN.
# Copyright (C) 2020 Northwestern University.
#
# Invenio-Records-Resources is free software; you can redistribute it and/or
# modify it under the terms of the MIT License; see LICENSE file for more
# details.

"""Persistent identifier system field for record."""

from ..dictutils import clear_none, dict_lookup
from .base import SystemField


[docs]class DictField(SystemField): """Dictionary field. Provides a shortcut for getting/setting a specific key on a record. """
[docs] def __init__(self, key=None, clear_none=False, create_if_missing=True): """Initialise the dict field. :param key: Key to set (dot notation supported). :param clear_none: Boolean to control if empty/None values should be removed. :param create_if_missing: If a subkey is missing it will be created if this option is set to true. """ self.clear_none = clear_none self.create_if_missing = create_if_missing super().__init__(key=key)
[docs] def __get__(self, record, owner=None): """Getting the attribute value.""" if record is None: return self return self.get_dictkey(record)
[docs] def __set__(self, record, value): """Setting a new value.""" if self.clear_none: clear_none(value) self.set_dictkey(record, value, create_if_missing=self.create_if_missing)