«Advanced {product_name} configuring», Алексей Макеев, Mail.Ru Group

26
Advanced {product_name} configuring Алексей Макеев, руководитель группы разработчиков

Transcript of «Advanced {product_name} configuring», Алексей Макеев, Mail.Ru Group

Advanced {product_name}

configuring

Алексей Макеев, руководитель группы разработчиков

Intro

Провайдер Пользователь

Разработчик библиотеки API Разработчик

Разработчик .conf Служба эксплуатации

Служба эксплуатации GUI Конечный пользователь

• Важно удобство взаимодействия сторон

• И исключение ошибок

• Суть проблемы

• Общая схема решения

• Ядро конфига — базовый класс

• Применение базового класса — схема

конфигурирования

О чем доклад:

Конфигурация – интерфейс к ПО, должна обеспечивать удобство

работы.

Кроме того:

• Чем больше программа, тем больше параметров.

• Важна их проверка

• Важна согласованность частей системы

Суть проблемы

* не обязательно классы в терминах ООП – важно разделение задач

Общая схема решения

Схема конфигурирования

Базовый класс*

Формат

Полезные свойства базового класса

Базовый класс.

Носитель (формат) конфига:

Поддерживает чтение, типы данных, комментарии

Базовый класс. Полезные свойства

Носитель (формат) конфига:

Поддерживает достаточно гибкие структуры (в том числе

произвольную вложенность)

Базовый класс. Полезные свойства

Носитель (формат) конфига:

Нет самопалам – нужно что-то распространенное.

• yaml?

• json?

• xml?

Базовый класс. Полезные свойства

Поддерживает значения по умолчанию

Базовый класс. Полезные свойства

Умеет валидировать.

• Частично, что валидировать, а что нет — в руках разработчика.

• Обязательные настройки

• Типы данных

* Как вариант — валидация по схеме

* Опционально — запрет неизвестных параметров

Базовый класс. Полезные свойства

Опционально умеет: включения

разные варианты ссылок на включения

• абсолютный путь

• относительный путь, относительно текущего файла

• относительный путь, относительно cwd

разные варианты слияния

Базовый класс. Полезные свойства

Опционально умеет прочие полезные вещи:

• интерполяция

• синтаксический сахар доступа к значениям: в виде атрибутов, в

виде строки с разделителями

• модификация и запись в файл

Базовый класс. Полезные свойства

yaml, включения, валидация, сахар доступа

Базовый класс. Наш опыт

Другие пакеты

Базовый класс.

Django

• source-файл как носитель — ок, но нет валидации

Базовый класс. Другие пакеты

Стандартный ConfigParser

* в python 3: configparser

• плюсы: есть интерполяция, значения по умолчанию и запись

• минусы: носитель — ini-файл, без валидации

Базовый класс. Другие пакеты

Вслед за ConfigParser

• ввиду его недостатков последовал ср^W дебаты

• https://wiki.python.org/moin/ConfigParserShootout

Базовый класс. Другие пакеты

Configobj

• плюсы: мощный, много фич

• минусы: формат — синтаксически прокачанный ini

Базовый класс. Другие пакеты

Config

• плюсы: мощная интерполяция, включения

• минусы: нет валидации

Базовый класс. Другие пакеты

ZConfig

• плюсы: XML-подобен, произвольная вложенность, валидация

• минусы: XML-подобен ;) похоже нет включений

Базовый класс. Другие пакеты

применяет базовый класс в контексте вашего продукта

Схема конфигурирования

Доступ к конфигу, например синглтон

опционально: нахождение конфига(ов) в ФС

Схема конфигурирования

Валидация конфига

Схема конфигурирования

Полезные надстройки, производные знания

Схема конфигурирования

Спасибо! Вопросы?

[email protected]