Использование YAML для создания и поддержки конфигурации для моей программы на Python, и мне это нравится. Мой конфиг огромен, поэтому его пришлось разделить на логически отдельный файл поменьше и использовать трюк add_constructor()
с тегом !include
.
Конфиг является иерархическим, он выглядит следующим образом (ну, с гораздо большим количеством уровней). Разделы имеют свои собственные файлы YAML в структуре каталогов, соответствующей иерархии конфигурации (т.е. A/B/C.yaml
):
A:
B:
C: !include A/B/C
Добавленный конструктор для тега !include
получает 2 аргумента, загрузчик и объекты узла, как обычно. Я почти уверен, что путь в графе узлов может быть каким-то образом определен из загрузчика и / или объекта узла.
Я попытался найти объект узла, но у него нет пути, аргумента или метода, который бы предоставил эту информацию. В загрузчике есть ссылки на анализатор и другие методы в процессе загрузки, но я пока не понимаю, насколько загружен YAML, чтобы выяснить, где находится путь.
Я ленивый и хочу указать только один "! Include this " в моей конфигурации, то есть без указания (снова) пути в иерархии.
A:
B:
C: !include this
«this» должно быть ключевым словом рода, так что значение узла существует, и я могу оставить опцию открытой для указания реального / другого пути. Мой конструктор затем проверит значение узла и, если ключевое слово "this" найдено, вычислит путь, в противном случае значение узла будет использоваться буквально в качестве пути.