Exemple #1
0
def test_custom_validator():
    @handle_default_optional_desc()
    def choice_validator():
        def validator(value):
            if value in "ABCD":
                return value
            raise Invalid("invalid choice")
        return validator
    sp = SchemaParser(validators={"choice": choice_validator})
    for value in "ABCD":
        assert sp.parse("choice")(value) == value
    assert sp.parse("choice&optional")(None) is None
Exemple #2
0
def test_custom_validator():
    @validator(string=False)
    def choice_validator(value, *choices):
        try:
            if value in choices:
                return value
        except:
            pass
        raise Invalid('invalid choice')

    sp = SchemaParser(validators={'choice': choice_validator})
    for value in 'ABCD':
        assert sp.parse('choice("A","B","C","D")')(value) == value
    assert sp.parse('choice&optional')(None) is None
def test_merge_required():
    sp = SchemaParser(shared={"a": {"x?int": "x"}, "b": {"y?int": "y"}})
    f = sp.parse({"$self@a@b": "required"})
    assert f({"x": 1, "y": 2}) == {"x": 1, "y": 2}
    with pytest.raises(Invalid) as exinfo:
        f(None)
    assert "required" in exinfo.value.message
def test_custom_validator():
    with pytest.warns(DeprecationWarning):

        @handle_default_optional_desc()
        def choice_validator():
            def validator(value):
                if value in 'ABCD':
                    return value
                raise Invalid('invalid choice')

            return validator

    sp = SchemaParser(validators={'choice': choice_validator})
    for value in 'ABCD':
        assert sp.parse('choice')(value) == value
    assert sp.parse('choice&optional')(None) is None
Exemple #5
0
def test_required():
    sp = SchemaParser(shared={'a': {'x?int': 'x'}, 'b': {'y?int': 'y'}})
    f = sp.parse({'$self@a@b': 'required'})
    assert f({'x': 1, 'y': 2}) == {'x': 1, 'y': 2}
    with pytest.raises(Invalid) as exinfo:
        f(None)
    assert 'required' in exinfo.value.message
Exemple #6
0
def test_error_position(value, expect):
    sp = SchemaParser(shared={
        'the_tags': ['int'],
        'user': {
            'userid?int': 'UserID'
        }
    })
    f = sp.parse({'user@user': '******', 'tags@the_tags': 'Tags'})
    with pytest.raises(Invalid) as exinfo:
        f(value)
    assert exinfo.value.position == expect
Exemple #7
0
def test_optional(schema):
    sp = SchemaParser(shared={
        'user_name': {
            'name?str': 'name'
        },
        'user_age': {
            'age?int': 'age'
        },
    })
    f = sp.parse(schema)
    assert f(None) is None
Exemple #8
0
def test_basic(schema, value):
    sp = SchemaParser(shared={
        'user_name': {
            'name?str': 'name'
        },
        'user_age': {
            'age?int': 'age'
        },
    })
    f = sp.parse(schema)
    assert f(value) == value
Exemple #9
0
def test_error_position(value, expect):
    sp = SchemaParser(shared={
        'user_name': {
            'name?str': 'name'
        },
        'user_age': {
            'age?int': 'age'
        },
    })
    f = sp.parse({'$self@user_name@user_age': 'User'})
    with pytest.raises(Invalid) as exinfo:
        f(value)
    assert exinfo.value.position == expect
Exemple #10
0
def validr_simple_validate():
    sp = SchemaParser()
    schema = {
        "user": {"userid?int(0,9)": "UserID"},
        "tags": ["int&min=0"],
        "style": {
            "width?int": "width",
            "height?int": "height",
            "border-width?int": "border-width",
            "border-style?str": "border-style",
            "border-color?str": "border-color",
            "color?str": "Color"
        },
        "unknown?str&optional": "unknown value"
    }
    return sp.parse(schema)
Exemple #11
0
def default():
    sp = SchemaParser()
    schema = {
        'user': {'userid?int(0,9)': 'UserID'},
        'tags': ['int&min=0'],
        'style': {
            'width?int': 'width',
            'height?int': 'height',
            'border_width?int': 'border_width',
            'border_style?str': 'border_style',
            'border_color?str': 'border_color',
            'color?str': 'Color'
        },
        'optional?str&optional': 'unknown value'
    }
    return sp.parse(schema)
Exemple #12
0
def validr_validate():
    shared = {
        "size": {
            "width?int": "width",
            "height?int": "height"
        },
        "border": {
            "border-width?int": "border-width",
            "border-style?str": "border-style",
            "border-color?str": "border-color"
        },
        "user": {"userid?int(0,9)": "UserID"},
    }
    sp = SchemaParser(shared=shared)
    schema = {
        "user@user": "******",
        "tags": ["int&min=0"],
        "style": {
            "$self@size@border": "style",
            "color?str": "Color"
        },
        "unknown?str&optional": "unknown value"
    }
    return sp.parse(schema)
