from apollo_utils.service.schemas.fields.list import SplitUniqueListField from marshmallow import fields, validate from typing import Any class CreatedUpdatedAtMixin: created_at = fields.DateTime() updated_at = fields.DateTime() class IntIdListNoneMixin: id = SplitUniqueListField(fields.Integer(required=True), validate=validate.Length(max=500), missing=None) NO_VALUE = "___NO_VALUE" class NullToFieldMixin: def __init__(self, *args, null_to: Any = NO_VALUE, **kwargs): self.null_to = null_to super().__init__(*args, **kwargs) def _deserialize(self, value, attr, data, **kwargs): if self.null_to != NO_VALUE and value == "null": return self.null_to return super()._deserialize(value, attr, data, **kwargs) class IntOrNull(NullToFieldMixin, fields.Int): pass