Beispiel #1
0
    class MagicString(Annotable):
        foo = Argument(str)
        bar = Argument(bool)
        baz = Argument(int)

        def __eq__(self, other):
            return self.args == other.args
Beispiel #2
0
def test_argument(validator, expected):
    arg = Argument(validator)

    # test coercion
    assert arg.validate(3) == expected

    # syntactic sugar
    assert arg(3) == expected
Beispiel #3
0
def test_argument_raise_on_missing_value():
    validator = Argument(lambda x: x)

    expected_msg = "missing 1 required positional argument"
    with pytest.raises(TypeError, match=expected_msg):
        validator()

    expected_msg = "got an unexpected keyword argument 'name'"
    with pytest.raises(TypeError, match=expected_msg):
        validator(name='mandatory')
Beispiel #4
0
def test_argument_raise_on_missing_value():
    arg = Argument(lambda x: x)

    expected_msg = 'Missing required value for argument'
    with pytest.raises(TypeError, message=expected_msg):
        arg.validate()

    expected_msg = 'Missing required value for argument `mandatory`'
    with pytest.raises(TypeError, message=expected_msg):
        arg.validate(name='mandatory')
Beispiel #5
0
 class StringJoin(StringOp):
     __slots__ = ('_memoize', )  # new slot
     sep = Argument(str)  # new overridden slot
Beispiel #6
0
 class IntBinop(Annotable):
     left = Argument(int)
     right = Argument(int)
Beispiel #7
0
def test_invalid_arity_validator():
    arg = Argument(lambda x, y: x + y)
    with pytest.raises(TypeError):
        arg('value')
Beispiel #8
0
class MagicString(StringOp):
    foo = Argument(str)
    bar = Argument(bool)
    baz = Argument(int)
Beispiel #9
0
class ValueOp(Op):
    arg = Argument(object)
Beispiel #10
0
 class B(Annotable):
     b = Argument(int)
Beispiel #11
0
 class UDAF(UDF, Reduction):
     arity = Argument(int)
Beispiel #12
0
 class StringSplit(StringOp):
     sep = Argument(str)  # inherit
Beispiel #13
0
 class StringJoin(StringOp):
     __slots__ = '_memoize',  # override
     sep = Argument(str)
Beispiel #14
0
 class StringOp(Op):
     arg = Argument(str)  # inherit
Beispiel #15
0
 class FloatAddClip(FloatAddRhs):
     left = Argument(float)
     clip_lower = Argument(int, default=0)
     clip_upper = Argument(int, default=10)
Beispiel #16
0
 class FloatAddRhs(IntBinop):
     right = Argument(float)
Beispiel #17
0
 class ValueOp(Annotable):
     arg = Argument(object)
Beispiel #18
0
def test_optional_argument(default, expected):
    arg = Argument(lambda x: x, default=default)
    assert arg.validate() == expected
    assert arg() == expected
Beispiel #19
0
 class UDF(ValueOp):
     func = Argument(lambda fn, this: fn)
Beispiel #20
0
        validator(name='mandatory')


@pytest.mark.parametrize(
    ('default', 'expected'),
    [(None, None), (0, 0), ('default', 'default'), (lambda: 3, 3)],
)
def test_optional_argument(default, expected):
    validator = Optional(lambda x: x, default=default)
    assert validator(None) == expected


@pytest.mark.parametrize(
    ('validator', 'value', 'expected'),
    [
        (Argument(identity, default=None), None, None),
        (Argument(identity, default=None), 'three', 'three'),
        (Argument(identity, default=1), None, 1),
        (Argument(identity, default=lambda: 8), 'cat', 'cat'),
        (Argument(identity, default=lambda: 8), None, 8),
        (Argument(int, default=11), None, 11),
        (Argument(int, default=None), None, None),
        (Argument(int, default=None), 18, 18),
        (Argument(str, default=None), 'caracal', 'caracal'),
    ],
)
def test_valid_optional(validator, value, expected):
    assert validator(value) == expected


@pytest.mark.parametrize(
Beispiel #21
0
 class A(Annotable):
     a = Argument(int)
Beispiel #22
0
 class Between(Annotable):
     value = Argument(int)
     lower = Argument(int, default=0)
     upper = Argument(int, default=None)
Beispiel #23
0
 class AB(A, B):
     ab = Argument(int)
Beispiel #24
0
 class Op(Annotable):
     __slots__ = ('_cache', )  # first definition
     arg = Argument(lambda x: x)
Beispiel #25
0
class StringOp(ValueOp):
    arg = Argument(str)
Beispiel #26
0
def test_signature_equals():
    s1 = TypeSignature([
        ('left', Argument(int)),
        ('right', Argument(int))
    ])
    s2 = TypeSignature([
        ('left', Argument(int)),
        ('right', Argument(int))
    ])
    s3 = TypeSignature([
        ('left', Argument(int)),
        ('right', Argument(float))
    ])
    s4 = TypeSignature([
        ('left', Argument(int)),
        ('right', Argument(float))
    ])
    s5 = TypeSignature([
        ('left_one', Argument(int)),
        ('right', Argument(float))
    ])
    s6 = TypeSignature([
        ('left_one', Argument(int)),
        ('right', Argument(int))
    ])
    assert s1 == s2
    assert s3 == s4
    assert s1 != s3
    assert s2 != s4
    assert s1 != s5
    assert s2 != s6
    assert s5 != s6
Beispiel #27
0
def test_invalid_validator(validator):
    with pytest.raises(TypeError):
        Argument(validator)
Beispiel #28
0
 class StringSplit(StringOp):
     sep = Argument(str)  # new slot
Beispiel #29
0
 class StringOp(Op):
     arg = Argument(str)  # new overridden slot
Beispiel #30
0
def test_signature_inheritance():
    class IntBinop(Annotable):
        left = Argument(int)
        right = Argument(int)

    class FloatAddRhs(IntBinop):
        right = Argument(float)

    class FloatAddClip(FloatAddRhs):
        left = Argument(float)
        clip_lower = Argument(int, default=0)
        clip_upper = Argument(int, default=10)

    class IntAddClip(FloatAddClip, IntBinop):
        pass

    assert IntBinop.signature == TypeSignature([
        ('left', Argument(int)),
        ('right', Argument(int))
    ])
    assert FloatAddRhs.signature == TypeSignature([
        ('left', Argument(int)),
        ('right', Argument(float))
    ])
    assert FloatAddClip.signature == TypeSignature([
        ('left', Argument(float)),
        ('right', Argument(float)),
        ('clip_lower', Argument(int, default=0)),
        ('clip_upper', Argument(int, default=10))
    ])
    assert IntAddClip.signature == TypeSignature([
        ('left', Argument(int)),
        ('right', Argument(int)),
        ('clip_lower', Argument(int, default=0)),
        ('clip_upper', Argument(int, default=10))
    ])