Нормализация вложенных данных при проверке данных в Цербере
Ситуация
Используя Cerberus, я хотел бы уменьшить свои данные, чтобы они были проверены путем удаления неизвестных ключей с уровней, где не должно быть никаких неизвестных ключей.
Однако у меня возникли проблемы с этим. Вот некоторые примеры данных и пример схемы.
data = {
'data': {
'some_bool': True,
'some_string': 'some_string',
'some_int': 0,
'some_dict_with_some_unexpected_keys': {
'expected_key1': 'Thing1',
'expected_key2': 'path_to_thing',
'unexpected_key1': 'Surprise!'
}
}
}
example_schema = {
'data': {
'type': 'dict',
'schema': {},
'allow_unknown': {
'anyof': [
{'type': 'string'},
{'type': 'float'},
{'type': 'integer'},
{'type': 'boolean'},
{'type': 'dict',
'allow_unknown': False,
'schema': {
'expected_key1': {
'type': 'string',
'required': True
},
'expected_key2': {
'type': 'string',
'required': True
}
}
}
]
}
}
}
v = Validator()
v.schema = example_schema
print v.validate(data)
print v.normalized(data)
Очевидно, данные этого примера не будут проверены из-за наличия неожиданного ключа, который я хотел бы удалить. Когда я удаляю это вручную, это проверяет. Я попытался использовать purge_unknown, но он, кажется, не распознается как действительный ключ в схеме. Кроме того, v.normalized, кажется, возвращает оригинальный dict, все еще содержащий неожиданный ключ.
Я попробовал решение, упомянутое FunkyFuture здесь: Как я могу удалить поля из документа, который не прошел проверку с помощью Cerberus?
Тем не менее, это убирает всю мою структуру данных, так как v.document_error_tree начинается с
{'data': [ValidationError @ 0x7f593f88c690 ( document_path=('data',)....
Я посмотрю на доработку этого решения, чтобы соответствовать моему случаю, но наверняка должен быть более легкий путь!
Короче
Каков наилучший способ очистки неизвестного ключа (ей) с помощью Цербера?
* Извините за испорченный отступ, блок кода stackru ненавидит меня.