Exemple #13
0
def use_refer_merge():
    shared = {
        'size': {
            'width?int': 'width',
            'height?int': 'height'
        },
        'border': {
            'border_width?int': 'border_width',
            'border_style?str': 'border_style',
            'border_color?str': 'border_color'
        },
        'user': {'userid?int(0,9)': 'UserID'},
    }
    sp = SchemaParser(shared=shared)
    schema = {
        'user@user': '******',
        'tags': ['int&min=0'],
        'style': {
            '$self@size@border': 'style',
            'color?str': 'Color'
        },
        'optional?str&optional': 'unknown value'
    }
    return sp.parse(schema)
Exemple #14
0
def test_refer_dict(schema, value):
    sp = SchemaParser(shared={'user': {'userid?int': 'UserID'}})
    f = sp.parse(schema)
    assert f(value) == value
Exemple #15
0
def test_refer_list(schema, value):
    sp = SchemaParser(shared={'tags': ['int']})
    f = sp.parse(schema)
    assert f(value) == value
Exemple #16
0
def test_shared_not_found():
    sp = SchemaParser()
    with pytest.raises(SchemaError):
        sp.parse({'user@user': '******'})
Exemple #17
0
def test_refer_scalar(schema, value):
    sp = SchemaParser(shared={'userid': 'int'})
    f = sp.parse(schema)
    assert f(value) == value
Exemple #18
0
def test_mixins(schema, value, expect):
    sp = SchemaParser(shared={"user1": {"userid?int": "userid"}, "user2": {"name?str": "name", "age?int": "age"}})
    assert sp.parse(schema)(value) == expect
Exemple #19
0
def test_optional(schema, value):
    sp = SchemaParser(shared={'userid': 'int'})
    f = sp.parse(schema)
    assert f(value) == value
Exemple #20
0
def test_refer_list(value, expect):
    sp = SchemaParser(shared={"user": {"userid?int(0,9)": "UserID"}})
    f = sp.parse(["@user"])
    assert f(value) == expect
Exemple #21
0
def test_shared_not_found():
    sp = SchemaParser(shared={'user': {'userid?int': 'userid'}})
    with pytest.raises(SchemaError):
        sp.parse({'$self@unknown@user': '******'})
Exemple #22
0
def test_refer_scalar(value, expect):
    sp = SchemaParser(shared={"userid": "int(0,9)"})
    f = sp.parse({"userid@userid": "UserID"})
    assert f(value) == expect
Exemple #23
0
def test_refer_dict(value, expect):
    sp = SchemaParser(shared={"user": {"userid?int(0,9)": "UserID"}})
    f = sp.parse({"group@user": "******"})
    value = {"group": value}
    expect = {"group": expect}
    assert f(value) == expect
Exemple #24
0
def test_multi_refer_error(schema):
    sp = SchemaParser(shared={"number": "int", "text": "str"})
    with pytest.raises(SchemaError):
        sp.parse(schema)
Exemple #25
0
def test_optional_refer(schema, value, expect):
    sp = SchemaParser(shared={"user": {"userid?int": "userid"}})
    assert sp.parse(schema)(value) == expect
Exemple #26
0
def test_mixin_shared_not_found():
    sp = SchemaParser(shared={"user1": {"userid?int": "userid"}})
    with pytest.raises(SchemaError):
        sp.parse({"$self@user2@user1": "desc"})
Exemple #27
0
def test_merge_non_dict_value_error():
    sp = SchemaParser(shared={'a': 'int', 'b': {'k?str': 'v'}})
    with pytest.raises(SchemaError) as exinfo:
        sp.parse({'key': {'$self@a@b': 'invalid merges'}})
    assert exinfo.value.position == 'key'
    assert '@a' in exinfo.value.message
Exemple #28
0
def test_list_refer(value, expect):
    sp = SchemaParser(shared={"numbers": ["(1,3)&unique", "int(0,9)"]})
    f = sp.parse("@numbers")
    assert f(value) == expect
Exemple #29
0
def test_multi_refer_error(schema):
    sp = SchemaParser(shared={'number': 'int', 'text': 'str'})
    with pytest.raises(SchemaError):
        sp.parse(schema)
Exemple #30
0
def test_list_refer_fail(value):
    sp = SchemaParser(shared={"numbers": ["(1,3)&unique", "int(0,9)"]})
    f = sp.parse("@numbers")
    with pytest.raises(Invalid):
        f(value)
Exemple #31
0
def test_merge_non_dict_value_error():
    sp = SchemaParser(shared={"a": "int", "b": "str"})
    f = sp.parse({"key": {"$self@a@b": "invalid mixins"}})
    with pytest.raises(SchemaError) as exinfo:
        f({"key": "123"})
    assert exinfo.value.position == "key"
Exemple #32
0
def test_multi_self_described_error(schema):
    sp = SchemaParser(shared={"user": {"userid?int": "desc"}})
    with pytest.raises(SchemaError):
        sp.parse(schema)