class MuseumNumberSchema(Schema):
    prefix = fields.String(required=True, validate=validate.Length(min=1))
    number = fields.String(required=True,
                           validate=(validate.Length(min=1),
                                     validate.ContainsNoneOf(".")))
    suffix = fields.String(required=True,
                           validate=validate.ContainsNoneOf("."))

    @post_load
    def create_museum_number(self, data, **kwargs) -> MuseumNumber:
        return MuseumNumber(**data)
Beispiel #2
0
def test_containsnoneof_mixing_types():
    with pytest.raises(ValidationError):
        validate.ContainsNoneOf("abc")(["a"])

    with pytest.raises(ValidationError):
        validate.ContainsNoneOf(["a", "b", "c"])("a")

    with pytest.raises(ValidationError):
        validate.ContainsNoneOf((1, 2, 3))([1])

    with pytest.raises(ValidationError):
        validate.ContainsNoneOf([1, 2, 3])((1, ))
Beispiel #3
0
class UserSchema(Schema):
    id = fields.Str(dump_only=True)
    email = fields.Str(
        required=True,
        validate=[validate.Email(error="Not a valid email address")])
    username = fields.Str(
        required=True,
        validate=[
            validate.Length(
                min=4,
                max=50,
                error="username must have between {min} and {max} characters."
            ),
            validate.Regexp(
                r"[a-zA-Z0-9_\-]*$",
                error=
                "username must not contain special characters (except _ und -)"
            ),
            validate.ContainsNoneOf([" "],
                                    error="username must not contain spaces")
        ])
    password = fields.Str(
        required=True,
        load_only=True,
        validate=[
            validate.Length(
                min=8,
                max=30,
                error="password must have a length between {min} and {max}")
        ])

    mqtt_topics = fields.List(fields.Str, dump_only=True)
def test_containsnoneof_custom_message():
    validator = validate.ContainsNoneOf(
        [1, 2, 3], error="{input} was in the banned list: {values}"
    )
    expected = "1 was in the banned list: 1, 2, 3"
    with pytest.raises(ValidationError, match=expected):
        validator([1])
Beispiel #5
0
def test_containsnoneof_in_string():
    validate.ContainsNoneOf("")("") == ""
    validate.ContainsNoneOf("")("abc") == "abc"
    validate.ContainsNoneOf("d")("abc") == "abc"
    validate.ContainsNoneOf("b")("acd") == "acd"
    validate.ContainsNoneOf("abc")("d") == "d"
    validate.ContainsNoneOf("d")("aaaa") == "a"

    with pytest.raises(ValidationError):
        validate.ContainsNoneOf("a")("abc")

    with pytest.raises(ValidationError):
        validate.ContainsNoneOf("aaa")("abc")

    with pytest.raises(ValidationError):
        validate.ContainsNoneOf("ab")("ab")

    with pytest.raises(ValidationError):
        validate.ContainsNoneOf("a")("aaaa")
Beispiel #6
0
def test_containsnoneof_in_tuple():
    validate.ContainsNoneOf(())(()) == ()
    validate.ContainsNoneOf(())((1, 2, 3)) == (1, 2, 3)
    validate.ContainsNoneOf((4, ))((1, 2, 3)) == (1, 2, 3)
    validate.ContainsNoneOf((2, ))((1, 3, 4)) == (1, 3, 4)
    validate.ContainsNoneOf((1, 2, 3))((4, )) == (4, )
    validate.ContainsNoneOf((4, ))((1, 1, 1, 1)) == (1, )

    with pytest.raises(ValidationError):
        validate.ContainsNoneOf((1, ))((1, 2, 3))

    with pytest.raises(ValidationError):
        validate.ContainsNoneOf((1, 1, 1))((1, 2, 3))

    with pytest.raises(ValidationError):
        validate.ContainsNoneOf((1, 2))((1, 2))

    with pytest.raises(ValidationError):
        validate.ContainsNoneOf((1, ))((1, 1, 1, 1))
