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

Различия

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

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

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
lib.py:aw_config:func [30.10.2024 09:49] awgurlib.py:aw_config:func [03.11.2024 16:46] (текущий) awgur
Строка 1: Строка 1:
-====== ''get_env'' ======+====== Работа с переменными окружения ====== 
 + 
 +===== get_env() =====
  
 Получение параметра из переменной окружения Получение параметра из переменной окружения
Строка 15: Строка 17:
 | ''mandatory'' | ''bool'' | Обязательный параметр? Если параметр обязательный и в переменных окружения он отсутствует, а значение по умолчанию не заданно, то возникает исключение ''EnvConfigError'' | | ''mandatory'' | ''bool'' | Обязательный параметр? Если параметр обязательный и в переменных окружения он отсутствует, а значение по умолчанию не заданно, то возникает исключение ''EnvConfigError'' |
  
 +----
  
 **Возвращаемое значение:** Значение переменной окружения, приведённое к заданному типу, либо значение по умолчанию. **Возвращаемое значение:** Значение переменной окружения, приведённое к заданному типу, либо значение по умолчанию.
Строка 21: Строка 24:
  
  
 +====== Инструменты поддержки ======
 +
 +===== get_app_root() =====
 +
 +Функция определения абсолютного пути к имени директории, в которой расположено приложение.
 +
 +Функция построена на логике, когда python-модуль приложения расположен в корне директории данного приложения. Возвращается самая первая директория, которая не содержит обязательный для всех модулей файл ''%%__init__%%.py''. При наличии собственного стандарта размещения приложения в файловой системе, эту особенность нужно держать в голове.
 +
 +<code>
 +get_app_root(file_name)
 +</code>
 +
 +**Возвращает:** Полный путь к директории размещения модуля, файл которой дан в качестве аргумента
 +
 +^ Параметр ^ Значение ^
 +| ''file_name'' | Имя файла, составляющего модуль python |
 +
 +----
 +
 +Предлагаемое использование: в процессе разбора конфигураций вызов функции в форме:
 +<code python>
 +APP_PATH = get_app_root(__file__)
 +</code>
 +
 +
 +====== Хранение объектов конфигурации ======
 +
 +Предполагается, что конфигурация приложения состоит из набора объектов (либо [[https://docs.python.org/3/library/collections.html#collections.namedtuple|namedtuple]] либо [[https://docs.python.org/3/library/dataclasses.html|dataclass]]) в которых собраны параметры необходимые для каждого из компонентов приложения. Для упрощения работы с ними, данные объекты могу быть сохранены на этапе разбора конфигурации и отданы на этапе работы модуля предоставленным Библиотекой API.
 +
 +**Не производится защиты конфиденциальных данных. Этот вопрос остаётся за программистом**
 +
 +В случае ошибок преобразования при работе функций модуля возникает исключение ''AppConfManagerError''
 +
 +
 +===== init_configs() =====
 +
 +Инициализировать Хранилище.
 +
 +В рамках операции производится очистка хранилища. Данная операция должна быть выполнена перед использованием.
 +
 +<code>
 +init_configs()
 +</code>
 +
 +
 +===== add_config() =====
 +
 +Добавление в хранилище объекта конфигурации.
 +
 +При попытке повторной вставки элемента с имеющимся идентификатором, возникает исключение ''AppConfManagerError''.
 +
 +<code>
 +add_config(conf_selector, conf_obj)
 +</code>
 +
 +^ Параметр ^ Описание ^
 +| ''conf_selector'' | Элемент, с использованием которого можно получить данный конфигурационный объект в будущем. Здесь может использоваться всё, что пригодно для Python в качестве ключа словаря. Например: Объект типа класса данных (скажем если определено ''DBConfig = namedtuple(...)'', то этот самый ''DBConfig'' вполне подойдёт для идентификатора) |
 +| ''conf_obj'' | Собственно объект конфигурации. Так же не накладывается ограничений на тип аргумента |
 +
 +Пример: <code python>
 +add_config(NetConfig, NetConfig(
 +   port=root_section.get_value('port', int, 8080),
 +   baseurl=root_section.get_value('baseurl', str)
 +)
 +</code>
 +
 +
 +===== replace_config() =====
 +
 +Заменяет объект с заданным идентификатором в хранилище на новый, указанный в параметрах.
 +
 +<code>
 +replace_config(conf_selector, conf_obj)
 +</code>
 +
 +^ Параметр ^ Описание ^
 +| ''conf_selector'' | Идентификатор объекта конфигурации. См. [[#add_config]] |
 +| ''conf_obj'' | Собственно объект конфигурации. См. [[#add_config]] |
 +
 +
 +===== get_config() =====
 +
 +Получаем из хранилища добавленный ранее объект конфигурации по идентификатору.
 +
 +Если объект не добавлен, возникает исключение ''AppConfNotFound''
 +
 +<code>
 +get_config(conf_selector)
 +</code>
 +
 +^ Параметр ^ Описание ^
 +| ''conf_selector'' | Идентификатор добавленного ранее объекта конфигурации |