"""Helpers methods for marshalling.""" from marshmallow.fields import Field def create_custom_field(base_class, custom_validations=(), error_messages=None): """Build a custom field extending a Marshmallow built-in.""" if not issubclass(base_class, Field): raise ValueError( 'base_class should be a subclass of marshmallow.Field') class _CustomField(base_class): def __init__(self, *args, **kwargs): """Init method.""" extended_kwargs = dict(**kwargs) extended_kwargs['validate'] = \ kwargs.get('validate', []) + list(custom_validations) super().__init__(*args, **extended_kwargs) if error_messages: setattr(_CustomField, 'default_error_messages', error_messages) return _CustomField