====== Работа с переменными окружения ====== ===== get_env() ===== Получение параметра из переменной окружения Функция вычитывает из переменной окружения параметр, преобразовывает к нужному типу и возвращает. get_env(name, type_name, [default], [mandatory]) ^ Параметр ^ Тип ^ Описание ^ | ''name'' | ''str'' | Имя переменной из которой получаем параметр | | ''type_name'' | ''type'' | Имя типа в который следует преобразовать данный параметр. В качестве типов можно использовать [[.::type_helper|адаптеры типов]] | | ''default'' | ''Any'' | Значение по умолчанию для данного параметра, в случае его отсутствия в переменных окружения. По умолчанию ''None'' | | ''mandatory'' | ''bool'' | Обязательный параметр? Если параметр обязательный и в переменных окружения он отсутствует, а значение по умолчанию не заданно, то возникает исключение ''EnvConfigError'' | ---- **Возвращаемое значение:** Значение переменной окружения, приведённое к заданному типу, либо значение по умолчанию. **Внимание!** Значение по умолчанию к заданному типу не приводится, а возвращается ровно в том виде, в котором было заданно при вызове функции ====== Инструменты поддержки ====== ===== get_app_root() ===== Функция определения абсолютного пути к имени директории, в которой расположено приложение. Функция построена на логике, когда python-модуль приложения расположен в корне директории данного приложения. Возвращается самая первая директория, которая не содержит обязательный для всех модулей файл ''%%__init__%%.py''. При наличии собственного стандарта размещения приложения в файловой системе, эту особенность нужно держать в голове. get_app_root(file_name) **Возвращает:** Полный путь к директории размещения модуля, файл которой дан в качестве аргумента ^ Параметр ^ Значение ^ | ''file_name'' | Имя файла, составляющего модуль python | ---- Предлагаемое использование: в процессе разбора конфигураций вызов функции в форме: APP_PATH = get_app_root(__file__) ====== Хранение объектов конфигурации ====== Предполагается, что конфигурация приложения состоит из набора объектов (либо [[https://docs.python.org/3/library/collections.html#collections.namedtuple|namedtuple]] либо [[https://docs.python.org/3/library/dataclasses.html|dataclass]]) в которых собраны параметры необходимые для каждого из компонентов приложения. Для упрощения работы с ними, данные объекты могу быть сохранены на этапе разбора конфигурации и отданы на этапе работы модуля предоставленным Библиотекой API. **Не производится защиты конфиденциальных данных. Этот вопрос остаётся за программистом** В случае ошибок преобразования при работе функций модуля возникает исключение ''AppConfManagerError'' ===== init_configs() ===== Инициализировать Хранилище. В рамках операции производится очистка хранилища. Данная операция должна быть выполнена перед использованием. init_configs() ===== add_config() ===== Добавление в хранилище объекта конфигурации. При попытке повторной вставки элемента с имеющимся идентификатором, возникает исключение ''AppConfManagerError''. add_config(conf_selector, conf_obj) ^ Параметр ^ Описание ^ | ''conf_selector'' | Элемент, с использованием которого можно получить данный конфигурационный объект в будущем. Здесь может использоваться всё, что пригодно для Python в качестве ключа словаря. Например: Объект типа класса данных (скажем если определено ''DBConfig = namedtuple(...)'', то этот самый ''DBConfig'' вполне подойдёт для идентификатора) | | ''conf_obj'' | Собственно объект конфигурации. Так же не накладывается ограничений на тип аргумента | Пример: add_config(NetConfig, NetConfig( port=root_section.get_value('port', int, 8080), baseurl=root_section.get_value('baseurl', str) ) ===== replace_config() ===== Заменяет объект с заданным идентификатором в хранилище на новый, указанный в параметрах. replace_config(conf_selector, conf_obj) ^ Параметр ^ Описание ^ | ''conf_selector'' | Идентификатор объекта конфигурации. См. [[#add_config]] | | ''conf_obj'' | Собственно объект конфигурации. См. [[#add_config]] | ===== get_config() ===== Получаем из хранилища добавленный ранее объект конфигурации по идентификатору. Если объект не добавлен, возникает исключение ''AppConfNotFound'' get_config(conf_selector) ^ Параметр ^ Описание ^ | ''conf_selector'' | Идентификатор добавленного ранее объекта конфигурации |