Найти - Пользователи
Полная версия: Как правильно хранить run-time найстройки
Начало » Python для новичков » Как правильно хранить run-time найстройки
1
whow
Приветствую.

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

А суть вот в чем: в приложении среди прочего есть модуль 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 будет ругаться, что нету его.
Идея сего костыля в том, что таким образом загнанные в настройки опции будут доступны в любом модуле, с которыми приложение в дальнейшем работает.

Как это реализовать правильно?
doza_and
whow
Как это реализовать правильно?
Скорее дело вкуса.
Я обычно делаю модуль в котором считывается при помощи ConfigParser файл инициализации и делаются нужные проверки. Потребители потом импортируют нужные элементы из этого модуля. Т.е. практически также как как делал ваш предшественник.
whow
А как же “не использовать глобальные переменные в нескольких модулях”*?
Ну и по второму пункту - ИДЕ то ругается. Или просто прописать туда все необходимые переменные. А при необходимости их изменить менять в нескольких местах сразу? (в настройках argparse, в модуле с собственно опциями и т.п.).

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

единственное, что _get_kwargs() вроде как приватный метод, не комильфо его там использовать. но над этим наверно нада еще подумать, маловато опыта, что б сходу решение увидеть.
4kpt
whow
А как же “не использовать глобальные переменные в нескольких модулях”*?
А кто говорит про глобальные настройки. Это могут быть атрибуты класса…
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB