Использование пользовательской проверки для встроенных типов - PullRequest
0 голосов
/ 26 марта 2020

Я хочу проверить тип datetime с помощью пользовательского валидатора, а не встроенного.

Код выглядит следующим образом:

        schema_text = """
            run_date:
                type: datetime
                required: true
            """
        s.schema = yaml.load(schema_text)

        s.validate(yaml.load("run_date: 2017-01-01T00:00+00:00:00"))

I могли сделайте это, используя checks_with: my_custom_validator, что было бы ок , но я надеюсь открыть эти схемы до публикации c, поэтому попросить их всех внести в них свой вклад было бы затруднительно. Я думаю, что это также можно сделать с помощью нормализатора, но, опять же, я бы предпочел не вмешиваться в ввод.

Есть предложения? Парсер dateutil - это именно то, что я хочу использовать.

1 Ответ

1 голос
/ 20 апреля 2020

Поскольку ваши входные данные представляют собой строку, представляющую datetime в формате ISO 8601, вы можете использовать два подхода без какой-либо настройки.

Либо (попытайтесь) преобразовать строку в datetime.datetime объект :

from datetime import datetime

schema = {
    "run_date": {"coerce": datetime.fromisoformat}
}

Это необходимо проверить с помощью нормализации и вызвать ошибку или привести значение поля run_date к объекту datetime.datetime.

Если вы хотите придерживаться строка в качестве типа данных, используйте правило regex:

schema = {
    "run_date": {"type": "string", "regex": r"\d{4}-\d\d-\d\d-etc.pp."}
}
...