Beispiel #7
0
def test_containsnoneof_in_list():
    validate.ContainsNoneOf([])([]) == []
    validate.ContainsNoneOf([])([1, 2, 3]) == [1, 2, 3]
    validate.ContainsNoneOf([4])([1, 2, 3]) == [1, 2, 3]
    validate.ContainsNoneOf([2])([1, 3, 4]) == [1, 3, 4]
    validate.ContainsNoneOf([1, 2, 3])([4]) == [4]
    validate.ContainsNoneOf([4])([1, 1, 1, 1]) == [1]

    with pytest.raises(ValidationError):
        validate.ContainsNoneOf([1])([1, 2, 3])

    with pytest.raises(ValidationError):
        validate.ContainsNoneOf([1, 1, 1])([1, 2, 3])

    with pytest.raises(ValidationError):
        validate.ContainsNoneOf([1, 2])([1, 2])

    with pytest.raises(ValidationError):
        validate.ContainsNoneOf([1])([1, 1, 1, 1])
Beispiel #8
0
def test_containsnoneof_error_message():
    with pytest.raises(ValidationError,
                       match="One or more of the choices you made was in: 1"):
        validate.ContainsNoneOf([1])([1])

    with pytest.raises(
            ValidationError,
            match="One or more of the choices you made was in: 1, 2, 3"):
        validate.ContainsNoneOf([1, 2, 3])([1])

    with pytest.raises(
            ValidationError,
            match="One or more of the choices you made was in: one, two"):
        validate.ContainsNoneOf(["one", "two"])(["one"])

    with pytest.raises(
            ValidationError,
            match="One or more of the choices you made was in: @, !, &, ?"):
        validate.ContainsNoneOf("@!&?")("@")
Beispiel #9
0
def test_containsnoneof_unhashable_types():
    assert validate.ContainsNoneOf([[1], [2], [3]])([]) == []
    assert validate.ContainsNoneOf([[1], [2], [3]])([[4]]) == [[4]]
    assert validate.ContainsNoneOf([[1], [2], [3]])([[4], [4]]) == [[4], [4]]
    assert validate.ContainsNoneOf([[1], [2], [3]])([[4], [5]]) == [[4], [5]]

    with pytest.raises(ValidationError):
        validate.ContainsNoneOf([[1], [2], [3]])([[1]])

    with pytest.raises(ValidationError):
        validate.ContainsNoneOf([[1], [2], [3]])([[1], [2]])

    with pytest.raises(ValidationError):
        validate.ContainsNoneOf([[1], [2], [3]])([[2], [1]])

    with pytest.raises(ValidationError):
        validate.ContainsNoneOf([[1], [2], [3]])([[1], [2], [3]])

    with pytest.raises(ValidationError):
        validate.ContainsNoneOf([[1], [2], [3]])([[3], [2], [1]])

    with pytest.raises(ValidationError):
        validate.ContainsNoneOf([[1], [2], [3]])([[2], [3], [1]])
Beispiel #10
0
class DeviceSchema(Schema):
    key = fields.Str()
    name = fields.Str(required=True, validate=validate.Length(min=2))
    place = fields.Str(required=True, validate=validate.Length(min=2))
    port = fields.Int(required=True, validate=[validate.Range(min=0)])
    d_type = fields.Str(data_key="type",
                        required=True,
                        validate=[validate.OneOf(["switch", "sensor"])])
    topic = fields.Str(validate=[
        validate.ContainsNoneOf(
            ["+", "#", " ", "*"],
            error=
            "Invalid MQTT topic structure. Follow the standards defined by MQTT specifications."
        ), lambda val: val.count("/") > 1
    ])
Beispiel #11
0
class PageSchema(Schema):
    """
    Class to validate the attributes of a page
    """

    sort_column = fields.Str(allow_none=True)
    sort_direction = fields.Str(allow_none=True,
                                validate=validate.OneOf(["asc", "desc"]))
    size = fields.Int(missing=None, validate=validate.Range(min=1, max=1000))
    offset = fields.Int(missing=0)
    selected_actors = fields.List(fields.String, allow_none=True)
    selected_statuses = fields.List(
        fields.String(validate=validate.ContainsNoneOf(
            [status.name for status in StateStatusesEnum])),
        allow_none=True,
    )
    selected_ids = fields.List(fields.String, allow_none=True)
    start_datetime = fields.DateTime(allow_none=True)
    end_datetime = fields.DateTime(allow_none=True)

    @validates_schema
    def validate_sort(self, data, **kwargs):
        if data.get("sort_direction") and data.get("sort_column") is None:
            raise ValidationError("sort_column is not defined")