Ресурсы

Разделы

Работа с файлом конфигурации

Конструктор объекта 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 работы с параметрами на данном текущем уровне.