Уведомления

Группа в Telegram: @pythonsu

#1 Май 22, 2013 14:00:14

whow
Зарегистрирован: 2013-04-11
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Как правильно хранить run-time найстройки

Приветствую.

Достался от ушедшего разработчика проект по наследству.
Не сильно большой и сложный, ну да не суть.

А суть вот в чем: в приложении среди прочего есть модуль settings в котором хранятся некоторые настройки по умолчанию (на самом деле пара основных параметров, скажем foo и bar).
Приложение при запуске читает из командной строки конфигурацию (через argparse)

parser.add_argument('--foo', action='store_true')
parser.add_argument('--bar', action='store_true')
parser.add_argument('--baz', action='store_true')
А затем делает вот такую штуку:
for name, val in parser.parse_args(sys.argv[1:])._get_kwargs():
    setattr(sys.modules['settings'], name, val)
Мне это кажется во первых костылем, а во вторых, неудобно так писать хотя бы по той причине, что если где-то в коде я захочу использовать settings.baz, IDE будет ругаться, что нету его.
Идея сего костыля в том, что таким образом загнанные в настройки опции будут доступны в любом модуле, с которыми приложение в дальнейшем работает.

Как это реализовать правильно?

Офлайн

#2 Май 22, 2013 19:25:44

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Как правильно хранить run-time найстройки

whow
Как это реализовать правильно?
Скорее дело вкуса.
Я обычно делаю модуль в котором считывается при помощи ConfigParser файл инициализации и делаются нужные проверки. Потребители потом импортируют нужные элементы из этого модуля. Т.е. практически также как как делал ваш предшественник.



Отредактировано doza_and (Май 22, 2013 19:32:26)

Офлайн

#3 Май 22, 2013 20:31:12

whow
Зарегистрирован: 2013-04-11
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Как правильно хранить run-time найстройки

А как же “не использовать глобальные переменные в нескольких модулях”*?
Ну и по второму пункту - ИДЕ то ругается. Или просто прописать туда все необходимые переменные. А при необходимости их изменить менять в нескольких местах сразу? (в настройках argparse, в модуле с собственно опциями и т.п.).

Мне видится тут одиночка (aka singleton), но я вообщем то нуб в программировании, использовал этот паттерн только в PHP когда то и не уверен как правильно это в пайтоне реализовать.

Офлайн

#4 Май 22, 2013 20:58:27

whow
Зарегистрирован: 2013-04-11
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Как правильно хранить run-time найстройки

Хотя похоже это всетаки правильный способ.

единственное, что _get_kwargs() вроде как приватный метод, не комильфо его там использовать. но над этим наверно нада еще подумать, маловато опыта, что б сходу решение увидеть.

Офлайн

#5 Май 23, 2013 11:45:56

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Как правильно хранить run-time найстройки

whow
А как же “не использовать глобальные переменные в нескольких модулях”*?
А кто говорит про глобальные настройки. Это могут быть атрибуты класса…



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version