Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Marshmallow @validates does not raise error

all. I writing API project using Flask as the main framework and Marshmallow package for serializing JSON data. I want to create the player instance, but before create validate his nickname. View:

def create_player()
    ...
    try:
        data = player_schema.load(request_data)
        # when error raised excect case does not handle it
        # but data has 2 dicts: 
        # UnmarshalResult(data={}, errors={'nickname': ['Error!!!']})
    except ValidationError as err:
       return jsonify(err.messages), 400
    ...

Schema:

class PlayerSchema(Schema):

    nickname = fields.Str(required=True)
...

    @validates('nickname')
    def validate_nickname(self, value):
        raise ValidationError('Error!!!')
like image 853
Oleksii Petrushynskyi Avatar asked Feb 16 '26 03:02

Oleksii Petrushynskyi


1 Answers

This is because by default in marshmallow 2, schemas don't raise on error.

You need to pass strict meta argument:

class PlayerSchema(Schema):

    nickname = fields.Str(required=True)

    class Meta:
        strict = True

In marshmallow 3, schemas always raise on error.

like image 145
Jérôme Avatar answered Feb 17 '26 16:02

Jérôme



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!