мета-данные страницы
  •  

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
lib.py:aw_config:root [30.10.2024 10:00] awgurlib.py:aw_config:root [24.06.2026 13:41] (текущий) awgur
Строка 1: Строка 1:
 +====== Ресурсы ======
 +  * [[https://repo.devel.a0fs.ru/py.lib.aw_config/|Исходный код]]
 +  * [[https://py-repo.devel.a0fs.ru/|Дистрибутивы]]
 +
 +====== Разделы ======
 +
   * [[.:obj|Объекты]]   * [[.:obj|Объекты]]
   * [[.:func|Функции]]   * [[.:func|Функции]]
   * [[.:except|Исключения]]   * [[.:except|Исключения]]
   * [[.:type_helper|Адаптеры типов]]   * [[.:type_helper|Адаптеры типов]]
 +
 +
 +====== Работа с файлом конфигурации ======
 +
 +Конструктор объекта ''ConfigFile'' принимает путь к файлу конфигурации. Путь задаётся строкой и может быть относительным.
 +
 +<code python>
 +conf_file = ConfigFile('/etc/application.conf')
 +</code>
 +
 +Далее объект ''ConfigFileContent'' можно получить либо вызвав метод ''get()'', либо, что более предпочтительно, воспользовавшись менеджером контекста:
 +
 +<code python>
 +with ConfigFile(config_file) as root_section:
 +  port = root_section.get_value('port', int, 8080)
 +</code>
 +
 +Особенно хорошо и лаконично получается при использовании хранилища конфигураций:
 +<code python>
 +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)
 +    ))
 +</code>
 +
 +Для работы с разделами и подразделами конфигурации можно получать доступ к вложенным словарям:
 +<code python>
 +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)
 +        ))
 +</code>
 +
 +Вложенность не ограничивается.
 +
 +Для работы с списками секций, когда формат конфигурации следующий:
 +<code toml>
 +[[net]]
 +name = "a"
 +ip = "192.168.0.0/24"
 +
 +[[net]]
 +name = "b"
 +ip = "192.168.1.0/24"
 +</code>
 +
 +Используется метод ''get_list_section()''
 +<code python>
 +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)
 +</code>
 +
 +Кроме массива можно строить словарь, если выделить некий ключевой элемент в конфигурации
 +<code python>
 +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)
 +</code>
 +
 +
 +Иной работы объекты класса ''ConfigFile'' не делают.
 +
 +
 +===== Работа с параметрами конфигурации =====
 +
 +Как известно, файлы конфигурации в формате ''toml'' легко можно представить в виде словаря Python (либо JSON-объекта). Для работы с одним уровнем данного словаря и создан класс ''ConfigFileContent''. Он даёт API работы с параметрами на данном текущем уровне.