def _validate_metadata_errors(vals, meta, expected_key, expected_dev_message):
    mv = MetadataValidatorSet(vals)
    # with raises(Exception) as got:
    errors = mv.validate_metadata(meta, return_error_detail=True)
    assert len(errors) == 1
    assert str(errors[0]['key']) == str(expected_key)
    assert str(errors[0]['dev_message']) == str(expected_dev_message)
def test_set_with_validators():
    mv = MetadataValidatorSet([
        # this is vile
        MetadataValidator('key1', [
            lambda k, v: exec('assert k == "key1"'),
            lambda k, v: exec('assert v == {"a": "b"}')
        ]),
        MetadataValidator('key2', [lambda k, v: exec('assert k == "key2"')])
    ])

    md = {'key1': {'a': 'b'}, 'key2': {'foo': 'bar'}}
    mv.validate_metadata(md)
    mv.validate_metadata(maps.FrozenMap(md))

    assert mv.keys() == ['key1', 'key2']
    assert mv.prefix_keys() == []
    assert mv.validator_count('key1') == 2
    assert mv.validator_count('key2') == 1
def test_set_with_prefix_validators_multiple_matches():
    results = []
    mv = MetadataValidatorSet([
        MetadataValidator('somekey', [lambda k, v: results.append((k, v))]),
        MetadataValidator('somekeya',
                          prefix_validators=[
                              lambda p, k, v: exec(
                                  'raise ValueError("test failed somekeya")')
                          ]),
        MetadataValidator(
            'somekex',
            prefix_validators=[
                lambda p, k, v: exec('raise ValueError("test failed somekex")')
            ]),
        MetadataValidator(
            'somekey',
            prefix_validators=[lambda p, k, v: results.append((p, k, v))]),
        MetadataValidator(
            'somekez',
            prefix_validators=[
                lambda p, k, v: exec('raise ValueError("test failed somekez")')
            ]),
        MetadataValidator(
            'someke',
            prefix_validators=[lambda p, k, v: results.append((p, k, v))]),
        MetadataValidator(
            's', prefix_validators=[lambda p, k, v: results.append(
                (p, k, v))]),
        MetadataValidator(
            't',
            prefix_validators=[
                lambda p, k, v: exec('raise ValueError("test failed t")')
            ]),
    ])
    md = {'somekey': {'x', 'y'}}
    mv.validate_metadata(md)

    print(results)
    assert results == [
        ('somekey', {'x', 'y'}),
        ('s', 'somekey', {'x', 'y'}),
        ('someke', 'somekey', {'x', 'y'}),
        ('somekey', 'somekey', {'x', 'y'}),
    ]
def test_set_with_prefix_validators():
    mv = MetadataValidatorSet([
        # this is vile
        MetadataValidator('pre1',
                          prefix_validators=[
                              lambda p, k, v: exec('assert p == "pre1"'),
                              lambda p, k, v: exec('assert k == "pre1stuff"'),
                              lambda p, k, v: exec('assert v == {"a": "b"}')
                          ]),
        MetadataValidator(
            'pre2',
            prefix_validators=[lambda p, k, v: exec('assert p == "pre2"')])
    ])

    md = {'pre1stuff': {'a': 'b'}, 'pre2thingy': {'foo': 'bar'}}
    mv.validate_metadata(md)
    mv.validate_metadata(maps.FrozenMap(md))

    assert mv.keys() == []
    assert mv.prefix_keys() == ['pre1', 'pre2']
    assert mv.prefix_validator_count('pre1') == 3
    assert mv.prefix_validator_count('pre2') == 1
def test_set_with_prefix_validators_and_standard_validator():
    mv = MetadataValidatorSet([
        # this is vile
        MetadataValidator('pre1',
                          prefix_validators=[
                              lambda p, k, v: exec('assert p == "pre1"'),
                              lambda p, k, v: exec('assert k == "pre1stuff"'),
                              lambda p, k, v: exec('assert v == {"a": "b"}')
                          ]),
        MetadataValidator(
            'pre2',
            prefix_validators=[lambda p, k, v: exec('assert p == "pre2"')]),
        # test that non-prefix validator with same name is ok
        MetadataValidator('pre2', [lambda k, v: exec('raise ValueError()')])
    ])

    md = {'pre1stuff': {'a': 'b'}, 'pre2thingy': {'foo': 'bar'}}
    mv.validate_metadata(md)
    mv.validate_metadata(maps.FrozenMap(md))

    assert mv.keys() == ['pre2']
    assert mv.prefix_keys() == ['pre1', 'pre2']
    assert mv.prefix_validator_count('pre1') == 3
    assert mv.prefix_validator_count('pre2') == 1
def _validate_metadata_fail(vals, meta, expected):
    mv = MetadataValidatorSet(vals)
    with raises(Exception) as got:
        mv.validate_metadata(meta)
    assert_exception_correct(got.value, expected)
Пример #7
0
def _validate_metadata_errors(vals, meta, expected):
    mv = MetadataValidatorSet(vals)
    # with raises(Exception) as got:
    errors = mv.validate_metadata(meta, return_error_strings=True)
    assert len(errors) == 1
    assert str(errors[0]) == str(expected)