«Advanced {product_name} configuring», Алексей Макеев, Mail.Ru Group
-
Upload
mailru-group -
Category
Software
-
view
8.507 -
download
0
Transcript of «Advanced {product_name} configuring», Алексей Макеев, Mail.Ru Group
Intro
Провайдер Пользователь
Разработчик библиотеки API Разработчик
Разработчик .conf Служба эксплуатации
Служба эксплуатации GUI Конечный пользователь
• Важно удобство взаимодействия сторон
• И исключение ошибок
• Суть проблемы
• Общая схема решения
• Ядро конфига — базовый класс
• Применение базового класса — схема
конфигурирования
О чем доклад:
Конфигурация – интерфейс к ПО, должна обеспечивать удобство
работы.
Кроме того:
• Чем больше программа, тем больше параметров.
• Важна их проверка
• Важна согласованность частей системы
Суть проблемы
* не обязательно классы в терминах ООП – важно разделение задач
Общая схема решения
Схема конфигурирования
Базовый класс*
Формат
Носитель (формат) конфига:
Поддерживает чтение, типы данных, комментарии
Базовый класс. Полезные свойства
Носитель (формат) конфига:
Поддерживает достаточно гибкие структуры (в том числе
произвольную вложенность)
Базовый класс. Полезные свойства
Носитель (формат) конфига:
Нет самопалам – нужно что-то распространенное.
• yaml?
• json?
• xml?
Базовый класс. Полезные свойства
Умеет валидировать.
• Частично, что валидировать, а что нет — в руках разработчика.
• Обязательные настройки
• Типы данных
* Как вариант — валидация по схеме
* Опционально — запрет неизвестных параметров
Базовый класс. Полезные свойства
Опционально умеет: включения
разные варианты ссылок на включения
• абсолютный путь
• относительный путь, относительно текущего файла
• относительный путь, относительно cwd
разные варианты слияния
Базовый класс. Полезные свойства
Опционально умеет прочие полезные вещи:
• интерполяция
• синтаксический сахар доступа к значениям: в виде атрибутов, в
виде строки с разделителями
• модификация и запись в файл
Базовый класс. Полезные свойства
Стандартный ConfigParser
* в python 3: configparser
• плюсы: есть интерполяция, значения по умолчанию и запись
• минусы: носитель — ini-файл, без валидации
Базовый класс. Другие пакеты
Вслед за ConfigParser
• ввиду его недостатков последовал ср^W дебаты
• https://wiki.python.org/moin/ConfigParserShootout
Базовый класс. Другие пакеты
Configobj
• плюсы: мощный, много фич
• минусы: формат — синтаксически прокачанный ini
Базовый класс. Другие пакеты
ZConfig
• плюсы: XML-подобен, произвольная вложенность, валидация
• минусы: XML-подобен ;) похоже нет включений
Базовый класс. Другие пакеты