# encoding: utf-8 """ Marshmallow fields ------------------ Extension on the already available marshmallow fields """ from marshmallow import ValidationError, fields class UnionField(fields.Field): """Field that deserializes multi-type input data to app-level objects.""" def __init__(self, types: list = [], *args, **kwargs) -> None: super().__init__(*args, **kwargs) if types: self.types = types else: raise AttributeError('No types provided on union field') def _deserialize(self, value, attr, data, **kwargs): if bool([isinstance(value, i) for i in self.types if isinstance(value, i)]): return value else: raise ValidationError( f'Field shoud be any of the following types: [{", ".join([str(i) for i in self.types])}]' )