ceberus: Как игнорировать поле, основанное на комментариях yaml? - PullRequest
0 голосов
/ 26 сентября 2018

Обзор

У меня много файлов .yaml и схема для их проверки.Иногда «неправильное» значение на самом деле является правильным.

Мне нужен какой-то способ игнорировать некоторые поля.В этих полях проверки не выполняются.

Пример

  ## file -- a.yaml
  some_dict:
      some_key: some_valid_value

  ## file -- b.yaml
  some_dict:
      some_key: some_INVALID_value # cerberus: ignore

Как я могу это сделать?

1 Ответ

0 голосов
/ 21 марта 2019

Быстрый ответ (TL; DR)

  • Подход "составной проверки" допускает условные (контекстно-зависимые) правила проверки.
  • Пакет python cerberus поддерживает составнойпроверка "из коробки".
  • Комментарии YAML не могут использоваться для составной проверки, однако поля YAML могут.

Подробный ответ

Контекст

  • python 2.7
  • пакет проверки цербера

Задача

  • Разработчик PabloPajamasCreator хочет применить правила условной проверки.
  • Правила условной проверки активируются на основе наличия или значения других полей в наборе данных.
  • Правила условной проверки должны быть достаточно гибкими, чтобы изменять их «на лету» на основе любых произвольных состояний или отношений висходные данные.

Решение

  • Этот подход может быть реализован с помощью проверки составных данных.
  • В этом сценарии использованиясоставная проверка просто означает создание последовательного списка правил проверки, например:
    • Каждое отдельное правило работает с переменной составных данных
    • Каждое отдельное правило задает «условие срабатывания» для случая, когда правило применяется
    • Каждое отдельное правило создает один из трех взаимоисключающих результатов проверки: validation-success, validation-fail или validation-skipped

Пример

Примеры правил проверки
- rule_caption:     check-required-fields
  rule_vpath:       "@"
  validation_schema:
    person_fname:
      type: string
      required: true
    person_lname:
      type: string
      required: true
    person_age:
      type: string
      required: true

- rule_caption:     check-age-range
  rule_vpath:       '@|@.person_age'
  validation_schema:
    person_age:
      "min": 2
      "max": 120

- rule_caption:     check-underage-minor
  rule_vpath:       '[@]|[? @.person_age < `18`]'
  validation_schema:
    prize_category:
      type: string
      allowed: ['pets','toys','candy']
    prize_email:
      type:     string
      regex:    '[\w]+@.*'
  • Приведенный выше код представляет собой представление нескольких правил проверки в формате YAML.

Обоснование

  • Этот подход может быть расширен долюбой произвольный уровень сложности.
  • Этот подход легко понятен людям (хотя синтаксис jmespath может быть проблемой)
  • Любой произвольно сложный набор условий и ограничений может быть установлен с использованием этого подхода.

Подводные камни

  • В приведенном выше примере используется синтаксис jmespath для указания rule_vpath, что означаетЕсли система запускает определенные правила, добавляется зависимость от jmespath.

См. также

...