alecthomas / alecthomas/voluptuous
erroneous processing of nested iterables
- Ngôn ngữ chính
- Python
- Star
- 1.9k
- Fork
- 237
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Mô tả
Related to the discussion in https://github.com/alecthomas/voluptuous/pull/141. See https://github.com/alecthomas/voluptuous/pull/141#issuecomment-167267024 in particular.
### Version
```
$ pip list | grep voluptuous
voluptuous (0.8.8)
```
Voluptuous seems to get confused by nested iterables. To demonstrate, I'll use a list of dictionaries.
``` pycon
>>> from voluptuous import *
>>> data = [{1: 'one'}, {2: 'two'}]
```
### Case 0: a list of dictionaries
I would expect this to work as is.
``` pycon
>>> schema = Schema([{1: str}, {2: str}])
>>> schema(data)
Traceback (most recent call last):
File "", line 1, in
File "/usr/lib64/python3.4/site-packages/voluptuous.py", line 337, in __call__
return self._compiled([], data)
File "/usr/lib64/python3.4/site-packages/voluptuous.py", line 672, in validate_sequence
cval = validate(index_path, value)
File "/usr/lib64/python3.4/site-packages/voluptuous.py", line 635, in validate_dict
return base_validate(path, iteritems(data), out)
File "/usr/lib64/python3.4/site-packages/voluptuous.py", line 471, in validate_mapping
raise MultipleInvalid(errors)
voluptuous.MultipleInvalid: extra keys not allowed @ data[1][2]
```
### Case 1: the first dictionary has the invalid value
This case correctly finds the true error before getting distracted by the other dictionary.
``` pycon
>>> schema = Schema([{1: bool}, {2: str}])
>>> schema(data)
Traceback (most recent call last):
File "", line 1, in
File "/usr/lib64/python3.4/site-packages/voluptuous.py", line 337, in __call__
return self._compiled([], data)
File "/usr/lib64/python3.4/site-packages/voluptuous.py", line 672, in validate_sequence
cval = validate(index_path, value)
File "/usr/lib64/python3.4/site-packages/voluptuous.py", line 635, in validate_dict
return base_validate(path, iteritems(data), out)
File "/usr/lib64/python3.4/site-packages/voluptuous.py", line 471, in validate_mapping
raise MultipleInvalid(errors)
voluptuous.MultipleInvalid: expected bool for dictionary value @ data[0][1]
```
### Case 2: the second dictionary has the invalid value
Whereas this case does not.
``` pycon
>>> schema = Schema([{1: str}, {2: bool}])
>>> schema(data)
Traceback (most recent call last):
File "", line 1, in
File "/usr/lib64/python3.4/site-packages/voluptuous.py", line 337, in __call__
return self._compiled([], data)
File "/usr/lib64/python3.4/site-packages/voluptuous.py", line 672, in validate_sequence
cval = validate(index_path, value)
File "/usr/lib64/python3.4/site-packages/voluptuous.py", line 635, in validate_dict
return base_validate(path, iteritems(data), out)
File "/usr/lib64/python3.4/site-packages/voluptuous.py", line 471, in validate_mapping
raise MultipleInvalid(errors)
voluptuous.MultipleInvalid: extra keys not allowed @ data[1][2]
```
I will likely try to find time to work on this in the next few days, but if anyone else may know how to fix this, I would be glad for the help.
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Đánh giá
Issue này chưa được đánh giá.