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

Различия

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

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

Следующая версия
Предыдущая версия
lib.py:aw_config:obj [30.10.2024 14:00] – создано awgurlib.py:aw_config:obj [23.06.2026 12:26] (текущий) awgur
Строка 6: Строка 6:
  
  
-====== Работа с файлом конфигурации ====== +==== get_value() ====
- +
-Конструктор объекта ''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(config_file) as root_section: +
-    add_config(NetConfig, NetConfig( +
-        port=root_section.get_value('port', int, 8080), +
-        baseurl=root_section.get_value('baseurl', str) +
-    )) +
-</code> +
- +
-Иной работы объекты класса ''ConfigFile'' не делают. +
- +
- +
-===== Работа с параметрами конфигурации ===== +
- +
-Как известно, файлы конфигурации в формате toml легко можно представить в виде словаря Python (либо JSON-объекта). Для работы с одним уровнем данного словаря и создан класс ''ConfigFileContent''. Он даёт API работы с параметрами на данном текущем уровне. +
- +
- +
-==== get_value ====+
  
 Получить значение параметра из файла. Получить значение параметра из файла.
  
 <code python> <code python>
-get_value(name, [val_type], [default], [mandatory])+obj.get_value(name, [val_type], [default], [mandatory])
 </code> </code>
  
Строка 59: Строка 27:
  
  
-==== get_section ====+==== get_section() ====
  
 Погрузиться на уровень ниже по словарю конфигурации. Погрузиться на уровень ниже по словарю конфигурации.
Строка 66: Строка 34:
  
 <code> <code>
-get_section(name, [mandatory])+obj.get_section(name, [mandatory])
 </code> </code>
  
Строка 83: Строка 51:
 Можно применить следующий код:  Можно применить следующий код: 
 <code python> <code python>
-with ConfigFile(config_file) as root_section:+with ConfigFile('/etc/application.conf') as root_section:
     with root_section.get_section('section') as section_section:     with root_section.get_section('section') as section_section:
 +        param1 = section_section.get_value('parma1')
 +</code>
 +
 +
 +==== get_list_section() ====
 +
 +Подобен ''get_section()'', но ожидает увидеть либо словарь, либо список словарей.
 +
 +<code>
 +obj.get_list_section(name, [mandatory])
 +</code>
 +
 +**Возвращает:** Массив объектов ''ConfigFileContent'' содержимого нижележащего уровня.
 +
 +^ Параметр ^ Тип ^ Описание ^
 +| ''name'' | ''str'' | Имя секции, как оно задано в файле |
 +| ''mandatory'' | ''bool'' | Является ли секция обязательной. Если да, и она отсутствует, то возбуждается исключение ''ConfigSectionNotFound''. В противном случае возвращается пустая секция, не содержащая параметров. //По умолчанию// ''True'' |
 +
 +Для работы с секциями можно применять менеджер контекста. Например для файла с содержимым:
 +<code toml>
 +[[section]]
 +param = "value1"
 +
 +[[section]]
 +param = "value2"
 +</code>
 +
 +Можно применить следующий код: 
 +<code python>
 +with ConfigFile('/etc/application.conf') as root_section:
 +    with root_sectin.get_list_section('section') as section_section:
 +        conf_ar = []
 +        for el in net_section:
 +            conf_ar.append(dict(
 +                param1 = el.get_value('parma1')
 +            ))
 + 
 +</code>
 +
 +
 +==== get_section_by_path() ====
 +
 +Подобен ''get_section()'', но позволяет пройти по иерархии дальше чем на один уровень. Каждый уровень указывается отдельным параметром
 +
 +<code>
 +obj.get_section_by_path(name, ..., [mandatory=False])
 +</code>
 +
 +**Возвращает:** Объект ''ConfigFileContent'' содержимого нижележашего уровня.
 +
 +^ Параметр ^ Тип ^ Описание ^
 +| ''name'' | ''str'' | Имя секции, как оно задано в файле. Параметр можно задавать несколько раз |
 +| ''mandatory'' | ''bool'' | Является ли секция обязательной. Если да, и она отсутствует, то возбуждается исключение ''ConfigSectionNotFound''. В противном случае возвращается пустая секция, не содержащая параметров. //По умолчанию// ''True''. Задаётся **ТОЛЬКО** в формате ключ-значение |
 +
 +Для работы с секциями можно применять менеджер контекста. Например для файла с содержимым:
 +<code toml>
 +[section.section2]
 +param1 = "value1"
 +</code>
 +
 +Можно применить следующий код: 
 +<code python>
 +with ConfigFile('/etc/application.conf') as root_section:
 +    with root_section.get_section_by_path('section', 'section2') as section_section:
         param1 = section_section.get_value('parma1')         param1 = section_section.get_value('parma1')
 </code> </code>