====== Ресурсы ======
* [[https://repo.devel.a0fs.ru/py.lib.aw_config/|Исходный код]]
* [[https://py-repo.devel.a0fs.ru/|Дистрибутивы]]
====== Разделы ======
* [[.:obj|Объекты]]
* [[.:func|Функции]]
* [[.:except|Исключения]]
* [[.:type_helper|Адаптеры типов]]
====== Работа с файлом конфигурации ======
Конструктор объекта ''ConfigFile'' принимает путь к файлу конфигурации. Путь задаётся строкой и может быть относительным.
conf_file = ConfigFile('/etc/application.conf')
Далее объект ''ConfigFileContent'' можно получить либо вызвав метод ''get()'', либо, что более предпочтительно, воспользовавшись менеджером контекста:
with ConfigFile(config_file) as root_section:
port = root_section.get_value('port', int, 8080)
Особенно хорошо и лаконично получается при использовании хранилища конфигураций:
with ConfigFile('/etc/application.conf') as root_section:
add_config(NetConfig, NetConfig(
port=root_section.get_value('port', int, 8080),
baseurl=root_section.get_value('baseurl', str)
))
Для работы с разделами и подразделами конфигурации можно получать доступ к вложенным словарям:
with ConfigFile('/etc/application.conf') as root_section:
with root_sectin.get_section('net') as net_section:
add_config(NetConfig, NetConfig(
port=net_section.get_value('port', int, 8080),
baseurl=net_section.get_value('baseurl', str)
))
Вложенность не ограничивается.
Для работы с списками секций, когда формат конфигурации следующий:
[[net]]
name = "a"
ip = "192.168.0.0/24"
[[net]]
name = "b"
ip = "192.168.1.0/24"
Используется метод ''get_list_section()''
with ConfigFile('/etc/application.conf') as root_section:
conf_ar = []
for net_section in root_sectin.get_list_section('net'):
conf_ar.append(NetConfig(
name=net_section.get_value('name'),
ip=net_section.get_value('ip')
))
add_config(NetConfig, conf_ar)
Кроме массива можно строить словарь, если выделить некий ключевой элемент в конфигурации
with ConfigFile('/etc/application.conf') as root_section:
conf_ar = {}
for net_section in root_sectin.get_list_section('net'):
_name = net_section.get_value('name')
conf_ar[_name] = NetConfig(
name=_name,
ip=net_section.get_value('ip')
)
add_config(NetConfig, conf_ar)
Иной работы объекты класса ''ConfigFile'' не делают.
===== Работа с параметрами конфигурации =====
Как известно, файлы конфигурации в формате ''toml'' легко можно представить в виде словаря Python (либо JSON-объекта). Для работы с одним уровнем данного словаря и создан класс ''ConfigFileContent''. Он даёт API работы с параметрами на данном текущем уровне.