Verifying that two parameters have the same elements using Cerberus

Is there a way for Cerberus to confirm that two fields have the same number of elements?

For example, this document will check:

{'a': [1, 2, 3], b: [4, 5, 6]} 

And it will not be:

 {'a': [1, 2, 3], 'b': [7, 8]} 

So far I have come up with this scheme:

 {'a': {'required':False, 'type'= 'list', 'dependencies':'b'}, 'b': {'required':False, 'type'= 'list', 'dependencies':'a'}} 

But there is no rule for checking the equal length of two fields.

+1
source share
1 answer

With a custom rule, this is pretty straight forward:

 >>> from cerberus import Validator >>> class MyValidator(Validator): def _validate_match_length(self, other, field, value): if other not in self.document: return False if len(value) != len(self.document[other]): self._error(field, "Length doesn't match field %s length." % other) >>> schema = {'a': {'type': 'list', 'required': True}, 'b': {'type': 'list', 'required': True, 'match_length': 'a'}} >>> validator = MyValidator(schema) >>> document = {'a': [1, 2, 3], 'b': [4, 5, 6]} >>> validator(document) True >>> document = {'a': [1, 2, 3], 'b': [7, 8]} >>> validator(document) False 
+2
source

All Articles