мета-данные страницы
Это старая версия документа!
Общее
В качестве формата конфигурационных файлов принят toml. Разбор конфигурации построен на 2-х объектах:
ConfigFile- обрабатывает файл целиком и предоставляет интерфейс работы с конфигурацией.ConfigFileContent- обрабатывает секции файла, давая интерфейс доступа к элементам конфигурации.
Работа с файлом конфигурации
Конструктор объекта 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(config_file) as root_section: add_config(NetConfig, NetConfig( port=root_section.get_value('port', int, 8080), baseurl=root_section.get_value('baseurl', str) ))
Иной работы объекты класса ConfigFile не делают.
Работа с параметрами конфигурации
Как известно, файлы конфигурации в формате toml легко можно представить в виде словаря Python (либо JSON-объекта). Для работы с одним уровнем данного словаря и создан класс ConfigFileContent. Он даёт API работы с параметрами на данном текущем уровне.
get_value
Получить значение параметра из файла.
get_value(name, [val_type], [default], [mandatory])
Возвращает: Значение параметра, приведённое к заданному типу.
| Параметр | Тип параметра | Значение по умолчанию | Описание |
|---|---|---|---|
name | str | – | Имя параметра, каким оно задано в файле конфигурации |
val_type | Тип аргумента | str | Тип значения. Может быть любым идентификатором типа python, через которое можно вызвать преобразование в данный тип ( type(param)) либо адаптер типа данной библиотеки |
default | Any | None | Значение по умолчанию для параметра. Тип его не проверяется на соответствие заданному в параметрах. |
mandatory | bool | True | Является ли значение обязательным? Если да, то при отсутствии значения по умолчанию и самого значения в файле, будет возбуждено исключение. В противном случае метод тихо вернёт None |
Пример использования дан выше.
get_section
Погрузиться на уровень ниже по словарю конфигурации.
Это позволяет выполнить чтение подуровней конфигурационного файла относительно текущего.
get_section(name, [mandatory])
Возвращает: Объект ConfigFileContent содержимого нижележашего уровня.
| Параметр | Тип | Описание |
|---|---|---|
name | str | Имя секции, как оно задано в файле |
mandatory | bool | Является ли секция обязательной. Если да, и она отсутствует, то возбуждается исключение ConfigSectionNotFound. В противном случае возвращается пустая секция, не содержащая параметров. По умолчанию True |
Для работы с секциями можно применять менеджер контекста. Например для файла с содержимым:
[section] param1 = "value1"
Можно применить следующий код:
with ConfigFile(config_file) as root_section: with root_section.get_section('section') as section_section: param1 = section_section.get_value('parma1')