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

Различия

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

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

Предыдущая версия справа и слеваПредыдущая версия
lib.py:aw_config:obj [03.11.2024 16:46] awgurlib.py:aw_config:obj [23.06.2026 12:26] (текущий) awgur
Строка 4: Строка 4:
   * ''ConfigFile'' - обрабатывает файл целиком и предоставляет интерфейс работы с конфигурацией.   * ''ConfigFile'' - обрабатывает файл целиком и предоставляет интерфейс работы с конфигурацией.
   * ''ConfigFileContent'' - обрабатывает секции файла, давая интерфейс доступа к элементам конфигурации.   * ''ConfigFileContent'' - обрабатывает секции файла, давая интерфейс доступа к элементам конфигурации.
- 
- 
-====== Работа с файлом конфигурации ====== 
- 
-Конструктор объекта ''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> 
- 
-Иной работы объекты класса ''ConfigFile'' не делают. 
- 
- 
-===== Работа с параметрами конфигурации ===== 
- 
-Как известно, файлы конфигурации в формате toml легко можно представить в виде словаря Python (либо JSON-объекта). Для работы с одним уровнем данного словаря и создан класс ''ConfigFileContent''. Он даёт API работы с параметрами на данном текущем уровне. 
  
  
Строка 85: Строка 53:
 with ConfigFile('/etc/application.conf') 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>