Утвердить список зефира - PullRequest
3 голосов
/ 12 февраля 2020

в настоящее время я использую схему зефира для проверки запроса, и у меня есть этот список, и мне нужно проверить его содержимое.

class PostValidationSchema(Schema):
    checks = fields.List(
        fields.String(required=True)
    )

поле проверок - это список, оно должно содержать только эти Speci c значения ["booking", "reservation", "flight"]

Ответы [ 2 ]

1 голос
/ 14 февраля 2020

В дополнение к ответу Джерома я также понял, что если вам нужно сделать что-то, что требует больше логики c, вы можете сделать:

def validate_check(check: str):
  return check in ["booking", "reservation", "flight"]

class PostValidationSchema(Schema):
    checks = fields.List(
        fields.String(required=True, validate=validate_check)
    )

Или использовать лямбду:

class PostValidationSchema(Schema):
    checks = fields.List(
        fields.String(required=True, validate=lambda check: check in ["booking", "reservation", "flight"])
    )

1 голос
/ 12 февраля 2020

Если вы хотите проверить, что список содержит только эти три элемента в этом порядке, используйте Equal validator.

from marshmallow import Schema, fields, validate


class PostValidationSchema(Schema):
    checks = fields.List(
        fields.String(required=True),
        validate=validate.Equal(["booking", "reservation", "flight"])
    )

schema = PostValidationSchema()

schema.load({"checks": ["booking", "reservation", "flight"]})  # OK
schema.load({"checks": ["booking", "reservation"]})  # ValidationError

Если в списке может быть любое количество элементов, и они могут быть только одним из этих трех указанных c значений, затем используйте OneOf валидатор.

from marshmallow import Schema, fields, validate


class PostValidationSchema(Schema):
    checks = fields.List(
        fields.String(
            required=True,
            validate=validate.OneOf(["booking", "reservation", "flight"])
        ),
    )

schema = PostValidationSchema()

schema.load({"checks": ["booking", "reservation", "flight"]})  # OK
schema.load({"checks": ["booking", "reservation"]})  # OK
schema.load({"checks": ["booking", "dummy"]})  # ValidationError
...