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)
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)