Конфигурация YAML с диапазоном действия - PullRequest
0 голосов
/ 29 мая 2020

У меня есть файл YAML, который содержит некоторую конфигурацию для моего приложения. Теперь некоторые конфиги нужно менять со временем. Например:

Для 2020 года значения:

tax:
    federal: 9
    provincial: 7

Но для 2021 года нам нужно:

tax:
    federal: 9.5
    provincial: 7.5

Было бы легко, если бы я мог только переключить yml с течением времени, но файл yaml содержит множество конфигураций, которые будут меняться в разное время. Кроме того, мне назначен только 1 yml-файл для настройки моего приложения, так что это не вариант.

Итак, мой вопрос: как лучше всего представить это с помощью YAML?

Единственный способ, который я могу придумать, - это следующее, но я вижу, что все идет очень запутанно.

tax:
    federal: [20200101-20201231]9;[20210101-20211231]9.5
    provincial:  [20200101-20201231]7;[20210101-20211231]7.5;

1 Ответ

1 голос
/ 29 мая 2020

Ваш синтаксис является незаконным, вам нужно будет заключить его в кавычки, проанализировать его как единый скаляр и обработать его.

Я предлагаю использовать систему тегов YAML: вы используете тег вроде !datedep для обозначения значений, например:

tax:
    federal: !datedep { [20200101, 20210101, 20220101]: [9, 7.5] }
    provincial: !datedep { [20200101, 20210101, 20220101]: [7, 7.5] }

Я даю в качестве значения отображение YAML с одной парой ключ-значение. Ключ - это список дат, выстраивая промежутки между ними. Значение - это список значений, которые должны быть сопоставлены с диапазонами между датами.

При загрузке YAML вы должны предоставить конструктор для тега !datedep. Как это работает, зависит от вашей реализации. Конструктор должен выбрать соответствующее значение на основе текущей даты. Вы можете использовать якоря и псевдонимы YAML для ссылки на повторяющиеся диапазоны дат, например:

tax:
    federal: !datedep { &y2021 [20200101, 20210101, 20220101]: [9, 7.5] }
    provincial: !datedep { *y2021 : [7, 7.5] }
...