-
Notifications
You must be signed in to change notification settings - Fork 239
Description
Used Cerberus version / latest commit: current master (3f673c9)
-
I consulted these documentations:
-
I consulted these sections of the docs (add more lines as necessary):
- /api.html#rules-set-schema-registry
- /normalization-rules.html
-
I found nothing relevant to my problem in the docs.
-
I found the documentation not helpful to my problem.
-
I have the capacity to improve the docs when my problem is solved.
-
I have the capacity to submit a patch when a bug is identified.
Bug report
Normalization rules like default cannot be part of a rules set. Consider these failings tests:
def test_rules_set_simple_with_default():
rules_set_registry.add('foo', {'default': 42})
assert_normalized({}, {'bar': 42}, {'bar': 'foo'})
def test_rules_set_simple_with_default_setter():
rules_set_registry.add('foo', {'default_setter': lambda _: 42})
assert_normalized({}, {'bar': 42}, {'bar': 'foo'})The reason is - in my opinion - that the normalization code uses schema[field] directly without calling self._resolve_rules_set where appropriate. This causes other misbehaviour, too:
def test_rules_set_simple_with_none_value():
rules_set_registry.add('foo', {'type': 'integer', 'nullable': True})
assert_success({'bar': None}, {'bar': 'foo'})This will fail because code in __normalize_default_fields will do schema['bar'].get('nullable', False) - which will fail because schema['bar'] will be the string 'foo'.
Is this actually a bug or am I missing something? Are rules sets just meant to be used for validation rules?