Работа с переменными окружения

get_env()

Получение параметра из переменной окружения

Функция вычитывает из переменной окружения параметр, преобразовывает к нужному типу и возвращает.

get_env(name, type_name, [default], [mandatory])
Параметр Тип Описание
name str Имя переменной из которой получаем параметр
type_name type Имя типа в который следует преобразовать данный параметр. В качестве типов можно использовать адаптеры типов
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__)

Хранение объектов конфигурации

Предполагается, что конфигурация приложения состоит из набора объектов (либо namedtuple либо 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 Идентификатор добавленного ранее объекта конфигурации