Как определить принудительные функции в YAML для библиотеки валидаторов Python Cerberus - PullRequest
0 голосов
/ 15 сентября 2018

Я пытаюсь определить мою схему валидатора для библиотеки python cerberus в YAML, так как она более читаема человеком. Я столкнулся с проблемой, при которой, если я пытаюсь определить принудительную функцию в YAML, я получаю SchemaError. Начиная с примера с Нормализация строки к дате в cerbrus , я изменил ее, чтобы использовать схему YAML.

import datetime
import yaml
st = '''
start_date: 
    type: datetime
    coerce: to_date
'''
schema = yaml.load(st)
v = cerberus.Validator()
to_date = lambda s: datetime.strptime(s, '%Y-%m-%d')
v.schema = schema
v.validate({'start_date': '2017-10-01'})

Я получаю ошибку:

SchemaError: {'start_date': [{'coerce': ['none или более одного правила validate ', {' oneof Definition 0 ': [' должно быть вызываемого типа '],' oneof определение 1 ': [' должно иметь тип списка '],' одно из определения 2 ': ['unallowed value to_Date']}]}]}

Поддерживается ли определение функций принуждения со схемой на основе YAML или мне нужно переключиться обратно на использование JSON?

1 Ответ

0 голосов
/ 17 сентября 2018

Вы создаете лямбда-функцию в глобальной области видимости модуля.Валидатор Цербера не знает, что вы имеете в виду, когда ссылаетесь на 'to_date'.Следовательно, вам нужно определить coercer в подклассе Validator. Здесь - соответствующая документация.

...