Вопрос

Я использую YAML в качестве формата файла конфигурации для проекта Python.

Недавно я нашел прием быть единственным валидатором схемы, доступным для Python и YAML.:-/ Квалифи работает с YAML, но только для Ruby и Java.:(

Я весь день читал недостающую документацию и просто не могу написать действительную схему для представления моей файловой структуры.Помощь?

У меня есть следующий файл конфигурации YAML:

cmd:
  exec: mycmd
  aliases: [my, cmd]
  filter:
    sms: 'regex .*'

load:
  exec: load
  filter:
    sms: 'load: .*$'

echo:
  exec: echo %

Мне не удается представить вложенную структуру.Я хочу, чтобы самый внешний элемент (в данном случае cmd, load и echo) был произвольной строкой, которая, в свою очередь, содержала другие элементы.«exec» — фиксированная строка и обязательный элемент;«псевдонимы» и «фильтр» также фиксированы, но должны быть необязательными.Фильтр, в свою очередь, имеет еще один набор обязательных и необязательных элементов.Как мне это представить с помощью Rx?

На данный момент у меня есть следующая схема (в YAML), которую Rx не может скомпилировать:

type: //rec
required:
  type: //rec
  required:
    exec: //str
  optional:
    aliases:
      type: //arr
      contents: //str
      length: {min: 1, max: 10}
    filter:
      type: //rec
      optional:
        sms: //str
        email: //str
        all: //str

Тестирование этого в IPython дает мне следующее:

/Rx.py in make_schema(self, schema)
     68       raise Error('invalid schema argument to make_schema')
     69
---> 70     uri = self.expand_uri(schema["type"])
     71
     72     if not self.type_registry.get(uri): raise "unknown type %s" % uri

KeyError: 'type'

Это заставляет меня думать, что я где-то не указываю «тип».:-С

Есть идеи?

Я уже устал бороться с этой штукой...Есть ли другой способ написать схему и использовать ее для проверки файлов конфигурации?

Заранее спасибо,

Иван

Это было полезно?

Решение

Попробуй это:

type: //map
values:
  type: //rec
  required:
    exec: //str
  optional:
    aliases:
      type: //arr
      contents: //str
      length: {min: 1, max: 10}
    filter:
      type: //rec
      optional:
        sms: //str
        email: //str
        all: //str

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top