Проверка цербера Python для типов объединений

#python #validation #dsl #cerberus

Вопрос:

Я использую Cerberus для построения логики проверки какого-то DSL, которая определяет список различных объектов. Например (с использованием YAML):

     items:
      - name: shape1
        type: Circle
        radius: 2
      - name: shape2
        type: Rectangle
        length: 2
        width: 1
 

Как я могу использовать Cerberus для проверки различных атрибутов для разных типов? Я попытался использовать схему(список) любые правила , и это не работает. Пример схемы выглядит примерно так:

 items:
  type: list
  anyof:
    - schema:
        name:
          type: string
          required: true
        type:
          type: string
          required: true
        radius:
          type: int
          required: true
    - schema:
        name:
          type: string
          required: true
        type:
          type: string
          required: true
        length:
          type: int
          required: true
        width:
          type: int
          required: true

 

Ошибка выборки:

самость = Объект валидатора в 0x00000270F16E5040>, домен = ‘проверка’, правило = ‘тип’

 def __get_rule_handler(self, domain, rule):
    methodname = '_{0}_{1}'.format(domain, rule.replace(' ', '_'))
    result = getattr(self, methodname, None)
    if result is None:
 
       raise RuntimeError(
 
             "There's no handler for '{}' in the '{}' "
            "domain.".format(rule, domain)
        ) E           RuntimeError: There's no handler for 'type' in the 'validate' domain.