Source code for ska_oso_pdm.schemas.shared

"""
The schemas module defines Marshmallow schemas that are shared by various
other serialisation schemas.
"""

from marshmallow.fields import Field, Nested

__all__ = ["UpperCasedField", "NestedDict"]


[docs] class UpperCasedField(Field): # pylint: disable=too-few-public-methods """ Field that serializes to an upper-case string and deserializes to a lower-case string. """ def _serialize(self, value, attr, obj, **kwargs): # pylint: disable=no-self-use if value is None: return "" return value.upper() def _deserialize(self, value, attr, data, **kwargs): # pylint: disable=no-self-use return value.lower()
[docs] class NestedDict(Nested): """ Field that serialises a list to a dict, with the specified attribute acting as key. """ def __init__(self, nested, key, *args, **kwargs): super().__init__(nested, many=True, *args, **kwargs) self.key = key def _serialize(self, nested_obj, attr, obj, **kwargs): nested_list = super()._serialize(nested_obj, attr, obj) nested_dict = {item[self.key]: item for item in nested_list} for item in nested_dict.values(): del item[self.key] return nested_dict def _deserialize(self, value, attr, data, partial=None, **kwargs): for key, item in value.items(): item[self.key] = key raw_list = [item for key, item in value.items()] nested_list = super()._deserialize(raw_list, attr, data) return nested_list